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.py96
1 files changed, 48 insertions, 48 deletions
diff --git a/helpers.py b/helpers.py
index 08c5da0..1d0d2fe 100644
--- a/helpers.py
+++ b/helpers.py
@@ -1,48 +1,51 @@
-# Physics, a 2D Physics Playground for Kids
-
-# Copyright (C) 2008 Alex Levenson and Brian Jordan
-# Copyright (C) 2013 Walter Bender
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
+"""
+ Physics, a 2D Physics Playground for Kids
+ Copyright (C) 2008 Alex Levenson and Brian Jordan
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+#==================================================================
+# Physics.activity
+# Helper classes and functions
+# By Alex Levenson
+#==================================================================
import math
-
def distance(pt1, pt2):
- '''Distance calculator, pt1 and pt2 are ordred pairs.'''
+ """Distance calculator, pt1 and pt2 are ordred pairs.
+ """
return math.sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2)
-
def getAngle(pt1, pt2):
- '''Returns angle between line segment pt1 -> pt2 and x axis,
- from -pi to pi.'''
+ """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)
-
def constructTriangleFromLine(p1, p2):
- '''Returns list of ordered pairs describing equilteral triangle around
- segment pt1 --> pt2.'''
+ """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]
-
def polyArea(vertices):
- '''Returns the area of a polygon.'''
+ """Returns the area of a polygon.
+ """
n = len(vertices)
A = 0
p = n - 1
@@ -53,10 +56,12 @@ def polyArea(vertices):
q += 1
return A / 2.0
-
+
def insideTriangle(pt, triangle):
- '''Returns true if pt is in triangle.
- Some polygon magic, thanks to John W. Ratcliff on www.flipcode.com'''
+ """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]
@@ -72,10 +77,9 @@ def insideTriangle(pt, triangle):
aCROSSbp = ax * bpy - ay * bpx
cCROSSap = cx * apy - cy * apx
- bCROSScp = bx * cpy - by * cpx
+ bCROSScp = bx * cpy - by * cpx
return aCROSSbp >= 0.0 and bCROSScp >= 0.0 and cCROSSap >= 0.0
-
def polySnip(vertices, u, v, w, n):
EPSILON = 0.0000000001
@@ -103,12 +107,12 @@ def polySnip(vertices, u, v, w, n):
def decomposePoly(vertices):
- '''Decomposes a polygon into its triangles.'''
+ """Decomposes a polygon into its triangles.
+ """
vertices = list(vertices)
n = len(vertices)
result = []
- if(n < 3):
- return [] # not a poly!
+ if(n < 3): return [] # not a poly!
# Force counter-clockwise polygon
if 0 >= polyArea(vertices):
@@ -116,23 +120,20 @@ def decomposePoly(vertices):
# Remove nv-2 vertices, creating 1 triangle every time
nv = n
- count = 2 * nv # error detection
+ count = 2 * nv # error detection
v = nv - 1
while nv > 2:
count -= 1
if 0 >= count:
- return [] # Error -- probably bad polygon
+ return [] # Error -- probably bad polygon
# Three consecutive vertices
- u = v
- if nv <= u:
- u = 0 # previous
+ u = v
+ if nv <= u: u = 0 # previous
v = u + 1
- if nv <= v:
- v = 0 # new v
+ if nv <= v: v = 0 # new v
w = v + 1
- if nv <= w:
- w = 0 # next
+ if nv <= w: w = 0 # next
if(polySnip(vertices, u, v, w, nv)):
@@ -146,8 +147,7 @@ def decomposePoly(vertices):
count = 2 * nv
return result
-
def tuple_to_int(tuple_input):
- '''Cast tuple values to ints to avoid gtk+ and pygame's dislike of
- floats.'''
+ """Cast tuple values to ints to avoid gtk+ and pygame's dislike of floats.
+ """
return [int(i) for i in tuple_input]