Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình kiểm tra các điểm tạo thành đa giác lõm hay không trong Python


Giả sử chúng ta có các điểm bên ngoài của một đa giác theo thứ tự theo chiều kim đồng hồ. Chúng ta phải kiểm tra các điểm này có tạo thành một đa giác lồi hay không. Một đa giác được gọi là lõm nếu bất kỳ góc nội tại nào của nó lớn hơn 180°.

Chương trình kiểm tra các điểm tạo thành đa giác lõm hay không trong Python

Từ sơ đồ này rõ ràng rằng với mỗi ba điểm liên tiếp, góc nội tại không quá 180° trừ CDE.

Vì vậy, nếu đầu vào là points = [(3,4), (4,7),(7,8),(8,4),(12,3),(10,1),(5,2)], thì đầu ra sẽ là True.

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau:

  • n := kích thước points
  • với i từ 0 đến kích thước points, thực hiện
    • p1 := points[i-2] khi i > 1, ngược lại points[n-2]
    • p2 := points[i-1] khi i > 0, ngược lại points[n-1]
    • p3 := points[i]
    • nếu góc giữa các điểm (p1, p2, p3) > 180, thì trả về True
  • trả về False

Ví dụ

Hãy xem triển khai sau để hiểu rõ hơn:

import math
def get_angle(a, b, c):
    angle = math.degrees(math.atan2(c[1]-b[1], c[0]-b[0]) - math.atan2(a[1]-b[1], a[0]-b[0]))
    return angle + 360 if angle < 0 else angle

def solve(points):
    n = len(points)
    for i in range(len(points)):
        p1 = points[i-2]
        p2 = points[i-1]
        p3 = points[i]
        if get_angle(p1, p2, p3) > 180:
            return True
    return False

points = [(3,4), (4,7),(7,8),(8,4),(12,3),(10,1),(5,2)]
print(solve(points))

Đầu vào

[(3,4), (4,7),(7,8),(8,4),(12,3),(10,1),(5,2)]

Đầu ra

True