指向远离点的线段距离

时间:2010-11-20 17:11:31

标签: algorithm math computational-geometry

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

即存在三点 A B C ;可能还有第四个 D AB 组成一个线段,而 C 点是线段 AB 的某个OFF点的另一个点。找到 D 点(如果存在此点),该点出现在 AB 的线段上,距离点 C <给定距离distance < /强>

2 个答案:

答案 0 :(得分:5)

请看这里:Circle-Line Intersection

C是圆圈中间,distance是半径。

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

答案 1 :(得分: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);
}

上面的函数采用startPoint(x,y)和endPoint(x,y)和距离(距离端点。如果距离为负,则返回的点将沿着同一条线超出endPoint。你的距离大于startPoint和endPoint之间的距离,返回点将在你的起点之前,但仍然在同一条线上。如果你的距离是正数并且小于startPoint和endPoint之间的距离,则返回的点数将是位于距终点“距离”的startPoint和endPoint之间的线段上。

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

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

希望这可以帮助别人。