可以用叉乘或点乘的方式来判断。
代码:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def GetCross(p1,p2,p):
return (p2.x-p1.x)*(p.y-p1.y)-(p.x-p1.x)*(p2.y-p1.y)
def GetDot(p1,p2,p):
return (p2.x-p1.x)*(p.x-p1.x)+(p2.y-p1.y)*(p.y-p1.y)
def IsPointInMatrix(p):
p1 = Point(0, 5)
p2 = Point(0, 0)
p3 = Point(5, 0)
p4 = Point(5, 5)
return GetCross(p1,p2,p)*GetCross(p3,p4,p) >= 0 and GetCross(p2,p3,p) * GetCross(p4,p1,p) >= 0
pa = Point(-1, -1)
print(IsPointInMatrix(pa))
pb = Point(-1, 1)
print(IsPointInMatrix(pb))
pc = Point(1, 1)
print(IsPointInMatrix(pc))
pd = Point(1, -1)
print(IsPointInMatrix(pd))
def IsPointInMatrix2(p):
p1 = Point(0, 5)
p2 = Point(0, 0)
p3 = Point(5, 0)
p4 = Point(5, 5)
return GetDot(p1,p2,p) >= 0 and GetDot(p1,p4,p) >= 0 and GetDot(p3,p4,p) >=0 and GetDot(p3,p2,p) >= 0
pa = Point(-1, -1)
print(IsPointInMatrix2(pa))
pb = Point(-1, 1)
print(IsPointInMatrix2(pb))
pc = Point(1, 1)
print(IsPointInMatrix2(pc))
pd = Point(1, -1)
print(IsPointInMatrix2(pd))