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 bao lồi 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 bao lồi hay không.

Chương trình kiểm tra các điểm tạo thành bao lồi 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°. Vì vậy nếu tất cả các góc không quá 180° thì đa giác là bao lồi.

Vì vậy, nếu đầu vào là points = [(3,4), (4,7),(7,8),(11,6),(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ề False
  • trả về True

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 False
    return True

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

Đầu vào

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

Đầu ra

True