如何检查垂直是否与段相交? C#

问题描述 投票:2回答:1

我必须检查是否存在垂直。

我正在使用由两点定义的一个线段

  • T1(X1,Y1).. T2(X2,Y2)

然后我必须垂直,所以它进入第三点

  • Ts(xs,from)

这工作正常,但我不知道如何检查垂直是否存在。

计算垂直交叉点

我计算了TP(x4,y4)(T1,T2线上的点):

double dx = x2 - x1;
double dy = y2 - y1;
double mag = Math.Sqrt(dx * dx + dy * dy);
dx /= mag;
dy /= mag;

double lambda = (dx * (x3 - x1)) + (dy * (y3 - y1));
rx1 = (dx * lambda) + x1;
ry1 = (dy * lambda) + y1;

这很好用:

enter image description here

这应该抛出一个错误:

enter image description here

c# math geometry
1个回答
2
投票

如果您只需要检查垂直是否存在,那么您可以执行以下操作(基于草图):

  1. 创建向量v1(T1-T2),v2(T1-T3)和v3(T2-T3)。
  2. 评估角度a1(v1-v2)和a2(v1-v3)。
  3. 如果a1或a2的绝对值大于90º,则T1和T2之间不会有垂线。

评估矢量之间的角度是微不足道的:查找vector dot product or scalar product

© www.soinside.com 2019 - 2024. All rights reserved.