Algorithm 线段上的点与点的距离

Algorithm 线段上的点与点的距离,algorithm,math,computational-geometry,Algorithm,Math,Computational Geometry,我正在寻找一种算法(或算法名称),该算法将在线段上找到一个点,如果存在这样的点,即距离另一个不在线段上的点的给定距离 i、 例如,存在三个点,A,B,C;可能还有第四个D。其中,AB构成一条线段,点C是线段AB之外的另一个点。找到一个点D,如果该点存在,则该点出现在线段AB上,该线段距离点C有一个给定的距离距离 C是圆的中间,distance是半径 请注意,可能会有两个结果点,您必须检查该点是否在您的线上(或者在您通过扩展它而获得的线上)。我花了太长时间来解决这个问题,似乎在任何地方都找不到简单

我正在寻找一种算法(或算法名称),该算法将在线段上找到一个点,如果存在这样的点,即距离另一个不在线段上的点的给定距离

i、 例如,存在三个点,ABC;可能还有第四个D。其中,AB构成一条线段,点C是线段AB之外的另一个点。找到一个点D,如果该点存在,则该点出现在线段AB上,该线段距离点C有一个给定的距离
距离

C
是圆的中间,
distance
是半径


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

我花了太长时间来解决这个问题,似乎在任何地方都找不到简单的答案,所以我想我应该将其发布在这里,这样可以节省一些人的时间。尽管最初的帖子很旧,但我真希望有人早就发布了一个简单的答案。这会节省我几天的实验时间

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);
}
上面的函数取起点(x,y)、终点(x,y)和距离(从端点开始。如果距离为负数,则返回点将超出同一直线上的端点。如果距离大于起始点和端点之间的距离,则返回点将位于起始点之前,但仍在同一直线上。如果距离为正数且小于即使是起始点和端点,返回的点将位于起始点和端点之间的线段上,距离端点为“距离”

它工作的原因是“相似的三角形”。想象一个大的直角三角形。在三角形中画一条平行于X轴的直线,你的大三角形的X,y,z值与你画的直线所产生的小三角形的X,y,z值将成比例

换句话说:x/x==y/y==z/z


希望这能帮助别人。

这是一个很好的布尔测试,可以检查是否存在这样的点D。但是,它看起来不会告诉我点是什么D是/是。另外,它看起来像是一条无限长的直线,我需要一个线段。谢谢你的建议。这看起来不像是回答了原来的问题。它找到了一个点,距离线段的一个端点,沿着两端定义的直线;但原来的问题是asking表示距离第三个点
距离的点,该点可能在线段上,也可能不在线段上。这正是我所需要的。