Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'helpers.py')
-rw-r--r--helpers.py74
1 files changed, 41 insertions, 33 deletions
diff --git a/helpers.py b/helpers.py
index b0c5c84..335852c 100644
--- a/helpers.py
+++ b/helpers.py
@@ -22,52 +22,58 @@
# By Alex Levenson
#==================================================================
import math
-# distance calculator, pt1 and pt2 are ordred pairs
+
def distance(pt1, pt2):
- return math.sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2)
+ """Distance calculator, pt1 and pt2 are ordred pairs.
+ """
+ return math.sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2)
-# returns the angle between the line segment from pt1 --> pt2 and the x axis, from -pi to pi
def getAngle(pt1, pt2):
+ """Returns angle between line segment pt1 -> pt2 and x axis, from -pi to pi.
+ """
xcomp = pt2[0] - pt1[0]
ycomp = pt1[1] - pt2[1]
return math.atan2(ycomp, xcomp)
-# returns a list of ordered pairs that describe an equilteral triangle around the segment from pt1 --> pt2
-def constructTriangleFromLine(p1,p2):
+def constructTriangleFromLine(p1, p2):
+ """Returns list of ordered pairs describing equilteral triangle around segment pt1 --> pt2.
+ """
halfHeightVector = (0.57735 * (p2[1] - p1[1]), 0.57735 * (p2[0] - p1[0]))
p3 = (p1[0] + halfHeightVector[0], p1[1] - halfHeightVector[1])
p4 = (p1[0] - halfHeightVector[0], p1[1] + halfHeightVector[1])
return [p2, p3, p4]
-# returns the area of a polygon
def polyArea(vertices):
+ """Returns the area of a polygon.
+ """
n = len(vertices)
A = 0
- p=n - 1
- q=0
+ p = n - 1
+ q = 0
while q < n:
- A+=vertices[p][0] * vertices[q][1] - vertices[q][0] * vertices[p][1]
- p=q
+ A += vertices[p][0] * vertices[q][1] - vertices[q][0] * vertices[p][1]
+ p = q
q += 1
return A / 2.0
-#Some polygon magic, thanks to John W. Ratcliff on www.flipcode.com
-# returns true if pt is in triangle
def insideTriangle(pt, triangle):
-
+ """Returns true if pt is in triangle.
+
+ Some polygon magic, thanks to John W. Ratcliff on www.flipcode.com
+ """
ax = triangle[2][0] - triangle[1][0]
ay = triangle[2][1] - triangle[1][1]
bx = triangle[0][0] - triangle[2][0]
by = triangle[0][1] - triangle[2][1]
cx = triangle[1][0] - triangle[0][0]
cy = triangle[1][1] - triangle[0][1]
- apx= pt[0] - triangle[0][0]
- apy= pt[1] - triangle[0][1]
- bpx= pt[0] - triangle[1][0]
- bpy= pt[1] - triangle[1][1]
- cpx= pt[0] - triangle[2][0]
- cpy= pt[1] - triangle[2][1]
+ apx = pt[0] - triangle[0][0]
+ apy = pt[1] - triangle[0][1]
+ bpx = pt[0] - triangle[1][0]
+ bpy = pt[1] - triangle[1][1]
+ cpx = pt[0] - triangle[2][0]
+ cpy = pt[1] - triangle[2][1]
aCROSSbp = ax * bpy - ay * bpx
cCROSSap = cx * apy - cy * apx
@@ -86,39 +92,42 @@ def polySnip(vertices, u, v, w, n):
Cx = vertices[w][0]
Cy = vertices[w][1]
- if EPSILON > (((Bx-Ax) * (Cy - Ay)) - ((By - Ay) * (Cx - Ax))): return False
+ if EPSILON > (((Bx-Ax) * (Cy - Ay)) - ((By - Ay) * (Cx - Ax))):
+ return False
for p in range(0, n):
- if p == u or p == v or p == w: continue
+ if p == u or p == v or p == w:
+ continue
Px = vertices[p][0]
Py = vertices[p][1]
- if insideTriangle((Px, Py), ((Ax, Ay), (Bx, By), (Cx, Cy))): return False
+ if insideTriangle((Px, Py), ((Ax, Ay), (Bx, By), (Cx, Cy))):
+ return False
return True
-# decomposes a polygon into its triangles
def decomposePoly(vertices):
+ """Decomposes a polygon into its triangles.
+ """
vertices = list(vertices)
n = len(vertices)
result = []
if(n < 3): return [] # not a poly!
- # force a counter-clockwise polygon
+ # Force counter-clockwise polygon
if 0 >= polyArea(vertices):
vertices.reverse()
- # remove nv-2 vertices, creating 1 triangle every time
+ # Remove nv-2 vertices, creating 1 triangle every time
nv = n
count = 2 * nv # error detection
- m = 0
v = nv - 1
while nv > 2:
count -= 1
if 0 >= count:
return [] # Error -- probably bad polygon
- # three consecutive vertices
+ # Three consecutive vertices
u = v
if nv <= u: u = 0 # previous
v = u + 1
@@ -128,18 +137,17 @@ def decomposePoly(vertices):
if(polySnip(vertices, u, v, w, nv)):
- # record this triangle
+ # Record this triangle
result.append((vertices[u], vertices[v], vertices[w]))
- m += 1
- # remove v from remaining polygon
+ # Remove v from remaining polygon
vertices.pop(v)
nv -= 1
- # reset error detection
+ # Reset error detection
count = 2 * nv
return result
-def cast_tuple_to_int(tuple):
+def cast_tuple_to_int(tuple_input):
"""Cast tuple values to ints to avoid gtk+ and pygame's dislike of floats.
"""
- return [int(i) for i in tuple]
+ return [int(i) for i in tuple_input]