判断点是否在一个矩形内

可以用叉乘或点乘的方式来判断。

代码:

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))

猜你喜欢

转载自blog.csdn.net/faithmy509/article/details/82803646