指向远离点的线段距离

Rya*_*yan 3 algorithm math computational-geometry

我正在寻找一个算法(或算法的名称),它将在一个线段上找到一个点,如果存在这样一个点,那就是距离不在线段上的另一个点一定距离.

即,存在三个点A,B,C ; 和可能的第四d.其中AB构成线段,而点C是线段AB的某处OFF的另一点.找到点D,如果存在这样的点,则出现在距离点C给定距离的线段AB上.distance

the*_*ejh 5

看这里:Circle-Line Intersection

C是中间的圆圈,distance是半径.

请注意,可能有两个结果点,您必须检查该点是否实际在您的线上(或通过扩展它将获得的线).


Cur*_*tis 5

我花了太长时间搞清楚这个问题,似乎无法在任何地方找到一个简单的答案,所以我想我会在这里发布它并节省一些人很多时间.即使最初的帖子很旧,我也很希望很久以前有人发布了一个简单的答案.这样可以节省我几天的实验.

public static Point PointFromEndOfLine(Point start, Point end, double distance)
{
    double x = end.X-start.X;   
    double y = end.Y-start.Y;
    double z = Math.Sqrt(x * x + y * y);  //Pathagrean Theorum for Hypotenuse
    double ratio = distance / z;
    double deltaX = x * ratio;
    double deltaY = y * ratio;

    return new Point(end.X-deltaX, end.Y-deltaY);
}
Run Code Online (Sandbox Code Playgroud)

上面的函数取一个startPoint(x,y)和一个endPoint(x,y)和一个距离(来自端点.如果你的距离为负,返回的点将在同一行的endPoint之外.如果你的距离是大于startPoint和endPoint之间的距离,返回点将位于起始点之前,但仍在同一行上.如果距离为正数且小于startPoint和endPoint之间的距离,则返回的点将位于距离端点"距离"的startPoint和endPoint之间的线段.

它起作用的原因是"类似三角形".想象一个大的直角三角形.通过平行于X轴的三角形和大三角形的x,y,z值绘制一条直线,并且由您绘制的线创建的较小的线将彼此成比例.

换句话说:x/X == y/Y == z/Z.

希望这可以帮助别人.