Кривая Безье
Участников: 3
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Кривая Безье
Решил выложить свои эксперименты по построению кривой Безье. Как пишут в книгах, кривая Безье - это система параметрических уравнений, которая позволяет по координатам четырех точек построить сглаженную кривую. Само уравнение можно найти в исходном коде, поэтому не буду приводить его еще раз.
В начале предлагается ввести координаты четырех точек, для построения кривой. Для дальнейшего изменения координат можно воспользоваться клавишами 1, 2, 3, 4. Каждая клавиша соответствует одноименной координате кривой Безье (1 -> x0.y0, 2 -> x1.y1, и т.д. ). При нажатии, например, клавиши с цифрой 2 координата x1 y1 примет значение координаты курсора мыши на экране.
- Код:
'************************************
'****** By: ShenZN ******************
'****** Program: Bezie **************
'************************************
'****** Key: numerals 1,2,3,4 *******
'****** and left mouse button *******
'************************************
screen 18
dim as single x0=0,x1=0,x2=0,x3=0,x=0
dim as single y0=0,y1=0,y2=0,y3=0,y=0
dim as single t=0
dim as integer x_m, y_m, but_m
input "x0 y0 -> ",x0,y0
input "x1 y1 -> ",x1,y1
input "x2 y2 -> ",x2,y2
input "x3 y3 -> ",x3,y3
do while (not(multikey(&h01)))
cls
if multikey(&h02) then
GetMouse(x_m,y_m,,but_m)
x0=x_m:y0=y_m
endif
if multikey(&h03) then
GetMouse(x_m,y_m,,but_m)
x1=x_m:y1=y_m
endif
if multikey(&h04) then
GetMouse(x_m,y_m,,but_m)
x2=x_m:y2=y_m
endif
if multikey(&h05) then
GetMouse(x_m,y_m,,but_m)
x3=x_m:y3=y_m
endif
for t=0.0 to 1.0 step 0.001
x= (1-t) * (1-t) * (1-t) *x0 + _
3*t * (1-t) * (1-t) * x1 + _
3*t * t * (1-t) *x2 + _
t*t * t * x3
y= (1-t) * (1-t) * (1-t) *y0 + _
3*t * (1-t) * (1-t) * y1 + _
3*t * t * (1-t) *y2 + _
t*t * t * y3
if t = 0.0 then PSET(x,y)
line -(x,y),RGB(155,56,78)
' sleep
next t
line (x0-2,y0-2)-(x0+2,y0+2),RGB(10,200,10),b
line (x1-2,y1-2)-(x1+2,y1+2),RGB(10,200,10),b
line (x2-2,y2-2)-(x2+2,y2+2),RGB(10,200,10),b
line (x3-2,y3-2)-(x3+2,y3+2),RGB(10,200,10),b
flip
sleep 1
loop
В начале предлагается ввести координаты четырех точек, для построения кривой. Для дальнейшего изменения координат можно воспользоваться клавишами 1, 2, 3, 4. Каждая клавиша соответствует одноименной координате кривой Безье (1 -> x0.y0, 2 -> x1.y1, и т.д. ). При нажатии, например, клавиши с цифрой 2 координата x1 y1 примет значение координаты курсора мыши на экране.
Re: Кривая Безье
А возможно строить сглаженную кривую так, что бы она проходила через точки? Если да, то как?
Gena- Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 30
Откуда : Москва
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|