b'\n_START_ARTICLE_\nB\xc3\xa9zierova krivulja\n_START_PARAGRAPH_\nB\xc3\xa9zierova krivulja [bezj\xc3\xaajeva kriv\xc3\xbalja] je v matemati\xc4\x8dnem podro\xc4\x8dju numeri\xc4\x8dne analize parametri\xc4\x8dna krivulja pomembna v ra\xc4\x8dunalni\xc5\xa1ki grafiki. Numeri\xc4\x8dno stabilna metoda za izra\xc4\x8dunavanje B\xc3\xa9zierovih krivulj je de Castaljaujev algoritem._NEWLINE_Posplo\xc5\xa1itve B\xc3\xa9zierovih krivulj na vi\xc5\xa1je razse\xc5\xbenosti se imenujejo B\xc3\xa9zierove povr\xc5\xa1ine. Tu je B\xc3\xa9zierov trikotnik poseben primer._NEWLINE_B\xc3\xa9zierove krivulje lahko nastanejo tudi pri razli\xc4\x8dnih splo\xc5\xa1nih oblikah strunske umetnosti, kjer se strune zavijejo okoli okvirja z \xc5\xbeeblji.\n_START_SECTION_\nZgodovina\n_START_PARAGRAPH_\nB\xc3\xa9zierove krivulje je leta 1962 raz\xc5\xa1iril francoski in\xc5\xbeenir Pierre Etienne B\xc3\xa9zier, ki jih je uporabil pri oblikovanju avtomobilskih teles. Krivulje je leta 1959 uvedel Paul de Casteljau s pomo\xc4\x8djo de Casteljaujevega algoritma.\n_START_SECTION_\nUporaba v ra\xc4\x8dunalni\xc5\xa1ki grafiki\n_START_PARAGRAPH_\nB\xc3\xa9zierove krivulje se na \xc5\xa1iroko uporabljajo v ra\xc4\x8dunalni\xc5\xa1ki grafiki za modeliranje gladkih krivulj. Ker krivuljo v celoti vsebuje konveksna ogrinja\xc4\x8da njenih nadzornih to\xc4\x8dk, se lahko to\xc4\x8dke grafi\xc4\x8dno prika\xc5\xbeejo in uporabijo za intuitivno urejanje krivulje. Pri krivulji se lahko uporabijo afine transformacije, kot so vzporedni premik, skaliranje in vrtenje in to kar s transformacijami nadzornih to\xc4\x8dk krivulje._NEWLINE_Najpomembnej\xc5\xa1e B\xc3\xa9zierove krivulje so kvadratne in kubne. Krivulje vi\xc5\xa1jih stopenj so ra\xc4\x8dunsko potratnej\xc5\xa1e in tudi ni analiti\xc4\x8dnih ena\xc4\x8db za izra\xc4\x8dun ni\xc4\x8del polinomov stopnje 5 ali ve\xc4\x8d. \xc4\x8ce so potrebne \xc5\xa1e zahtevnej\xc5\xa1e oblike, se skupaj zgladijo B\xc3\xa9zierove krivulje ni\xc5\xbejih stopenj, ki morajo zadovoljiti nekaterim pogojem gladkosti, v obliki B\xc3\xa9zierovih zlepkov.\n_START_SECTION_\nZgled ra\xc4\x8dunalni\xc5\xa1kega programa\n_START_PARAGRAPH_\nNaslednja koda je preprost prakti\xc4\x8dni primer, ki ka\xc5\xbee kako preprosto prakti\xc4\x8dno izrisati kubi\xc4\x8dno B\xc3\xa9zierovo krivuljo v C. Program preprosto izra\xc4\x8dunava koeficiente polinoma in spreminja vrednosti t od 0 do -1, kar je tudi v praksi tako, \xc4\x8deprav se pogosto omenjajo bolj\xc5\xa1i algoritmi kot je npr. de Casteljaujev. To je zaradi tega, ker je v praksi linearni algoritem, kot je ta, hitrej\xc5\xa1i in procesorsko manj potraten kot rekurzivni, kakor je de Casteljaujev. Program je raz\xc4\x8dlenjen, da je razvidnej\xc5\xa1i. V praksi bi se ga optimiralo tako, da bi izra\xc4\x8dunal koeficiente enkrat in bi jih ponovno uporabil v zanki, ki izra\xc4\x8dunava nadzorne to\xc4\x8dke. Tukaj se izra\xc4\x8dunavajo vsakokrat, kar je manj u\xc4\x8dinkovito, vendar pomaga pri bolj\xc5\xa1emu razumevanju kode in daje enak rezultat._NEWLINE_Dobljena krivulja se lahko izri\xc5\xa1e z risanjem premic med zaporednimi to\xc4\x8dkami krivulje. Ve\xc4\x8d to\xc4\x8dk se nari\xc5\xa1e, bolj gladka je krivulja._NEWLINE__NEWLINE_ /***_NEWLINE_  * Program za tvorjenje kubi\xc4\x8dne B\xc3\xa9zierove krivulje_NEWLINE_  *   _NEWLINE_  ***/_NEWLINE_ _NEWLINE_  typedef struct_NEWLINE_  {_NEWLINE_ float x;_NEWLINE_ float y;_NEWLINE_  }_NEWLINE_  Point2D;_NEWLINE_ _NEWLINE_ /***_NEWLINE_  * cp je polje s \xc5\xa1tirimi elementi, kjer so:_NEWLINE_  * cp[0] za\xc4\x8detna to\xc4\x8dka, oziroma A v zgornji risbi_NEWLINE_  * cp[1] prva nadzorna to\xc4\x8dka, oziroma B_NEWLINE_  * cp[2] druga nadzorna to\xc4\x8dka, oziroma C_NEWLINE_  * cp[3] kon\xc4\x8dna to\xc4\x8dka, oziroma D_NEWLINE_  * t je vrednost parametra, 0 <= t <= 1_NEWLINE_  ***/_NEWLINE_ _NEWLINE_  Point2D PointOnCubicB\xc3\xa9zier( Point2D* cp, float t )_NEWLINE_  {_NEWLINE_ float   ax, bx, cx;_NEWLINE_ float   ay, by, cy;_NEWLINE_ float   tSquared, tCubed;_NEWLINE_ Point2D result;_NEWLINE_ _NEWLINE_ /* izra\xc4\x8dun koeficientov polinoma */_NEWLINE_ _NEWLINE_ cx = 3.0 * (cp[1].x - cp[0].x);_NEWLINE_ bx = 3.0 * (cp[2].x - cp[1].x) - cx;_NEWLINE_ ax = cp[3].x - cp[0].x - cx - bx;_NEWLINE_ _NEWLINE_ cy = 3.0 * (cp[1].y - cp[0].y);_NEWLINE_ by = 3.0 * (cp[2].y - cp[1].y) - cy;_NEWLINE_ ay = cp[3].y - cp[0].y - cy - by;_NEWLINE_ _NEWLINE_ /* izra\xc4\x8dun to\xc4\x8dke krivulje pri vrednosti parametra t */_NEWLINE_ _NEWLINE_ tSquared = t * t;_NEWLINE_ tCubed = tSquared * t;_NEWLINE_ _NEWLINE_ result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;_NEWLINE_ result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;_NEWLINE_ _NEWLINE_ return result;_NEWLINE_  }_NEWLINE_ _NEWLINE_ /***_NEWLINE_  * ComputeB\xc3\xa9zier napolne polje strukture Point2D s to\xc4\x8dkami krivulje,_NEWLINE_  * ki se izra\xc4\x8dunajo iz nadzorne to\xc4\x8dke cp. Za rezultat se mora dodeliti dovolj_NEWLINE_  * pomnilnika - <sizeof(Point2D) * numberOfPoints>_NEWLINE_  ***/_NEWLINE_ _NEWLINE_  voidComputeB\xc3\xa9zier( Point2D* cp, int numberOfPoints, Point2D* curve )_NEWLINE_  {_NEWLINE_ float   t, dt;_NEWLINE_ int  i;_NEWLINE_ _NEWLINE_ dt = 1.0 / ( numberOfPoints - 1 );_NEWLINE_ _NEWLINE_ for( i = 0, t = 0; i < numberOfPoints; i++, t += dt)_NEWLINE_ curve[i] = PointOnCubicB\xc3\xa9zier( cp, t );_NEWLINE_  }'