98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
import math
|
|
import RingTrack
|
|
import RingAction
|
|
center = (0, 0)
|
|
up = (0, 1)
|
|
down = (0, -1)
|
|
left = (-1, 0)
|
|
right = (1, 0)
|
|
ul = (-1, 1)
|
|
ur = (1, 1)
|
|
lr = (1, -1)
|
|
ll = (-1, -1)
|
|
|
|
def ringLerp(t, a, b):
|
|
omT = 1.0 - t
|
|
return (float(a[0]) * omT + float(b[0]) * t, float(a[1]) * omT + float(b[1]) * t)
|
|
|
|
|
|
def ringClerp(t, a, b):
|
|
return ringLerp(t * t * (3 - 2 * t), a, b)
|
|
|
|
|
|
def getSquareRingActions():
|
|
return ([RingAction.RingActionFunction(ringClerp, [ul, ur]),
|
|
RingAction.RingActionFunction(ringClerp, [ur, lr]),
|
|
RingAction.RingActionFunction(ringClerp, [lr, ll]),
|
|
RingAction.RingActionFunction(ringClerp, [ll, ul])], [0.25,
|
|
0.25,
|
|
0.25,
|
|
0.25])
|
|
|
|
|
|
def getVerticalSlotActions(x):
|
|
return ([RingAction.RingActionFunction(ringClerp, [(x, 1), (x, -1)]), RingAction.RingActionFunction(ringClerp, [(x, -1), (x, 1)])], [0.5, 0.5])
|
|
|
|
|
|
def getHorizontalSlotActions(y):
|
|
return ([RingAction.RingActionFunction(ringClerp, [(1, y), (-1, y)]), RingAction.RingActionFunction(ringClerp, [(-1, y), (1, y)])], [0.5, 0.5])
|
|
|
|
|
|
def getCircleRingActions():
|
|
|
|
def circlePos(t):
|
|
return (math.sin(t * 2.0 * math.pi), math.cos(t * 2.0 * math.pi))
|
|
|
|
return ([RingAction.RingActionFunction(circlePos, [])], [1.0])
|
|
|
|
|
|
def getVerticalInfinityRingActions():
|
|
|
|
def vertInfPos(t):
|
|
return (0.5 * math.sin(2.0 * t * 2.0 * math.pi), math.cos(t * 2.0 * math.pi))
|
|
|
|
return ([RingAction.RingActionFunction(vertInfPos, [])], [1.0])
|
|
|
|
|
|
def getHorizontalInfinityRingActions():
|
|
|
|
def horizInfPos(t):
|
|
return (math.sin(t * 2.0 * math.pi), 0.5 * math.sin(2.0 * t * 2.0 * math.pi))
|
|
|
|
return ([RingAction.RingActionFunction(horizInfPos, [])], [1.0])
|
|
|
|
|
|
RingOffset = 0.4
|
|
|
|
def getPlusUpRingActions():
|
|
return ([RingAction.RingActionFunction(ringClerp, [(0, RingOffset), (0, 1)]), RingAction.RingActionFunction(ringClerp, [(0, 1), (0, RingOffset)])], [0.5, 0.5])
|
|
|
|
|
|
def getPlusDownRingActions():
|
|
return ([RingAction.RingActionFunction(ringClerp, [(0, -RingOffset), (0, -1)]), RingAction.RingActionFunction(ringClerp, [(0, -1), (0, -RingOffset)])], [0.5, 0.5])
|
|
|
|
|
|
def getPlusRightRingActions():
|
|
return ([RingAction.RingActionFunction(ringClerp, [(RingOffset, 0), (1, 0)]), RingAction.RingActionFunction(ringClerp, [(1, 0), (RingOffset, 0)])], [0.5, 0.5])
|
|
|
|
|
|
def getPlusLeftRingActions():
|
|
return ([RingAction.RingActionFunction(ringClerp, [(-RingOffset, 0), (-1, 0)]), RingAction.RingActionFunction(ringClerp, [(-1, 0), (-RingOffset, 0)])], [0.5, 0.5])
|
|
|
|
|
|
def getHalfDomeRingActions():
|
|
|
|
def halfDome(t):
|
|
return (math.cos(t * math.pi), -math.sin(t * math.pi))
|
|
|
|
x1 = -1.0
|
|
x2 = -1.0 / 3.0
|
|
x3 = 1.0 / 3.0
|
|
x4 = 1.0
|
|
return ([RingAction.RingActionFunction(ringClerp, [(x1, 0), (x2, 0)]),
|
|
RingAction.RingActionFunction(ringClerp, [(x2, 0), (x3, 0)]),
|
|
RingAction.RingActionFunction(ringClerp, [(x3, 0), (x4, 0)]),
|
|
RingAction.RingActionFunction(halfDome, [])], [0.25,
|
|
0.25,
|
|
0.25,
|
|
0.25])
|