Bézierova křivka (kubická)

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
Pelpet
Příspěvky: 734
Registrován: srpen 6, 2011, 12:03 am
Bydliště: Vsetín
Kontaktovat uživatele:

Bézierova křivka (kubická)

Příspěvek od Pelpet » srpen 8, 2011, 3:24 pm

Zdravím. Toto bych označil spíš jen za takovou ukázku - kdysi jsem na starém VCH postoval script na kvadratickou Bézierovku a od té doby mi vrtala hlavou ta kubická. Je složitější, ale má mnohlem více možností. Nemá jen jednu, ale 2 váhy a podle toho se křiví do dvou oblouků. Viz. http://cs.wikipedia.org/wiki/Bézierova_křivka Vím, že na tyto věci jsou dllka, ale ten script byl víceméně jen taková výzva, hec. (a taky kdybych ji někde chtěl použít třeba jen parkrát, na vykreslení 2,3 křivek, přikloním se k tomuto, ne k DLL. dll až kdybych vyráběl křivkovou spleť :D )

Kód: Vybrat vše

// bezier_curve_cubic(x1, y1, x2, y2, px1, py1, px2, py2, steps, width);
var _i, _pd1, _pq1, _pd2, _pq2, _pd3, _pq3, _pd4, _pq4, _pd5, _pq5, _pd6, _pq6, 
_px1, _py1, _px2, _py2, _px3, _py3, _px4, _py4, _px5, _py5, _px6, _py6, _lx, _ly;
_pd1 =  point_distance(argument0, argument1, argument4, argument5) / argument8;
_pq1 = point_direction(argument0, argument1, argument4, argument5);
_pd2 =  point_distance(argument4, argument5, argument6, argument7) / argument8;
_pq2 = point_direction(argument4, argument5, argument6, argument7);
_pd3 =  point_distance(argument6, argument7, argument2, argument3) / argument8;
_pq3 = point_direction(argument6, argument7, argument2, argument3);
_lx = argument0;
_ly = argument1;
for (_i = 0; _i <= argument8; _i += 1)
{
    _px1 = argument0 + lengthdir_x(_pd1 * _i, _pq1);
    _py1 = argument1 + lengthdir_y(_pd1 * _i, _pq1);
    _px2 = argument4 + lengthdir_x(_pd2 * _i, _pq2);
    _py2 = argument5 + lengthdir_y(_pd2 * _i, _pq2);
    _px3 = argument6 + lengthdir_x(_pd3 * _i, _pq3);
    _py3 = argument7 + lengthdir_y(_pd3 * _i, _pq3);
    /*
    draw_line(_px1, _py1, _px2, _py2);
    draw_line(_px2, _py2, _px3, _py3);
    */
    _pd4 =  point_distance(_px1, _py1, _px2, _py2) / argument8;
    _pq4 = point_direction(_px1, _py1, _px2, _py2);
    _pd5 =  point_distance(_px2, _py2, _px3, _py3) / argument8;
    _pq5 = point_direction(_px2, _py2, _px3, _py3);
    _px4 = _px1 + lengthdir_x(_pd4 * _i, _pq4);
    _py4 = _py1 + lengthdir_y(_pd4 * _i, _pq4);
    _px5 = _px2 + lengthdir_x(_pd5 * _i, _pq5);
    _py5 = _py2 + lengthdir_y(_pd5 * _i, _pq5);
    /*
    draw_line(_px4, _py4, _px5, _py5);
    */
    _pd6 =  point_distance(_px4, _py4, _px5, _py5) / argument8;
    _pq6 = point_direction(_px4, _py4, _px5, _py5);
    _px6 = _px4 + lengthdir_x(_pd6 * _i, _pq6);
    _py6 = _py4 + lengthdir_y(_pd6 * _i, _pq6);
    draw_line_width(_lx, _ly, _px6, _py6, argument9);
    _lx = _px6;
    _ly = _py6;
}
Jinak ty za/**/ované funkce draw_line vykreslí síť, přes kterou se to počítá. Pokud je od/**/kujete, vykreslí se to.

http://www.pelpet.ic.cz/team/files/GM_bezier_curves.gmk
(GMK obsahuje 2 scripty na Bézierovy křivky, stačí to zapnout, zeptá se to, kterou chcete načíst.)
Obrázek Sunken Bridge | Obrázek Moje GM tutoriály | Come on son, let's go outside play Catch the Exception!

Uživatelský avatar
Nichar
Redaktor
Příspěvky: 435
Registrován: srpen 6, 2011, 1:51 pm
Facebook: http://www.facebook.com/nikolas.charalambidis
Bydliště: Praha

Re: Bézierova křivka (kubická)

Příspěvek od Nichar » srpen 8, 2011, 5:32 pm

Tak tohle je parádní, jseš frajer.. :)
The Scarecrow - 2. místo v prestižní soutěži, online highscore!
Symphony of good and evil: Finding the end - Soutěžní kousek (3. místo)
NWinAPI 0.2.gex | nMath.dll | nBeep.dll - Moje DLL a GEX
Vektorová galerie - Začátek mých vektorů

Uživatelský avatar
Pelpet
Příspěvky: 734
Registrován: srpen 6, 2011, 12:03 am
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Bézierova křivka (kubická)

Příspěvek od Pelpet » srpen 8, 2011, 6:45 pm

eh? Dík fakt! Já čekal spíš reakce "dll je lepší" :D Opravdu díkes!
Naposledy upravil(a) Pelpet dne září 22, 2011, 9:03 pm, celkem upraveno 1 x.
Obrázek Sunken Bridge | Obrázek Moje GM tutoriály | Come on son, let's go outside play Catch the Exception!

Uživatelský avatar
Mikos
Příspěvky: 233
Registrován: srpen 6, 2011, 12:34 am

Re: Bézierova křivka (kubická)

Příspěvek od Mikos » srpen 8, 2011, 6:48 pm

Tak toto by som nespravil aj keby som chcel :D raz mi nieje pochuti robiť s tými krivkami a podobnými srandami. :D

Zato ťa uznávam xD :D

Uživatelský avatar
DDL Blue
Živý stín
Příspěvky: 431
Registrován: srpen 6, 2011, 7:21 pm

Re: Bézierova křivka (kubická)

Příspěvek od DDL Blue » srpen 8, 2011, 7:32 pm

Sem rád, když vidím na VCH někoho, kdo dokáže dát dohromady něco podobnýho :). Gw ;)
Zkoukněte moji hudební galerii ;). Nebo vyzkoušej můj generátor akordů!
Řikejte mi prostě Blue...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host