Показать сообщение отдельно
Старый 08.09.2012, 17:11   #1506
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Пытаюсь по-быстрому напилить 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
Но оно даёт неточный результат.
Нет ли готовых решений?
(Offline)
 
Ответить с цитированием