【发布时间】:2018-09-23 17:01:06
【问题描述】:
我需要找到点和线段之间的最短距离(点定义为 x y,线使用端点 ax ay 和 bx by 定义)。
我已经编写了一些代码,但它似乎不适用于某些参数。我不确定某处是否只是一些小错误,或者(更有可能)它的工作方式根本上是错误的。
public static double GetDist(double ax, double ay, double bx, double by, double x, double y)
{
double Perpendicular = Math.Abs((by - ay) * x - (bx - ax) * y + bx * ay - by * ax) /
Math.Sqrt((ay - by) * (ay - by) + (ax - bx) * (ax - bx));
double to_axay = Math.Sqrt((x - ax) * (x - ax) + (y - ay) * (y - ay));
double to_bxby = Math.Sqrt((x - bx) * (x - bx) + (y - by) * (y - by));
double dist1 = Math.Sqrt((x - ax) * (x - ax) + (y - ay) * (y - ay));
double dist2 = Math.Sqrt((bx - ax) * (bx - ax) + (by - ay) * (by - ay));
double theta1 = Math.Atan(dist1);
double theta2 = Math.Atan(dist2);
double angle = Math.Abs(theta2 - theta1);
if (angle > Math.PI)
angle = 2 * Math.PI - angle;
if (angle <= (1 / 2 * Math.PI))
return Perpendicular;
else
{
if (to_axay >= to_bxby)
return to_bxby;
else
return to_axay;
}
}
不起作用时的示例:
x=0, y=30
ax=-30, ay=0
bx=30, by=0
预期结果是 30。我的程序改为返回 42.4264。
【问题讨论】:
-
如果
x=0, y=30和bx=0, by=30,为什么预期的结果是30?似乎该点在 on 线上(与 b 处的线端点相同),因此结果应该是0。或者也许我误解了什么 -
@RufusL 抱歉,在编写示例输入时出错。现在修复它们。
标签: c# geometry distance euclidean-distance