判断点是否在直线或线段上,可以转换使用叉积判断相同原点的2个线段时针拐向得到: 设点为Q,线段为P1P2,所以有三个点可以得到2个相同原点线段P1Q和P1P2,即使用矢量叉积求得2个线段方向比较,如果在同一方向即可认为Q在直线P1P2上: (Q - P1)X(P2 - P1) = 0。
使用叉积只能判断Q是否在直线P1P2上,如果是线段需要知道Q是否在以P1P2对角线的平行四边形内,即在P1、P2两个点坐标范围内,需要满足条件min(P1x, P2x) ≤ Qx ≤ max(P1x, P2x) && min(P1y, P2y) ≤ Qy ≤ max(P1y, P2y)。
综上判断Q是否在P1P2线段上需要满足以下2个条件:
1. (Q - P1)X(P2 - P1) = 0
2. min(P1x, P2x) ≤ Qx ≤ max(P1x, P2x) && min(P1y, P2y) ≤ Qy ≤ max(P1y, P2y)