Skip to content

Python implementation for Jarvis March #223

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jul 8, 2018
2 changes: 2 additions & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@ lulucca12
<br>
GuyPozner
<br>
William Boyles
<br>
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Is the turn counter clockwise?
def CCW(p1, p2, p3):
return (p3[1]-p1[1])*(p2[0]-p1[0]) >= (p2[1]-p1[1])*(p3[0]-p1[0])


def jarvisMarch(gift):
n = len(gift) #Number of points in list
pointOnHull = min(gift) #leftmost point in gift
hull = [pointOnHull] #leftmost point guaranteed to be in hull

while True:
endpoint = gift[0] #Candidate for next point in hull
for j in range(1,n):
if endpoint==pointOnHull or not CCW(gift[j],hull[-1],endpoint):
endpoint = gift[j]

pointOnHull = endpoint

#Check if we have completely wrapped gift
if hull[0]==endpoint:
break
else:
hull.append(pointOnHull)

return hull


def main():
testGift = [(5, 7), (5, 7), (-6, -12), (-14, -14), (9, 9),
(-1, -1), (-10, 11), (-6, 15), (-6, -8), (15, -9),
(7, -7), (-2, -9), (6, -5), (0, 14), (2, 8)]
hull = jarvisMarch(testGift)

print("The points in the hull are:")
for point in hull:
print(point)

main()
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ Program.cs
{% sample lang="js" %}
### JavaScript
[import, lang:"javascript"](code/javascript/jarvis-march.js)
{% sample lang="py" %}
### Python
[import, lang:"python"](code/py/jarvisMarch.py)
{% endmethod %}

<script>
Expand Down