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

时间:2018-03-05 20:18:38

标签: c# math geometry

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

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

  • Ť<子> 1 (X <子> 1 ,Y <子> 1 )..Ť<子> 2 (X <子> 2 ,Y <子> 2

然后我必须垂直,所以它转到第三点

  • Ť<子> 3 (X <子> 3 ,Y <子> 3

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

计算垂直交点

我计算了T P (x 4 ,y 4 )(T 1 上的点,T < sub> 2 line)with:

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

1 个答案:

答案 0 :(得分:2)

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

  1. 创建向量 v1 (T1-T2), v2 (T1-T3)和 v3 (T2-T3)。
  2. 评估角度 a1 (v1-v2)和 a2 (v1-v3)。
  3. 如果 a1 a2 的绝对值大于90º,则T1和T2之间不会有垂直。
  4. 评估向量之间的角度是微不足道的:查找vector dot product or scalar product