c# - 求 C 点与 AB 垂线 BC

标签 c# algorithm math geometry 2d

我有由两个 2DA,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 的步骤是什么。

enter image description here

最佳答案

归一化 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/

相关文章:

python - Python 中的最大似然函数

math - float 学有问题吗?

c# - resx 回退系统中的额外级别

c# - 我可以为枚举创建构造函数吗?

c# - 并行双向选择排序

algorithm - 使用散列计算整数数组中某个模式出现的次数

java - 生成调用图的好算法?

javascript - 计算图像 A 比图像 B 大多少

c# - 避免数据表列上的 LINQ 表达式中出现 NullReferenceException

c# - 从数据库中读取 SQLite DateTime 值并将其分配给 C# 字符串变量