找到正确的对应点以延长线

时间:2018-12-17 10:16:22

标签: c++ geometry line

我有两条不平行的线(XA和YB),我需要将它们延伸到曲线段(PQ)。线由(x,y)点的阵列组成。 A是XA线的最后一点,B是YB线的最后一点。 P和Q是曲线的边缘点。

![enter image description here

现在,我需要将点A扩展到P,将点B扩展到Q。有没有办法找到PQ曲线的正确对应点,以便A-> P和B-> Q而不是A-> Q和B-> P,在后一种情况下,延长线将相交,这不应该发生。

以前,我尝试过一个简单的布尔值,但这是不正确的。

我尝试过的事情

if(abs(A.x() - P.x()) < abs(B.x() - P.x())
   // extend A to P
   // extend B to Q
else
   // extend A to Q
   // extend B to P

上面的方法不适用于下面显示的图像,因为然后将A线延伸到点Q,将B线延伸到P(用红色绘制的扩展名)。

![![enter image description here

解决方案应如下所示;

enter image description here enter image description here enter image description here

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

一种实现方式:

尝试一个变体,检查两个片段是否相交,如果相交,则为另一变体。

例如尝试[AP], [BQ]。检查它们是否相交。如果没有,那就是你的配置。否则,配置为[AQ], [BP]

要检查两个线段是否相交只是数学。检查来自math.stackexchange的帖子:https://math.stackexchange.com/questions/149622/finding-out-whether-two-line-segments-intersect-each-other