Visto che non è propriamente una lezione sono indeciso se postare qui oppure fare un botta e risposta sulle altre sezioni. Accetto consigli a tal proposito.
Approfondimento qui: http://it.wikipedia.org/wiki/Curva_di_B%C3%A9zier
Dati alcuni punti saremo in grado di custruire delle curve di Bézier che si possono distinguere in :
- curve lineari: si, sono linee e questa è la formula
- curve quadratiche: sono dati 3 punti per tracciare una curva e questa è la formula
- curve cubiche: dati 4 punti per tracciare una curva e questa è la formula
- curve cubiche con più di 4 punti definiti
(invito Slascio a postare il codice delle ultime due anche qui)
Questo è il codice per richiamare lo script che useremo:
Codice: Seleziona tutto
//lineare
draw_bezier(0,x,y,mouse_x,mouse_y);
//quadratica
draw_bezier(1,x,y+250,x+200,y+150,mouse_x,mouse_y);
Per comodità ho inserito le coordinate del mouse come punti finali.
Questo che segue è lo script in cui all'interno viene usato un for per far disegnare tutti i punti della curva.
Il for in questione fa assumere alla variabile condizione un valore da 0 a 1 (come espresso nelle formule sopra) attraverso uno step di 0.001 (esprimerà la densità dei punti disegnati).
Per ogni valore della variabile condizione "i" vengono trovate le coordinate bx e by ovvero ogni punto della curva.
Codice: Seleziona tutto
{
//Disegna una curva di bezier
//Modalità
//0 lineare
//1 quadratica
//altri argomenti: punti p0x,p0y,p1x,p1y,p2x,p2y
var mode;
mode=argument0;
//LINEARE
if(mode==0){
for(i=0;i<=1;i+=0.001){
bx=(1-i)*argument1 + i*argument3;
by=(1-i)*argument2 + i*argument4;
draw_point_color(bx,by,c_black);
}
}
//QUADRATICA
if(mode==1){
for(i=0;i<=1;i+=0.001){
bx=power((1-i),2)*argument1 + 2*i*(1-i)*argument3+power(i,2)*argument5;
by=power((1-i),2)*argument2 + 2*i*(1-i)*argument4+power(i,2)*argument6;
draw_point_color(bx,by,c_black);
}
}
}
In un prossimo topic parleremo dell'antialiasing sulle linee disegnate.
(topic in aggiornamento)