Пытаюсь по-быстрому напилить easing.
Набросал простую функцию:
Function curve_f#(t#,typ) ;Где t от 0 до 1
Select typ
Case 0 ;Linear
Return t
Case 1 ;In
Return 1-Cos(t*90)
Case 2 ;Out
Return Sin(t*90)
Case 3 ;Cubic
Return curve_f(t*2,1)*0.5
End Select
End Function
Но мне нужна более сложная вещь.
Я решил делать графики из четырёх точек, как-то так:
Type curve_q_t ;Quad-pointed curve
Field p.curve_q_t_p[4]
End Type
Type curve_q_t_p ;Point
Field x#,y#
Field typ ;см. curve_f
End Type
Function curve_q#(q.curve_q_t,t#)
For i = 1 To 3
If q\p[i]\x>=t Then
bc# = curve_f( (t-q\p[i-1]\x)/(q\p[i]\x-q\p[i-1]\x) , q\p[i-1]\typ) ;Извините за говнокод
Return q\p[i-1]\y+(q\p[i]\y-q\p[i-1]\y)*bc
End If
Next
End Function
Function curve_q_Create.curve_q_t(p1y#,p1t,p2x#,p2y#,p2t,p3x#,p3y#,p3t,p4y#,p4t )
q.curve_q_t = New curve_q_t
q\p[0] = New curve_q_t_p
q\p[0]\y = p1y
q\p[0]\typ = p1t
q\p[1] = New curve_q_t_p
q\p[1]\x = p2x
q\p[1]\y = p2y
q\p[1]\typ = p2t
q\p[2] = New curve_q_t_p
q\p[2]\x = p3x
q\p[2]\y = p3y
q\p[2]\typ = p3t
q\p[3] = New curve_q_t_p
q\p[3]\x = 1
q\p[3]\y = p4y
q\p[3]\typ = p4t
Return q
End Function
Но оно даёт неточный результат.
Нет ли готовых решений?