|
1 | 1 | # Is the turn counter clockwise?
|
2 |
| -def CCW(p1, p2, p3): |
3 |
| - return (p3[1]-p1[1])*(p2[0]-p1[0]) >= (p2[1]-p1[1])*(p3[0]-p1[0]) |
| 2 | +def ccw(p1, p2, p3): |
| 3 | + return (p3[1] - p1[1]) * (p2[0] - p1[0]) \ |
| 4 | + >= (p2[1] - p1[1]) * (p3[0] - p1[0]) |
4 | 5 |
|
5 | 6 |
|
6 |
| -def jarvisMarch(gift): |
7 |
| - n = len(gift) #Number of points in list |
8 |
| - pointOnHull = min(gift) #leftmost point in gift |
9 |
| - hull = [pointOnHull] #leftmost point guaranteed to be in hull |
10 |
| - |
| 7 | +def jarvis_march(gift): |
| 8 | + n = len(gift) # Number of points in list |
| 9 | + point_on_hull = min(gift) # leftmost point in gift |
| 10 | + hull = [point_on_hull] # leftmost point guaranteed to be in hull |
| 11 | + |
11 | 12 | while True:
|
12 |
| - endpoint = gift[0] #Candidate for next point in hull |
13 |
| - for j in range(1,n): |
14 |
| - if endpoint==pointOnHull or not CCW(gift[j],hull[-1],endpoint): |
| 13 | + # Candidate for next point in hull |
| 14 | + endpoint = gift[0] |
| 15 | + for j in range(1, n): |
| 16 | + if endpoint == point_on_hull \ |
| 17 | + or not ccw(gift[j], hull[-1], endpoint): |
15 | 18 | endpoint = gift[j]
|
16 |
| - |
17 |
| - pointOnHull = endpoint |
18 |
| - |
19 |
| - #Check if we have completely wrapped gift |
20 |
| - if hull[0]==endpoint: |
| 19 | + |
| 20 | + point_on_hull = endpoint |
| 21 | + |
| 22 | + # Check if we have completely wrapped gift |
| 23 | + if hull[0] == endpoint: |
21 | 24 | break
|
22 | 25 | else:
|
23 |
| - hull.append(pointOnHull) |
24 |
| - |
| 26 | + hull.append(point_on_hull) |
| 27 | + |
25 | 28 | return hull
|
26 | 29 |
|
27 | 30 |
|
28 | 31 | def main():
|
29 |
| - testGift = [(-5, 2), (5, 7), (-6, -12), (-14, -14), (9, 9), |
30 |
| - (-1, -1), (-10, 11), (-6, 15), (-6, -8), (15, -9), |
31 |
| - (7, -7), (-2, -9), (6, -5), (0, 14), (2, 8)] |
32 |
| - hull = jarvisMarch(testGift) |
33 |
| - |
| 32 | + test_gift = [ |
| 33 | + (-5, 2), (5, 7), (-6, -12), (-14, -14), (9, 9), |
| 34 | + (-1, -1), (-10, 11), (-6, 15), (-6, -8), (15, -9), |
| 35 | + (7, -7), (-2, -9), (6, -5), (0, 14), (2, 8) |
| 36 | + ] |
| 37 | + hull = jarvis_march(test_gift) |
| 38 | + |
34 | 39 | print("The points in the hull are:")
|
35 | 40 | for point in hull:
|
36 | 41 | print(point)
|
37 | 42 |
|
38 |
| -main() |
| 43 | + |
| 44 | +if __name__ == "__main__": |
| 45 | + main() |
0 commit comments