31 lines
976 B
Python
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
|