Perl+点到线段的最小距离

Perl+点到线段的最小距离

用Perl怎样实现点到线段的最小距离算法
最笨的方法

求出所有 点x,y 到线段上所有点的xx,yy的距离

然后排序 求出最小值  
线段上所有点,你知道一个线段上有多少个点嘛???
你可以这样:
假设点是(a,b),线段的两点分别是(c,d),(e,f)
知道三个点的坐标,你算出(a,b),(c,d)的长度和(c,d),(e,f)的长度,以及他们的夹角角度,算出三角形的面积。然后(c,d)(e,f)作为底,算出高就是那个最小长度了。


QUOTE:
原帖由 撒哈拉里的鱼 于 2008-11-19 15:13 发表
你可以这样:
假设点是(a,b),线段的两点分别是(c,d),(e,f)
知道三个点的坐标,你算出(a,b),(c,d)的长度和(c,d),(e,f)的长度,以及他们的夹角角度,算出三角形的面积。然后(c,d)(e,f)作为底,算出高就是那个 ...

re
知道三边a,b,c之后用海勒公式就可以算了
S=√[s(s-a)(s-b)(s-c)]


QUOTE:
原帖由 撒哈拉里的鱼 于 2008-11-19 15:13 发表
你可以这样:
假设点是(a,b),线段的两点分别是(c,d),(e,f)
知道三个点的坐标,你算出(a,b),(c,d)的长度和(c,d),(e,f)的长度,以及他们的夹角角度,算出三角形的面积。然后(c,d)(e,f)作为底,算出高就是那个 ...

嘿嘿 错了。
你那个是点到 线段所在直线的距离。

说个笨方法。。。
设 点为A
线段的两个端点为BC
如果ABC 和 ACB都为锐角 就按照鱼的方法做
如果ABC为钝角那么最短距离为 AB
如果ACB为钝角那么最短距离为 AC
是的,到这里都一样了。知道了两个边和一个夹角,或者直接三个边,简单的数学变换可以有很多做法的,直接三边可能是简单一些。
我想,首先,过该点作一垂直于线段的直线,判断该直线与线段所在的直线的交点,是否在线段上,如是,则求出该两点间的距离,就是最小值;如否,判断该点与线段两端点之间的距离,谁小,就是所求距离。



QUOTE:
原帖由 DQP 于 2008-11-19 15:23 发表



嘿嘿 错了。
你那个是点到 线段所在直线的距离。

说个笨方法。。。
设 点为A
线段的两个端点为BC
如果ABC 和 ACB都为锐角 就按照鱼的方法做
如果ABC为钝角那么最短距离为 AB
如果ACB为钝角那么最 ...

确实,我审题出现一点问题,你的思路是完整的。
你还是第一个叫我鱼的人,看了半天才明白,哈哈,这个名字不错。
同意五楼观点