如何知道一个点是否位于其他两个点之间的直线上?

2024-10-01 02:22:06 发布

您现在位置:Python中文网/ 问答频道 /正文

假设你有一个二维平面,上面有两个点(称为a、N1和N2)

N1=[9*H//8,0] N2=[9*H//8,W]

如何检查我的第三个点P= (int(x1), int(y1))是否与穿过N1和N2的线相交?(请注意,p点或第三点可能在飞机上的任何位置移动,我只知道它何时在线)

那么让我们说

enter image description here

我能想到的是:

            N1 = np.array([9 * H // 8, 0])
            N2 = np.array([9 * H // 8, W]);

            p_aftertop = (int(x1), int(y1))

            v1 = (0,W )  # Vector 1
            v2 = (9 * H // 8 - int(x1),  W- int(y1))  # Vector 1

            xp = v1[0] * v2[1] - v1[1] * v2[0]  # Cross product
            if (xp != 0):
                status = cv2.imwrite('/img' + str(i) + '.jpg', frame)
                print('on the line')
                i +=1

我不知道为什么我的方法不管用。 我如何知道这一点何时在与这两个点相交的线上


Tags: nparrayxp平面v2intv1x1
2条回答

如果该点满足以下条件,则该点位于直线内:

1.p1与直线端点的坡度应相等。(且方向相反)

2.点p1应位于直线端点的x或y坐标边界内

伪代码

bool liesOnline:
  if (slope(N1,p1) ==slope(N1,N2) and (N1x <= p1x <= N2x  or N1y<= p1y <= N2y) 
   return true;
  else 
   return false;

其中N1x是N1的x坐标

请注意slope of the line是要在两点之间计算的数学函数

你的方法很好,但需要小的修正

if (xp == 0):

相关问题 更多 >