题目:leetcode1037.求有效的回旋镖
方法一:求角度
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
if points[0] == points[1] or points[0] == points[2] or points[2] == points[1]:
return False
x1, y1 = points[0][0], points[0][1]
x2, y2 = points[1][0], points[1][1]
x3, y3 = points[2][0], points[2][1]
import math
angle1 = math.atan((y2 - y1) / (x2 - x1)) if x2 != x1 else float('inf')
angle2 = math.atan((y3 - y2) / (x3 - x2)) if x2 != x3 else float('inf')
return angle1 != angle2
方法二:求斜率
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
x1, y1 = points[0][0], points[0][1]
x2, y2 = points[1][0], points[1][1]
x3, y3 = points[2][0], points[2][1]
return (x2 - x1) * (y3 - y2) != (y2 - y1) * (x3 - x2)
方法三:向量叉乘求面积
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
v1 = (points[1][0] - points[0][0], points[1][1] - points[0][1])
v2 = (points[2][0] - points[0][0], points[2][1] - points[0][1])
return v1[0] * v2[1] - v1[1] * v2[0] != 0
方法四:求面积
class Solution:
def isBoomerang(self, points: List[List[int]]) -> bool:
x1, y1 = points[0][0], points[0][1]
x2, y2 = points[1][0], points[1][1]
x3, y3 = points[2][0], points[2][1]
return (x1*y2-x2*y1)+(x2*y3-x3*y2)+(x3*y1-x1*y3) != 0