我正在寻找一种算法(或算法的名称),它将在线段上找到一个点,如果存在这样一个点,那是一些给定的距离从不在线段的另一点。距离某一点的线段距离上的点
即,存在着,三个点甲,乙,Ç;并可能有第四个D。其中AB构成一条线段,并且点C是线段AB的某处关闭的另一点。找到一个点D,如果存在这样的点,则出现在线段AB上,这是距离点distance
远点C。
我正在寻找一种算法(或算法的名称),它将在线段上找到一个点,如果存在这样一个点,那是一些给定的距离从不在线段的另一点。距离某一点的线段距离上的点
即,存在着,三个点甲,乙,Ç;并可能有第四个D。其中AB构成一条线段,并且点C是线段AB的某处关闭的另一点。找到一个点D,如果存在这样的点,则出现在线段AB上,这是距离点distance
远点C。
我花了太多时间想清楚这一点,似乎无法在任何地方找到一个简单的答案,所以我想我会在这里发布它,并节省一些人很多时间。尽管原始发布是旧的,但我确实希望有人早已发布了一个简单的答案。这将节省我几天的试验。
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)和端点(X,Y)的距离(从端点。如果您的距离是负的,则返回的点将超越沿端点如果您的距离大于startPoint和endPoint之间的距离,则返回点将在您的起点之前,但仍位于同一条线上。如果您的距离是正数并且小于startPoint和endPoint之间的距离,返回的点将在startPoint和endPoint之间的距终点“距离”处的线段上
它工作的原因是'类似三角形'。通过与X轴平行的三角形以及大三角形的x,y,z值,并且由您绘制的直线创建的较小值将彼此成比例。
换句话说:X/X == Y/== Z/Z
希望这有助于有人出来。
这看起来不像它回答原来的问题。这找到了一个距离线段的一个端点的“距离”,沿着由两端定义的线;但最初的问题是要求一个距离第三点的距离,这个点可能或可能不在线段上。 – 2012-05-24 20:50:42
正是我需要的。 – Brent 2016-10-29 00:52:25
这是一个很好的布尔测试,用来检查是否有这样一个点D.但是,它看起来并不像它会告诉我D点是什么。此外,它看起来像是一个无限的线,我需要一个线段。谢谢,虽然这个建议。 – Ryan 2010-11-21 16:20:22