pgfw/pgfw/motion.py

31 lines
976 B
Python

from math import sin, cos, atan2, radians
def get_step(start, end, speed):
x0, y0 = start
x1, y1 = end
angle = atan2(x1 - x0, y1 - y0)
return speed * sin(angle), speed * cos(angle)
def get_endpoint(start, angle, magnitude):
x0, y0 = start
angle = radians(angle)
return x0 + sin(angle) * magnitude, y0 - cos(angle) * magnitude
def rotate_2d(point, center, angle, translate_angle=True):
if translate_angle:
angle = radians(angle)
x, y = point
cx, cy = center
return cos(angle) * (x - cx) - sin(angle) * (y - cy) + cx, \
sin(angle) * (x - cx) + cos(angle) * (y - cy) + cy
def get_points_on_circle(center, radius, count, offset=0):
angle_step = 360.0 / count
points = []
current_angle = 0
for _ in xrange(count):
points.append(rotate_2d((center[0], center[1] - radius), center,
current_angle + offset))
current_angle += angle_step
return points