Кривая Безье

Предыдущая тема Следующая тема Перейти вниз

Кривая Безье

Сообщение  ShenZN в Чт Окт 09, 2008 8:20 pm

Решил выложить свои эксперименты по построению кривой Безье. Как пишут в книгах, кривая Безье - это система параметрических уравнений, которая позволяет по координатам четырех точек построить сглаженную кривую. Само уравнение можно найти в исходном коде, поэтому не буду приводить его еще раз.

Код:
'************************************
'****** 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 примет значение координаты курсора мыши на экране.

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

Посмотреть профиль http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Re: Кривая Безье

Сообщение  Gena в Сб Ноя 08, 2008 8:39 pm

А возможно строить сглаженную кривую так, что бы она проходила через точки? Если да, то как?

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Кривая Безье

Сообщение  tux в Сб Ноя 08, 2008 8:45 pm

пардон, а про че тогда тема
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Кривая Безье

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения