canvas中求一个点是否在一条直线上

652 阅读1分钟

首先我们知道一条线也是两个点相连组成的

所以这个问题需要的已知条件就应该有三个

直线的起始坐标(A)结束坐标(B)和点(P

思路

  1. 首先求出点P到直线起始坐标A的长度为PA,点P到直线结束坐标B的长度为PB,直线AB的长度
  2. 求直线长度的公式为Math.sqrt((P.x-A.x)**2+(P.y-A.y)**2)
  3. 然后判断AB-(PA+PB) 是否等于0 注:数字做运算时精度会丢失

思路也有了下面我们找一道题试试

例子

BUZAI.png

如图已知点的坐标P为(4,6) 直线起始坐标A为(2,2) 结束坐标B为(6,5)

然后我们就可以将已知条件带入求直线长度的公式得出

直线P_A = 4.47213595499958

直线P_B = 2.23606797749979

直线A_B = 5

5 - (4.47213595499958+2.23606797749979) != 0

所以点P不在直线AB

zai.png

如图已知点的坐标P为(4,3.5) 直线起始坐标A为(2,2) 结束坐标B为(6,5)

然后我们就可以将已知条件带入求直线长度的公式得出

直线P_A = 2.5

直线P_B = 2.5

直线A_B = 5

5 - (2.5 + 2.5) == 0

所以点P在直线AB

写在最后

解题有很多方法 以上只是其中一种

希望可以帮助到需要的童鞋

如果有错误的话也欢迎大家指出 一定听取建议

大佬们嘴下留情