解法
- a = x 2 − x 1 y 2 − y 1 , b = y 1 − a x 1 a=\frac{x_{2}-x_{1}}{y_{2}-y_{1}} ,b=y_{1}-ax_{1} a=y2−y1x2−x1,b=y1−ax1
- d = y n − y n − 1 x n − x n − 1 d=\frac{y_{n}-y_{n-1}}{x_{n}-x_{n-1}} d=xn−xn−1yn−yn−1
- ( y n − y n − 1 ) ∗ x n − x n − 1 = ( y n − 1 − y n − 2 ) ∗ x n − 1 − x n − 2 (y_{n}-y_{n-1})*x_{n}-x_{n-1}=(y_{n-1}-y_{n-2})*x_{n-1}-x_{n-2} (yn−yn−1)∗xn−xn−1=(yn−1−yn−2)∗xn−1−xn−2
问题
-
python浮点数无法转换,斜率为0.5
-
return即结束
-
时间和空间复杂度太大
-
没有斜率(x=0)
解决办法
- python3可以使用强制转换达到结果相等,但python未找到合适的解决办法,只能使用解法三
- 设置条件只在结果为False时return
- 减少循环,尽量设置在同一个for中,如斜率为0的情况设置flag,根据条件进入不同的检验代码中或者选择解法三
x1,y1=coordinates[0]
x2,y2=coordinates[1]
flag=False
if x2-x1!=0:
flag=True
a=(y2-y1)/(x2-x1)
b=y1-a*x1
i=len(coordinates)-1
while i>1:
if flag and coordinates[i][1]!=a*coordinates[i][0]+b:return False
elif (not flag) and coordinates[i][0]!=x1:return False
i-=1
return True
- 判断前两个x是否相等,如果相等,后续也要相等
- 注:y=0可以使用斜率式解决,不用单另判断。for取不到最后一个,但是while要注意
解法三
(此为搬运,仅为研究学习,因为从未想到过这个解法)
x1 = coordinates[1][0] - coordinates[0][0]
y1 = coordinates[1][1] - coordinates[0][1]
for i in range(len(coordinates)):
x2 = coordinates[i][0] - coordinates[0][0]
y2 = coordinates[i][1] - coordinates[0][1]
if x1 * y2 != x2 * y1:
return False
return True
如有侵犯,私信必删