Пример построения кривых Безье по 4м точкам

Pixilang по русски
Post Reply
Several light
Posts: 67
Joined: Sun Jun 28, 2009 11:07 pm

Пример построения кривых Безье по 4м точкам

Post by Several light » Tue Jan 05, 2016 4:47 pm

Просто пример построения кривых Безье для 4х точек найденный где-то в интернете и адаптированный для Pixi:)

Code: Select all


//Узнаем размер рабочей области экрана
x0=get_xsize(get_screeen())/-2
y0=get_ysize(get_screeen())/-2

//Задаём координаты 4х опорных точек
dtx1=x0 dty1=-y0
dtx2=-x0 dty2=0
dtx3=x0 dty3=0
dtx4=-x0 dty4=y0

//В цикле от 0 до 1 с шагом 0.00001 отстраиваем точки кривой по её уравнениям
t=0 while(t<1) { 
	//Собственно уравнения кривой.
	x=(pow((1-t),3)*dtx1)+(3*pow((1-t),2)*t*dtx2)+(3*(1-t)*pow(t,2)*dtx3)+(pow(t,3)*dtx4)
	y=(pow((1-t),3)*dty1)+(3*pow((1-t),2)*t*dty2)+(3*(1-t)*pow(t,2)*dty3)+(pow(t,3)*dty4)
	//Рисуем точку.
	dot(x,y,WHITE)
	//Осуществляем приращение t
	t+0.00001
}
frame()

От величины шага зависит точность построения, т.е. количество точек которыми описывается кривая.
Если нужно построить кривую состоящую из малого количества точек (например чтобы выиграть в производительности), можно заменить рисование точки на рисование линии между текущей и предыдущей точкой.

К сожалению, я не нашел как описать кривую с большим количеством опорных точек, но есть примеры использующие 3 опорных точки (2 смысла использовать нет, там получиться прямая).
Вместо использования большого количества опорных точек, предлагается разделить кривую на фрагменты, где точка конца одного фрагмента будет совпадать по координатам с началом следующего.

Post Reply