我有由两个 2D 点 A,B
定义的线段 AB
。
我想要做的是找到一个点 C
,距离 B
的距离为 d
。
这两个约束是 BC
必须垂直于 AB
并且 BC
始终是 90
逆时针相对度到 AB
。
到目前为止,我有以下内容
double d = .01;
Coordinate C = new Coordinate(A.Lat - B.Lat, A.Long - B.Long);
C.Long = C.Long * A.Long * Math.Cos(90);
C.Lat = C.Lat * A.Lat * Math.Cos(90);
C.Long = A.Long + C.Long * d;
C.Lat = A.Lat + C.Lat * d;
基本上我要问的是,我哪里出了问题?是c#代码吗?这是逻辑吗?使用这两个约束解决 C
的步骤是什么。
最佳答案
归一化 AB 向量并将其旋转 90 度:
ABY = B.Y - A.Y
ABX = B.X - A.X
Len = Sqrt(ABY*ABY + ABX*ABX)
C.X = B.X - d * ABY / Len
C.Y = B.Y + d * ABX / Len
请注意,对于地理坐标(纬度/经度)和较大的距离,结果并不准确。
Link供进一步引用(Bearing
部分,然后是 Destination point given distance and bearing from start point
)
关于c# - 求 C 点与 AB 垂线 BC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48233255/