<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.linux360.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cbidea</id>
		<title>linux360 - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linux360.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cbidea"/>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php/Special:Contributions/Cbidea"/>
		<updated>2026-04-19T11:43:51Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3425</id>
		<title>GStreamer Tips</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3425"/>
				<updated>2007-03-19T23:28:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Streaming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;br /&gt;
&lt;br /&gt;
Până acum n-am reuşit decât să fac stream la video şi asta din cauză că apar câteva probleme de sincronizare care nu sunt sigur că pot fi rezolvate direct din gst-launch.&lt;br /&gt;
&lt;br /&gt;
Sender&amp;lt;code&amp;gt;gst-launch -v filesrc location=test.mpg ! dvddemux ! mpeg2dec ! ffenc_h263p ! video/x-h263 ! rtph263ppay pt=96 ! udpsink host=10.3.2.115 port=5000 sync=true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receiver&amp;lt;code&amp;gt;gst-launch udpsrc port=5000 ! application/x-rtp,clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 ! xvimagesink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dacă o să vă uitaţi cu gst-inspect la elemente, o să vă daţi seama de ceea ce fac cele două pipeline-uri. Cel ce trimite ia un fişier video în format MPEG, îl decodează, îl codează apoi în H.263, îl [http://www.faqs.org/rfcs/rfc2190.html împachetează] în [http://www.faqs.org/rfcs/rfc1889.html RTP] şi-l trimite prin UDP unui ascultător.&lt;br /&gt;
&lt;br /&gt;
Ascultătorul preia ceea ce primeşte (aşteaptă H.263), despachetează şi îl afişează.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3424</id>
		<title>GStreamer Tips</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3424"/>
				<updated>2007-03-19T23:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;br /&gt;
&lt;br /&gt;
Până acum n-am reuşit decât să fac stream la video şi asta din cauză că apar câteva probleme de sincronizare care nu sunt sigur că pot fi rezolvate direct din gst-launch.&lt;br /&gt;
&lt;br /&gt;
Sender&amp;lt;code&amp;gt;gst-launch -v filesrc location=test.mpg ! dvddemux ! mpeg2dec !&lt;br /&gt;
ffenc_h263p ! video/x-h263 ! rtph263ppay pt=96 ! udpsink host=10.3.2.115&lt;br /&gt;
port=5000 sync=true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receiver&amp;lt;code&amp;gt;gst-launch udpsrc port=5000 !&lt;br /&gt;
application/x-rtp,clock-rate=90000,payload=96 ! rtph263pdepay&lt;br /&gt;
queue-delay=0 ! ffdec_h263 ! xvimagesink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dacă o să vă uitaţi cu gst-inspect la elemente, o să vă daţi seama de ceea ce fac cele două pipeline-uri. Cel ce trimite ia un fişier video în format MPEG, îl decodează, îl codează apoi în H.263, îl [http://www.faqs.org/rfcs/rfc2190.html împachetează] în [http://www.faqs.org/rfcs/rfc1889.html RTP] şi-l trimite prin UDP unui ascultător.&lt;br /&gt;
&lt;br /&gt;
Ascultătorul preia ceea ce primeşte (aşteaptă H.263), despachetează şi îl afişează.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3423</id>
		<title>GStreamer Tips</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3423"/>
				<updated>2007-03-19T23:26:41Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;br /&gt;
&lt;br /&gt;
Până acum n-am reuşit decât să fac stream la video şi asta din cauză că apar câteva probleme de sincronizare care nu sunt sigur că pot fi rezolvate direct din gst-launch.&lt;br /&gt;
&lt;br /&gt;
Sender&amp;lt;code&amp;gt;gst-launch -v filesrc location=test.mpg ! dvddemux ! mpeg2dec !&lt;br /&gt;
ffenc_h263p ! video/x-h263 ! rtph263ppay pt=96 ! udpsink host=10.3.2.115&lt;br /&gt;
port=5000 sync=true&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receiver&amp;lt;code&amp;gt;gst-launch udpsrc port=5000 !&lt;br /&gt;
application/x-rtp,clock-rate=90000,payload=96 ! rtph263pdepay&lt;br /&gt;
queue-delay=0 ! ffdec_h263 ! xvimagesink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dacă o să vă uitaţi cu gst-inspect la elemente, o să vă daţi seama de ceea ce fac cele două pipeline-uri. Cel ce trimite ia un fişier video în format MPEG, îl decodează, îl codează apoi în H.263, îl [http://www.faqs.org/rfcs/rfc2190.html împachetează] în [http://www.faqs.org/rfcs/rfc1889.html RTP] şi-l trimite prin UDP unui ascultător.&lt;br /&gt;
&lt;br /&gt;
Ascultătorul preia ceea ce primeşte (aşteaptă H.263), despachetează şi îl afişează.&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3422</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3422"/>
				<updated>2007-03-19T23:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3421</id>
		<title>GStreamer Tips</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips&amp;diff=3421"/>
				<updated>2007-03-19T23:17:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3419</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3419"/>
				<updated>2007-03-19T23:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: User talk:Cbidea/GStreamer moved to GStreamer Tips &amp;amp; Tricks: Acum ofera ceva informatii. Pana il definitivez sa mai fie citit si de altcineva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User_talk:Cbidea/GStreamer&amp;diff=3420</id>
		<title>User talk:Cbidea/GStreamer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User_talk:Cbidea/GStreamer&amp;diff=3420"/>
				<updated>2007-03-19T23:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: User talk:Cbidea/GStreamer moved to GStreamer Tips &amp;amp; Tricks: Acum ofera ceva informatii. Pana il definitivez sa mai fie citit si de altcineva&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[GStreamer Tips &amp;amp; Tricks]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3409</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3409"/>
				<updated>2007-03-09T22:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Video */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
&lt;br /&gt;
Se ştie că GStreamer e folosit de mai multe playere multimedia printre care binecunoscutul Totem, acesta descurcându-se cu formatele video la fel de bine. De ce avem nevoie ca să redăm un fişier video? Păi la început de foarte puţin. &lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch -v -m filesrc location=film.avi ! decodebin name=pipe1 pipe1. ! xvimagesink pipe1. ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3408</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3408"/>
				<updated>2007-03-09T22:50:08Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Audio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi. Folosind proprietăţile encoder-ului se pot obţine fişiere mai mici sau calitativ mai bune, în funcţie de setări.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3407</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3407"/>
				<updated>2007-03-09T22:47:48Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
[[Image:GSTREAMER.png]]&lt;br /&gt;
&lt;br /&gt;
Prin folosirea gst-launch spunem doar că legăm două elemente. GStreamer găseşte mai întâi pad-urile fiecărui element şi încearcă să le lege. Unele combinaţii nu vor reuşi (ex. când încearcă să lege o sursă cu o sursă) şi le va elimina. Face acest lucru până găseşte o legătură posibilă între pad-urile celor două elemente. Dacă nu este posibil va semnala eroarea şi se va opri.&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi, folosind proprietăţile encoder-ului.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:GSTREAMER.png&amp;diff=3406</id>
		<title>File:GSTREAMER.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:GSTREAMER.png&amp;diff=3406"/>
				<updated>2007-03-09T22:43:52Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Pipe GStreamer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pipe GStreamer&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3405</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3405"/>
				<updated>2007-03-09T20:30:26Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
===Introducere===&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
POZA FRUMOASĂ AICI CARE ARATĂ PIPELINE-UL CA SĂ SE ÎNŢELEAGĂ CONCEPTUL DE PAD&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;br /&gt;
&lt;br /&gt;
Şi dacă avem decodere trebuie să avem şi encodere. Encoderele au sufixul enc de obicei. Consecinţa imediată a acestui lucru este că putem uşor converti un format în celălalt.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! vorbisenc ! oggmux ! filesink location=fisier.ogg&amp;lt;/code&amp;gt;&lt;br /&gt;
Folosind pipe-ul de mai sus convertim un fişier mp3 într-unul vorbis. Acest lucru putem să-l facem cu wav, cu flacc, cu speex, etc. Orice combinaţie de formate pentru care GStreamer are plugin-uri.&lt;br /&gt;
&lt;br /&gt;
Desigur că fiecare element în parte poate fi setat după nevoi, folosind proprietăţile encoder-ului.&lt;br /&gt;
&lt;br /&gt;
===Video===&lt;br /&gt;
===Streaming===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3404</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3404"/>
				<updated>2007-03-09T07:41:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* GStreamer Tips &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
POZA FRUMOASĂ AICI CARE ARATĂ PIPELINE-UL CA SĂ SE ÎNŢELEAGĂ CONCEPTUL DE PAD&lt;br /&gt;
&lt;br /&gt;
Până acum ne-am jucat numai cu fişiere mp3 dar asta nu înseamnă că doar atât putem face. Aceiaşi metodă merge şi pentru alte formate cum ar fi vorbis.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.ogg ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De obicei dacă nu ştim cu ce să redăm un anumit format, folosim decodebin şi lansăm gst-launch cu opţiunile „-v -m” şi ne uităm la output să vedem ce găseşte GStreamer automat şi putem încerca şi noi să construim pipeline-ul folosind aceleaşi elemente.&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3403</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3403"/>
				<updated>2007-03-09T07:21:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folosind metoda de până acum, se poate reda orice melodie în orice format cunoscut de GStreamer. Dar metoda nu prezintă prea mare interes. Nu ne-am murdărit mâinile până acum. Pipe-ul este construit automat de elementul special decodebin. &lt;br /&gt;
&lt;br /&gt;
Să vedem de ce avem nevoie. Cu filesrc putem citi un fişier. După trebuie să-l despachetăm ca să ajungem la miere (datele conţinute de acesta). GStreamer numeşte elementul care execute această operaţie, demuxer. Aceste elemente poartă de obicei sufixul &amp;quot;demux&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep demux | grep mp3&lt;br /&gt;
ffmpeg:  ffdemux_mp3: FFMPEG MPEG audio demuxer&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eu am instalat elementul ffdemux_mp3 dar pot fi şi altele. Există elemente care execută două lucruri: despachetarea şi decodarea. Noi o sa facem decodarea folosind alt element. Elementele de decodare poartă, de obicei, sufixul &amp;quot;dec&amp;quot;.&lt;br /&gt;
&amp;lt;code&amp;gt;phaser@diesel:~$ gst-inspect | grep dec | grep mp3&lt;br /&gt;
mad:  mad: mad mp3 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3on4: FFMPEG MP3ON4 decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3adu: FFMPEG ADU-formatted MPEG-1 layer 3 audio decoder&lt;br /&gt;
ffmpeg:  ffdec_mp3: FFMPEG MPEG-1 layer 3 audio decoder&lt;br /&gt;
flump3dec:  flump3dec: Fluendo MP3 Decoder&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am găsit elementul ffdec_mp3 pentru decodarea mp3. Şi elementul mad ştie să decodeze şi este unul din elementele cu dublu scop de care am vorbit anterior (demux+decoder). Acum putem să ne construim pipe-ul.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! ffdemux_mp3 ! ffdec_mp3 ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! mad ! audioconvert ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aşa cum se observă putem face acelaşi lucru în mai multe feluri pentru că putem avea mai multe plugin-uri care fac acelaşi lucru. Elementul de noutate este audioconvert. Din ceea ce ne spune gst-inspect aflăm că audioconvert ştie să facă conversia între mai multe formate. Elementul poate executa acest lucru pentru că GStreamer are un mecanism prin care poate afla în mod dinamic capabilităţile pad-urilor sursă şi pad-urilor destinaţie din fiecare element.&lt;br /&gt;
&lt;br /&gt;
POZA FRUMOASĂ AICI CARE ARATĂ PIPELINE-UL CA SĂ SE ÎNŢELEAGĂ CONCEPTUL DE PAD&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3402</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3402"/>
				<updated>2007-03-08T03:25:51Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* GStreamer Tips &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;br /&gt;
&lt;br /&gt;
GStreamer defineşte următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
- element - obiectul de bază&lt;br /&gt;
- bin - container pentru obiecte&lt;br /&gt;
- pipeline - un bin specializat&lt;br /&gt;
- pad - poate fi privit ca un port (sursa/destinatie in functie de cum sunt legate)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În principiu mai multe elemente sunt plasate pe un pipe şi apoi pad-urile acestora sunt legate astfel încât, când un stream va traversa acel pipe, acesta va fi modificat în funcţie de natura elementelor pe care le traverseaza. De exemplu un element poate să crească volumul, un altul poate să codeze un stream într-un anumit format, să citească dintr-un fişier, să trimită stream-ul la placa de sunet, etc.&lt;br /&gt;
&lt;br /&gt;
Pentru a vedea toate elementele instalate in sistem putem folos utilitarul gst-inspect.&lt;br /&gt;
&lt;br /&gt;
Însă utilitarul pe care-l vom folosi este gst-launch. Acesta ştie să construiască un pipe şi să o pună în starea de play. Este un tool făcut în principiu pentru depanarea elementelor în momentul în care scrii aplicaţii GStreamer dar se poate dovedi foarte util în foarte multe cazuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gst-launch filesrc location=fisier.mp3 ! decodebin ! autoaudiosink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am folosit utilitarul gst-launch pentru a construi un pipe cu trei elemente. Primul element deschide un fişier si trimite totul mai departe la decodebin. Decodebin este un element foarte important. Acesta ştie să construiască în mod dinamic un pipe care să ştie să citească ceea ce primeşte de la sursă (de la filesrc) şi ştie să trimită la destinaţie (autoaudiosink) într-un format acceptat de destinaţie. În mod normal nu ne interesează ce se foloseşte dar unde ar mai fi distracţia dacă nu încercăm să construim singuri pipe-ul folosind mai multe codec-uri care fac acelaşi lucru.&lt;br /&gt;
&lt;br /&gt;
În final autoaudiosink reprezintă adaptorul de sunet (driverul în principiu). GStreamer ştie să trimită mai departe la driver-ul implicit din sistem care poate fi alsa, oss sau un server de sunet cum ar fi esd.&lt;br /&gt;
&lt;br /&gt;
Este bine de amintit aici că există elemente speciale numite elemente sursă (source elements) şi elemente destinaţie (sink elements) care nu pot fi puse decât ca primele sau ultimele elemente într-un pipe. Am văzut deja câte un element din fiecare categorie: filesrc (elemente sursă) şi audiosink (elemente destinaţie). De obicei acestea poartă sufix-ul sink sau respectiv src.&lt;br /&gt;
&lt;br /&gt;
Ca să vedeţi ce astfel de elemente ştie să folosească GStreamer puteţi folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect | grep sink&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Orice element poate avea proprietăţi şi semnale. Cu semnalele nu vom avea tangenţă prea mult. Am văzut deja o proprietate a elementului filesrc, numită location. Acestea pot fi setate folosind grupuri de forma (nume proprietate)=(valoare) despărţite între ele prin virgule.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla detalii despre un element şi proprietăţile acestuia putem folosi gst-inspect.&lt;br /&gt;
&amp;lt;code&amp;gt;gst-inspect &amp;lt;nume-element&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3401</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3401"/>
				<updated>2007-03-08T02:08:16Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* GStreamer Tips &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [http://www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3400</id>
		<title>GStreamer Tips &amp; Tricks</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=GStreamer_Tips_%26_Tricks&amp;diff=3400"/>
				<updated>2007-03-08T02:07:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: GStreamer FUN :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GStreamer Tips &amp;amp; Tricks==&lt;br /&gt;
&lt;br /&gt;
[http://gstreamer.freedesktop.org/ GStreamer] este o librărie multimedia open-source construită folosind celebra [www.gtk.org/ GLib] şi are un API care se ghidează după multe dintre principiile librăriei GTK+.&lt;br /&gt;
Nu o să vorbesc despre cum să programaţi cu GStreamer, ci voi prezenta aici modalităţi inedite de a face lucruri de zi cu zi cum ar fi convertirea fişierelor audio dintr-un format în altul, redarea lor, redarea fişierelor video, redarea fişierelor video prin reţea, etc.&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3385</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3385"/>
				<updated>2007-02-04T13:06:41Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
Desenarea unei curbe Bézier nu este o sarcină trivială şi asta nu din cauza calculelor, pe care le-am lămurit până la acest moment ci din cauza afişării curbei astfel încât să aibe un aspect foarte lin.&lt;br /&gt;
&lt;br /&gt;
Algoritmul cel mai simplu de desenare este următorul (pentru curba cubica).&lt;br /&gt;
&lt;br /&gt;
Date de intrare: P1, P2, P3, P4 (P2, P3 - puncte de control)&lt;br /&gt;
B03, B13, B23, B33 sunt functii care intorc valorile polinoamelor Bernstein de ordin 3 si indice k (k = 0..3).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. PP &amp;lt;- P1    ;initializam punctul anterior (Previous Point) cu P1&lt;br /&gt;
2. IS &amp;lt;- .01   ;setam pasul de incrementare&lt;br /&gt;
3. pentru t = IS; t &amp;lt; 1; t &amp;lt;- t + IS executa&lt;br /&gt;
4.        CP.x = P1.x * B03(t) + P2.x * B13(t) + P3.x * B23(t) + P4.x * B33(t);&lt;br /&gt;
5.        CP.y = P1.y * B03(t) + P2.y * B13(t) + P3.y * B23(t) + P4.y * B33(t);&lt;br /&gt;
6.        drawLine(PP.x, PP.y, CP.x, CP.y);&lt;br /&gt;
7.        PP = CP;&lt;br /&gt;
8. end pentru&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
În continuare codul scris în Java pentru pseudocodul anterior. &lt;br /&gt;
&lt;br /&gt;
'''QuadraticBezier.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
&lt;br /&gt;
public class QuadraticBezier extends JPanel {&lt;br /&gt;
	private static final long serialVersionUID = -6991920282065229392L;&lt;br /&gt;
	&lt;br /&gt;
	public void paint(Graphics g) {&lt;br /&gt;
		Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;
		super.paint(g2);&lt;br /&gt;
		&lt;br /&gt;
		drawCubicBezier(g2, new Point2D.Float(100,100), &lt;br /&gt;
				            new Point2D.Float(130,150),&lt;br /&gt;
				            new Point2D.Float(150,200),&lt;br /&gt;
				            new Point2D.Float(200,130));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Aceasta functie deseneaza o curba Bezier cubica.&lt;br /&gt;
	 * @param g2 Graphics2D&lt;br /&gt;
	 * @param p1 BezPoint 1&lt;br /&gt;
	 * @param p2 Control Point 1&lt;br /&gt;
	 * @param p3 Control Point 2&lt;br /&gt;
	 * @param p4 BezPoint 2&lt;br /&gt;
	 */&lt;br /&gt;
	public void drawCubicBezier(Graphics2D g2, &lt;br /&gt;
							    Point2D.Float p1, &lt;br /&gt;
							    Point2D.Float p2, &lt;br /&gt;
							    Point2D.Float p3, &lt;br /&gt;
							    Point2D.Float p4) {&lt;br /&gt;
		float is = 0.01f; //pasul de incrementare&lt;br /&gt;
		Point2D.Float prevPoint = p1; //Punctul calculat anterior&lt;br /&gt;
		Point2D.Float curPoint = new Point2D.Float(0,0); //Punctul curent&lt;br /&gt;
		&lt;br /&gt;
		for (float t = is; t &amp;lt;= 1; t += is) {&lt;br /&gt;
			curPoint.x = B03(t)*p1.x + B13(t)*p2.x + B23(t)*p3.x + B33(t)*p4.x;&lt;br /&gt;
			curPoint.y = B03(t)*p1.y + B13(t)*p2.y + B23(t)*p3.y + B33(t)*p4.y;&lt;br /&gt;
			System.out.println(prevPoint.distance(curPoint));&lt;br /&gt;
			if (prevPoint.distance(curPoint) &amp;gt; 5) {&lt;br /&gt;
				g2.drawLine((int)prevPoint.x, (int)prevPoint.y, (int)curPoint.x, (int)curPoint.y);&lt;br /&gt;
				prevPoint.x = curPoint.x;&lt;br /&gt;
				prevPoint.y = curPoint.y;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	private float B03(float t) {&lt;br /&gt;
		return (float) Math.pow(1-t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B13(float t) {&lt;br /&gt;
		return (float) (3*t*Math.pow(1-t, 2));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B23(float t) {&lt;br /&gt;
		return (3*t*t*(1-t));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B33(float t) {&lt;br /&gt;
		return (float) Math.pow(t,3);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MainFormDesign.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java /&amp;gt;import javax.swing.JFrame;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public abstract class MainFormDesign extends JFrame {&lt;br /&gt;
	private QuadraticBezier quadraticBezier = null;&lt;br /&gt;
	&lt;br /&gt;
	public MainFormDesign() {&lt;br /&gt;
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
		setTitle(&amp;quot;Test Bezier&amp;quot;);&lt;br /&gt;
		setSize(400, 400);&lt;br /&gt;
		&lt;br /&gt;
		setContentPane(getQuadraticBezier());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private QuadraticBezier getQuadraticBezier() {&lt;br /&gt;
		if (null == quadraticBezier) {&lt;br /&gt;
			quadraticBezier = new QuadraticBezier();&lt;br /&gt;
		}&lt;br /&gt;
		return quadraticBezier;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MainForm.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java /&amp;gt;import javax.swing.SwingUtilities;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MainForm extends MainFormDesign {&lt;br /&gt;
	private static final long serialVersionUID = 1L;&lt;br /&gt;
	&lt;br /&gt;
	public MainForm() {&lt;br /&gt;
		super();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
			public void run() {&lt;br /&gt;
				MainForm mf = new MainForm();&lt;br /&gt;
				mf.setVisible(true);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Javatestbez.png]] Se poate vedea în imaginea alăturată aspectul urât al curbei. Devine foarte clar că nu aceasta este calea de urmat pentru a desena o curbă Bézier.&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a patru puncte folosind o curbă Bézier de ordinul trei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Ecuatiile sunt rezolvate in Maxima 0.7.0a folosind urmatoarele &lt;br /&gt;
	 * eqn: x4  = x0*f1(t4) + x1*f2(t4) + x2*f3(t4) + x3*f4(t4); &lt;br /&gt;
	 * eqn1: x5 = x0*f1(t5) + x1*f2(t5) + x2*f3(t5) + x3*f4(t5); &lt;br /&gt;
	 * algsys([eqn, eqn1], [x1, x2]);&lt;br /&gt;
	 * &lt;br /&gt;
	 * Functiile f1, f2, f3 si f4 sunt polinoamele Bernstein de ordinul 3.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param x0&lt;br /&gt;
	 * @param x4&lt;br /&gt;
	 * @param x5&lt;br /&gt;
	 * @param x3&lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getBezierInterpPoints(Point2D.Float x0, Point2D.Float x4, Point2D.Float x5, Point2D.Float x3) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[4];&lt;br /&gt;
		result[0] = new Point2D.Float();&lt;br /&gt;
		result[0].x = x0.x;&lt;br /&gt;
		result[0].y = x0.y;&lt;br /&gt;
		result[3] = new Point2D.Float();&lt;br /&gt;
		result[3].x = x3.x;&lt;br /&gt;
		result[3].y = x3.y;&lt;br /&gt;
		&lt;br /&gt;
		float t4 = (float) (x0.distance(x4) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		float t5 = (float) ((x0.distance(x4) + x4.distance(x5)) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		result[2] = new Point2D.Float();&lt;br /&gt;
		result[1].x = ((float) (-(f3(t4) * x5.x - f3(t5) * x4.x + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.x + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].x = ((float) ((f2(t4) * x5.x - f2(t5) * x4.x + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.x + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[1].y = ((float) (-(f3(t4) * x5.y - f3(t5) * x4.y + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.y + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].y = ((float) ((f2(t4) * x5.y - f2(t5) * x4.y + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.y + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f1(double t) {&lt;br /&gt;
		return Math.pow((1 - t), 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f2(double t) {&lt;br /&gt;
		return 3 * t * Math.pow(1 - t, 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f3(double t) {&lt;br /&gt;
		return 3 * Math.pow(t, 2) * (1 - t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 3 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f4(double t) {&lt;br /&gt;
		return Math.pow(t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(0,0);&lt;br /&gt;
		Point2D.Float Pc1 = new Point2D.Float(50,50);&lt;br /&gt;
		Point2D.Float Pc2 = new Point2D.Float(100,60);&lt;br /&gt;
		Point2D.Float P4 = new Point2D.Float(100,0);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float[] bezCoords = getBezierInterpPoints(P1, Pc1, Pc2, P4);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier cubica este data de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezCoords[0]);&lt;br /&gt;
		System.out.println(bezCoords[1]);&lt;br /&gt;
		System.out.println(bezCoords[2]);&lt;br /&gt;
		System.out.println(bezCoords[3]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:Javatestbez.png&amp;diff=3384</id>
		<title>File:Javatestbez.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:Javatestbez.png&amp;diff=3384"/>
				<updated>2007-02-04T13:03:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: O curbă Bezier desenată folosind un algoritm trivial.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă Bezier desenată folosind un algoritm trivial.&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3383</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3383"/>
				<updated>2007-02-04T12:57:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Început desenare&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
Desenarea unei curbe Bézier nu este o sarcină trivială şi asta nu din cauza calculelor, pe care le-am lămurit până la acest moment ci din cauza afişării curbei astfel încât să aibe un aspect foarte lin.&lt;br /&gt;
&lt;br /&gt;
Algoritmul cel mai simplu de desenare este următorul (pentru curba cubica).&lt;br /&gt;
&lt;br /&gt;
Date de intrare: P1, P2, P3, P4 (P2, P3 - puncte de control)&lt;br /&gt;
B03, B13, B23, B33 sunt functii care intorc valorile polinoamelor Bernstein de ordin 3 si indice k (k = 0..3).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. PP &amp;lt;- P1    ;initializam punctul anterior (Previous Point) cu P1&lt;br /&gt;
2. IS &amp;lt;- .01   ;setam pasul de incrementare&lt;br /&gt;
3. pentru t = IS; t &amp;lt; 1; t &amp;lt;- t + IS executa&lt;br /&gt;
4.        CP.x = P1.x * B03(t) + P2.x * B13(t) + P3.x * B23(t) + P4.x * B33(t);&lt;br /&gt;
5.        CP.y = P1.y * B03(t) + P2.y * B13(t) + P3.y * B23(t) + P4.y * B33(t);&lt;br /&gt;
6.        drawLine(PP.x, PP.y, CP.x, CP.y);&lt;br /&gt;
7.        PP = CP;&lt;br /&gt;
8. end pentru&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
În continuare codul scris în Java pentru pseudocodul anterior. &lt;br /&gt;
&lt;br /&gt;
'''QuadraticBezier.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
&lt;br /&gt;
public class QuadraticBezier extends JPanel {&lt;br /&gt;
	private static final long serialVersionUID = -6991920282065229392L;&lt;br /&gt;
	&lt;br /&gt;
	public void paint(Graphics g) {&lt;br /&gt;
		Graphics2D g2 = (Graphics2D)g;&lt;br /&gt;
		super.paint(g2);&lt;br /&gt;
		&lt;br /&gt;
		drawCubicBezier(g2, new Point2D.Float(100,100), &lt;br /&gt;
				            new Point2D.Float(130,150),&lt;br /&gt;
				            new Point2D.Float(150,200),&lt;br /&gt;
				            new Point2D.Float(200,130));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Aceasta functie deseneaza o curba Bezier cubica.&lt;br /&gt;
	 * @param g2 Graphics2D&lt;br /&gt;
	 * @param p1 BezPoint 1&lt;br /&gt;
	 * @param p2 Control Point 1&lt;br /&gt;
	 * @param p3 Control Point 2&lt;br /&gt;
	 * @param p4 BezPoint 2&lt;br /&gt;
	 */&lt;br /&gt;
	public void drawCubicBezier(Graphics2D g2, &lt;br /&gt;
							    Point2D.Float p1, &lt;br /&gt;
							    Point2D.Float p2, &lt;br /&gt;
							    Point2D.Float p3, &lt;br /&gt;
							    Point2D.Float p4) {&lt;br /&gt;
		float is = 0.01f; //pasul de incrementare&lt;br /&gt;
		Point2D.Float prevPoint = p1; //Punctul calculat anterior&lt;br /&gt;
		Point2D.Float curPoint = new Point2D.Float(0,0); //Punctul curent&lt;br /&gt;
		&lt;br /&gt;
		for (float t = is; t &amp;lt;= 1; t += is) {&lt;br /&gt;
			curPoint.x = B03(t)*p1.x + B13(t)*p2.x + B23(t)*p3.x + B33(t)*p4.x;&lt;br /&gt;
			curPoint.y = B03(t)*p1.y + B13(t)*p2.y + B23(t)*p3.y + B33(t)*p4.y;&lt;br /&gt;
			System.out.println(prevPoint.distance(curPoint));&lt;br /&gt;
			if (prevPoint.distance(curPoint) &amp;gt; 5) {&lt;br /&gt;
				g2.drawLine((int)prevPoint.x, (int)prevPoint.y, (int)curPoint.x, (int)curPoint.y);&lt;br /&gt;
				prevPoint.x = curPoint.x;&lt;br /&gt;
				prevPoint.y = curPoint.y;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	private float B03(float t) {&lt;br /&gt;
		return (float) Math.pow(1-t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B13(float t) {&lt;br /&gt;
		return (float) (3*t*Math.pow(1-t, 2));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B23(float t) {&lt;br /&gt;
		return (3*t*t*(1-t));&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private float B33(float t) {&lt;br /&gt;
		return (float) Math.pow(t,3);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MainFormDesign.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java /&amp;gt;import javax.swing.JFrame;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public abstract class MainFormDesign extends JFrame {&lt;br /&gt;
	private QuadraticBezier quadraticBezier = null;&lt;br /&gt;
	&lt;br /&gt;
	public MainFormDesign() {&lt;br /&gt;
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
		setTitle(&amp;quot;Test Bezier&amp;quot;);&lt;br /&gt;
		setSize(400, 400);&lt;br /&gt;
		&lt;br /&gt;
		setContentPane(getQuadraticBezier());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	private QuadraticBezier getQuadraticBezier() {&lt;br /&gt;
		if (null == quadraticBezier) {&lt;br /&gt;
			quadraticBezier = new QuadraticBezier();&lt;br /&gt;
		}&lt;br /&gt;
		return quadraticBezier;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MainForm.java'''&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java /&amp;gt;import javax.swing.SwingUtilities;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class MainForm extends MainFormDesign {&lt;br /&gt;
	private static final long serialVersionUID = 1L;&lt;br /&gt;
	&lt;br /&gt;
	public MainForm() {&lt;br /&gt;
		super();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		SwingUtilities.invokeLater(new Runnable() {&lt;br /&gt;
			public void run() {&lt;br /&gt;
				MainForm mf = new MainForm();&lt;br /&gt;
				mf.setVisible(true);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a patru puncte folosind o curbă Bézier de ordinul trei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Ecuatiile sunt rezolvate in Maxima 0.7.0a folosind urmatoarele &lt;br /&gt;
	 * eqn: x4  = x0*f1(t4) + x1*f2(t4) + x2*f3(t4) + x3*f4(t4); &lt;br /&gt;
	 * eqn1: x5 = x0*f1(t5) + x1*f2(t5) + x2*f3(t5) + x3*f4(t5); &lt;br /&gt;
	 * algsys([eqn, eqn1], [x1, x2]);&lt;br /&gt;
	 * &lt;br /&gt;
	 * Functiile f1, f2, f3 si f4 sunt polinoamele Bernstein de ordinul 3.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param x0&lt;br /&gt;
	 * @param x4&lt;br /&gt;
	 * @param x5&lt;br /&gt;
	 * @param x3&lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getBezierInterpPoints(Point2D.Float x0, Point2D.Float x4, Point2D.Float x5, Point2D.Float x3) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[4];&lt;br /&gt;
		result[0] = new Point2D.Float();&lt;br /&gt;
		result[0].x = x0.x;&lt;br /&gt;
		result[0].y = x0.y;&lt;br /&gt;
		result[3] = new Point2D.Float();&lt;br /&gt;
		result[3].x = x3.x;&lt;br /&gt;
		result[3].y = x3.y;&lt;br /&gt;
		&lt;br /&gt;
		float t4 = (float) (x0.distance(x4) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		float t5 = (float) ((x0.distance(x4) + x4.distance(x5)) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		result[2] = new Point2D.Float();&lt;br /&gt;
		result[1].x = ((float) (-(f3(t4) * x5.x - f3(t5) * x4.x + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.x + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].x = ((float) ((f2(t4) * x5.x - f2(t5) * x4.x + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.x + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[1].y = ((float) (-(f3(t4) * x5.y - f3(t5) * x4.y + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.y + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].y = ((float) ((f2(t4) * x5.y - f2(t5) * x4.y + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.y + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f1(double t) {&lt;br /&gt;
		return Math.pow((1 - t), 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f2(double t) {&lt;br /&gt;
		return 3 * t * Math.pow(1 - t, 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f3(double t) {&lt;br /&gt;
		return 3 * Math.pow(t, 2) * (1 - t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 3 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f4(double t) {&lt;br /&gt;
		return Math.pow(t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(0,0);&lt;br /&gt;
		Point2D.Float Pc1 = new Point2D.Float(50,50);&lt;br /&gt;
		Point2D.Float Pc2 = new Point2D.Float(100,60);&lt;br /&gt;
		Point2D.Float P4 = new Point2D.Float(100,0);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float[] bezCoords = getBezierInterpPoints(P1, Pc1, Pc2, P4);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier cubica este data de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezCoords[0]);&lt;br /&gt;
		System.out.println(bezCoords[1]);&lt;br /&gt;
		System.out.println(bezCoords[2]);&lt;br /&gt;
		System.out.println(bezCoords[3]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Slackware_11.0_-_Instalare_%C3%85%C5%B8i_configurare&amp;diff=3380</id>
		<title>Slackware 11.0 - Instalare ÅŸi configurare</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Slackware_11.0_-_Instalare_%C3%85%C5%B8i_configurare&amp;diff=3380"/>
				<updated>2007-02-03T17:12:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Motto:''' &amp;quot;I think I named it 'Slackware' because I didn't want people to take it all that seriously at first.&amp;quot; (''Patrick Volkerding, 1994'')&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Distribuţia Slackware Linux==&lt;br /&gt;
Slackware Linux este una dintre cele mai vechi distribuţii Linux şi a fost creată de Patrick J. Volkerding pe baza SLS Linux (Soft Landing Systems), distribuţie pe care acesta a modificat-o, i-a reparat o serie de bug-uri şi apoi a oferit-o celor care aveau probleme cu varianta originală SLS Linux. Văzând că munca sa are succes, pe 16 iulie 1993 Patrick Volkerding anunţa lansarea primei versiuni (v. 1.00) a noii distribuţii - Slackware Linux, disponibilă pe servere ftp.&lt;br /&gt;
&lt;br /&gt;
Caracteristicile principale ale distribuţiei sunt: simplitatea şi stabilitatea. Acestea, combinate cu flexibilitatea şi puterea specifice unei distribuţii Linux, au determinat ca Slackware Linux să devină o distribuţie complexă, rapidă şi sigură, ce poate fi folosită atât pe staţii desktop, cât şi pe servere. Există două ramuri ale distribuţiei: versiunea curentă (în dezvoltare pentru următoarea versiune) şi versiunea stabilă (ultima lansată, cu update-uri pentru rezolvarea problemelor de securitate).&lt;br /&gt;
&lt;br /&gt;
Distribuţia poate fi obţinută plecând de la informaţiile de pe [http://www.slackware.com site-ul oficial], în varianta pe 6 CD-uri sau 1 DVD, astfel:&lt;br /&gt;
*prin download, de pe servere mirrors sau folosind tehnologia BitTorrent;&lt;br /&gt;
*prin comandă, contra unei sume de bani.&lt;br /&gt;
&lt;br /&gt;
==Recomandări înainte de instalare==&lt;br /&gt;
===Variante pentru instalare===&lt;br /&gt;
*Pe un computer virtual creat cu o soluţie de virtualizare (dacă nu aţi mai instalat niciodată o distribuţie Linux);&lt;br /&gt;
*Pe un alt hardisk (dacă nu sunteţi sigur că aţi înteles corect procesul de partiţionare a harddisk-ului);&lt;br /&gt;
*Pe acelaşi harddisk, prin repartiţionarea acestuia (dacă sunteţi absolut sigur că ştiţi ceea ce faceţi):&lt;br /&gt;
**Repartiţionare distructivă (dacă alegeţi calea cea mai simplă)&lt;br /&gt;
***repartiţionarea întregului harddisk prin ştergerea partiţiilor existente şi crearea a minim 2 noi partiţii (una Linux şi una swap);&lt;br /&gt;
***ştergerea unei partiţii existente şi crearea în locul acesteia a celor 2 partiţii necesare distribuţiei Slackware Linux;&lt;br /&gt;
**Repartiţionare nedistructivă (dacă ştiţi că aveţi noroc)&lt;br /&gt;
***redimensionarea partiţiilor existente cu un program specializat şi crearea de spaţiu liber pe hardisk, spaţiu care ulterior va fi realocat pentru cele 2 partiţii (Linux şi swap).&lt;br /&gt;
&lt;br /&gt;
===Cum poate fi evitat un eşec===&lt;br /&gt;
*Salvaţi datele importante de pe calculatorul pe care veţi instala distribuţia;&lt;br /&gt;
*Rulaţi un Live CD/DVD pentru a afla cum detectează o distribuţie Linux componentele hardware din acel calculator;&lt;br /&gt;
*Notaţi denumirea exactă şi principalele caracteristici tehnice ale tuturor componentelor hardware din acel calculator;&lt;br /&gt;
*Notaţi adresele IP, Netmask, Gateway şi Name Server (DNS Server);&lt;br /&gt;
*Verificaţi cu utilitarul &amp;lt;tt&amp;gt;md5sum&amp;lt;/tt&amp;gt; imaginile *.iso ale distribuţiei înainte de inscripţionare şi urmăriţi să nu apară erori pe timpul inscripţionării;&lt;br /&gt;
*Citiţi (eventual, listaţi) următoarele documente: Slackware-HOWTO (de pe CD-ul 1) şi manualul Slackbook (de pe CD-ul 5);&lt;br /&gt;
*Notaţi fiecare opţiune sau comandă pe care aţi folosit-o pe timpul instalării, pentru a nu repeta eventualele greşelile făcute;&lt;br /&gt;
*Nu uitaţi că primul CD (DVD-ul) distribuţiei poate fi folosit şi ca &amp;quot;rescue CD/DVD&amp;quot; - bootaţi calculatorul de pe CD/DVD şi tastaţi:&lt;br /&gt;
&amp;lt;code&amp;gt;bare.i root=/dev/hda1 noinitrd ro&amp;lt;/code&amp;gt; unde &amp;quot;hda1&amp;quot; este partiţia pe care aţi instalat distribuţia Slackware Linux;&lt;br /&gt;
*Reţineţi că fişierele din /var/log conţin informaţii importante despre procesul de încărcare a kernelului, detectarea componentelor hardware, iniţializarea diferitelor servicii şi eventualele erori.&lt;br /&gt;
&lt;br /&gt;
==Instalarea distribuţiei==&lt;br /&gt;
[[Instalarea distribuţiei Slackware Linux|Procesul de instalare în imagini]]&lt;br /&gt;
&lt;br /&gt;
==Configurarea sistemului de operare==&lt;br /&gt;
Dacă doriţi reconfigurarea sistemului, majoritatea utilitarelor folosite în etapa &amp;quot;Configure&amp;quot; a procesului de instalare pot fi rulate separat: &amp;lt;tt&amp;gt;netconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;mouseconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;timeconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;liloconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;xwmconfig&amp;lt;/tt&amp;gt;. Dar, ar fi indicat să începeţi cu ceva simplu: citiţi documentaţia care vă interesează din directorul /usr/doc/Linux-HOWTOs, în funcţie de nivelul de cunoştinţe despre Linux pe care îl aveţi.&lt;br /&gt;
&lt;br /&gt;
===Oprirea/pornirea serviciilor===&lt;br /&gt;
Slackware Linux foloseşte scripturi de iniţializare stil BSD, în timp ce alte distribuţii folosesc scripturi System V. Diferenţa este următoarea:&lt;br /&gt;
&lt;br /&gt;
BSD-style &amp;lt;code&amp;gt;/etc/rc.d/rc.sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
System V &amp;lt;code&amp;gt;/etc/init.d/sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regula de bază a [[Securitatea sistemului de operare (Slackware)|securităţii sistemului de operare]] este închiderea serviciilor care nu sunt necesare. În Slackware Linux, un script de iniţializare este executat dacă are caracteristica &amp;quot;Mode 0755&amp;quot; şi nu este executat dacă are caracteristica &amp;quot;Mode 0644&amp;quot;:&lt;br /&gt;
 -rw-r--r-- 1 0 0 1.2K 2006-05-27 23:24 rc.saslauthd&lt;br /&gt;
 -rwxr-xr-x 1 0 0  967 2006-09-25 11:33 rc.scanluns&lt;br /&gt;
&lt;br /&gt;
Pentru oprirea unui servciu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd stop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0644 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod -x /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De asemenea, fişierul /etc/inetd.conf conţine o listă comenzi pentru iniţializarea unor servicii (servere, daemoni). Majoritatea nu sunt necesare unei staţii desktop. Până învăţaţi editoarele &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pico&amp;lt;/tt&amp;gt; sau &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt;, managerul de fişiere &amp;lt;tt&amp;gt;mc&amp;lt;/tt&amp;gt; este tot ceea ce aveţi nevoie pentru lucrul cu fişierele de configurare. Puteţi comenta absolut toate liniile din /etc/inetd.conf.&lt;br /&gt;
&lt;br /&gt;
Dacă aveţi nevoie temporar, de exemplu, de serverul &amp;lt;tt&amp;gt;sshd&amp;lt;/tt&amp;gt;, atunci cu următoarea secvenţă de comenzi realizaţi pornirea şi oprirea serviciului:&lt;br /&gt;
&amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0755 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
(sau: &amp;lt;tt&amp;gt;chmod +x /etc/rc.d/rc.sshd&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd stop&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0644 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
(sau &amp;lt;tt&amp;gt;chmod -x /etc/rc.d/rc.sshd&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bineînţeles că acesta este doar un exemplu. În realitate, nu ar trebui să rulaţi nici un serviciu, indiferent de durata de timp, fără a-l configura, securiza şi monitoriza corespunzător.&lt;br /&gt;
&lt;br /&gt;
===Crearea unui cont de utilizator===&lt;br /&gt;
Este absolut necesar să creaţi un cont de utilizator, pentru că este total neindicat utilizarea contului root în afara operaţiilor de administrare a sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;useradd -m &amp;lt;nume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setarea sau schimbarea parolei unui utilizator:&lt;br /&gt;
&amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ştergerea unui utilizator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;userdel -r &amp;lt;nume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca utilizator puteţi rula aplicaţii cu drepturi de root cu ajutorul &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; sau puteţi obţine temporar drepturi de root cu &amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Despre instalarea pachetelor===&lt;br /&gt;
De multe ori i se reproşează distribuţiei Slackware Linux faptul că nu are un sistem de management a pachetelor, sistem care să verifice dependinţele pachetelor ce urmează a fi instalate, să descarce şi să instaleze automat aceste dependinţe. Acest lucru poate ar fi util, dar nu este în spiritul Slackware şi nici nu este dorit de Patrick Volkerding, singurul care decide asupra evoluţiei distribuţiei. Totuşi, există mai multe utilitare pentru instalarea, dezinstalarea şi upgradarea packetelor: &amp;lt;tt&amp;gt;installpkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;removepkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;upgradepkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkgtool&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În directorul /extra de pe CD-urile 2 şi 3 (de pe DVD) sunt o serie de aplicaţii utile. Exemplu:&lt;br /&gt;
&amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;mount /mnt/dvd&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkgtool&amp;lt;/code&amp;gt;&lt;br /&gt;
alegeţi opţiunea &amp;quot;other&amp;quot; şi scrieţi calea către pachetul pe care doriţi să-l instalaţi: /mnt/dvd/extra/k3b&lt;br /&gt;
&amp;lt;code&amp;gt;umount /mnt/dvd&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upgradarea pachetelor este partea cea mai dificilă, dar citind zilnic ChangeLogs de pe site-ul oficial, aflaţi ce pachete au fost upgradate/updatate şi din ce motive (în special cele marcate cu * Security fix *). Sau puteţi să vă înscrieţi pe cele 2 liste de mail şi veţi fi anunţat de modificările apărute în distribuţie. Urmează să vă decideţi ce pachete noi veţi instala pe sistemul dumneavoastră.&lt;br /&gt;
&lt;br /&gt;
===Instalarea kernelului 2.6.17.13===&lt;br /&gt;
Pentru început citiţi fişierul &amp;quot;README.initrd&amp;quot; din directorul /boot sau /extra/linux-2.6.17.13. Cu ajutorul utilitarului &amp;lt;tt&amp;gt;pkgtool&amp;lt;/tt&amp;gt; instalaţi din directorul /mnt/dvd/extra/linux-2.6.17.13 pachetele:&lt;br /&gt;
*kernel-generic-2.6.17.13-i486-1.tgz&lt;br /&gt;
*kernel-source-2.6.17.13-noarch-1.tgz&lt;br /&gt;
*kernel-modules-2.6.17.13-i486-1.tgz     &lt;br /&gt;
*kernel-headers-2.6.17.13-i386-1.tgz&lt;br /&gt;
&lt;br /&gt;
Apoi, urmaţi succesiunea de comenzi (exemplul este valabil pentru sistemul de fişiere reiserfs):&lt;br /&gt;
&amp;lt;code&amp;gt;cd /boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;mkinitrd -c -k 2.6.17.13 -m reiserfs&amp;lt;/code&amp;gt;&lt;br /&gt;
şi editaţi fişierul /etc/lilo.conf:&lt;br /&gt;
 # Linux bootable partition config begins&lt;br /&gt;
 image = /boot/vmlinuz-generic-2.6.17.13&lt;br /&gt;
   initrd = /boot/initrd.gz&lt;br /&gt;
   root = /dev/hda1&lt;br /&gt;
   label = Slackware&lt;br /&gt;
   read-only # Non-UMSDOS filesystems should be mounted read-only for checking&lt;br /&gt;
 # Linux bootable partition config ends&lt;br /&gt;
unde &amp;quot;hda1&amp;quot; este partiţia pe care este instalat sistemul de operare.&lt;br /&gt;
&lt;br /&gt;
În final, rulaţi comanda:&lt;br /&gt;
&amp;lt;code&amp;gt;lilo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configurarea interfeţei de reţea===&lt;br /&gt;
În mod normal, ar trebui să reuşiţi configurarea interfeţei de reţea - în acest caz o placă de reţea - pe timpul instalării sau ulterior, cu comanda &amp;lt;tt&amp;gt;netconfig&amp;lt;/tt&amp;gt;. Pentru a vedea dacă placa de reţea a fost configurată corect, urmăriţi output-ul comenzilor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig &amp;amp;&amp;amp; route -n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 eth0      Link encap:Ethernet  HWaddr 00:0C:29:AC:C8:65&lt;br /&gt;
           inet addr:192.168.102.130  Bcast:192.168.102.255  Mask:255.255.255.0&lt;br /&gt;
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
           RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
           collisions:0 txqueuelen:1000&lt;br /&gt;
           RX bytes:661 (661.0 b)  TX bytes:471 (471.0 b)&lt;br /&gt;
           Interrupt:10 Base address:0x1080&lt;br /&gt;
 &lt;br /&gt;
 lo        Link encap:Local Loopback&lt;br /&gt;
           inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
           UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
           RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
           collisions:0 txqueuelen:0&lt;br /&gt;
           RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)&lt;br /&gt;
 &lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.102.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo&lt;br /&gt;
 0.0.0.0         192.168.102.2   0.0.0.0         UG    1      0        0 eth0&lt;br /&gt;
&lt;br /&gt;
Totul e în regulă, dar - ca exemplu - să spunem că doriţi schimbarea adresei IP a interfeţei eth0. Pentru aceasta:&lt;br /&gt;
*dezactivaţi placa de reţea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 down&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*editaţi /etc/rc.d/rc.inet1.conf&lt;br /&gt;
&lt;br /&gt;
 # Config information for eth0:&lt;br /&gt;
 IPADDR[0]=&amp;quot;192.168.102.131&amp;quot;&lt;br /&gt;
 NETMASK[0]=&amp;quot;255.255.255.0&amp;quot;&lt;br /&gt;
 USE_DHCP[0]=&amp;quot;&amp;quot;&lt;br /&gt;
 DHCP_HOSTNAME[0]=&amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Default gateway IP address:&lt;br /&gt;
 GATEWAY=&amp;quot;192.168.102.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*verificaţi /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.102.2&lt;br /&gt;
&lt;br /&gt;
*activaţi placa de reţea&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În loc de editarea fişierului /etc/rc.d/rc.inet1.conf şi activarea plăcii de reţea, puteţi rula direct comanda:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 192.168.102.131 netmask 255.255.255.0 up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*în final, rulaţi comenzile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.inet1 restart &amp;amp;&amp;amp; /etc/rc.d/rc.inet2 restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configurarea plăcii de sunet===&lt;br /&gt;
Placa de sunet se setează cu comanda:&lt;br /&gt;
&amp;lt;code&amp;gt;alsaconf&amp;lt;/code&amp;gt;&lt;br /&gt;
Această comandă detectează şi încarcă modulul de kernel al plăcii de sunet şi scrie liniile de configurare corespunzătoare în fişierul de configurare /etc/modules.conf pentru kernelul 2.4.33.3 sau /etc/modprobe.conf pentru kernelul 2.6.17.13.&lt;br /&gt;
&lt;br /&gt;
Pentru kernelul 2.6.17.13, dacă &amp;lt;tt&amp;gt;alsaconf&amp;lt;/tt&amp;gt; nu găseşte modulul corespunzător plăcii de sunet, atunci editaţi fişierul /etc/rc.d/rc.modules-2.6.17.13, secţiunea &amp;quot;ALSA (Advanced Linux Sound Architecture) support&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Apoi, cu comenzile&lt;br /&gt;
&amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;alsactl store&amp;lt;/code&amp;gt;&lt;br /&gt;
setaţi volumul şi salvaţi setările în fişierul de configurare (/etc/asound.state).&lt;br /&gt;
&lt;br /&gt;
===Alte fişiere de configurare===&lt;br /&gt;
*/etc/rc.d/rc.modules-2.4.33.3 (2.6.17.13) (încărcarea unor module de kernel pe timpul bootării). Exemplu (fragment):&lt;br /&gt;
 ### USB Host Controllers:&lt;br /&gt;
 # Enhanced Host Controller Interface (USB 2.0)&lt;br /&gt;
 /sbin/modprobe ehci-hcd&lt;br /&gt;
 # Open Host Controller Interface (Compaq/Microsoft/National standard):&lt;br /&gt;
 #/sbin/modprobe ohci-hcd&lt;br /&gt;
 # Universal Host Controller Interface (Intel/Via standard):&lt;br /&gt;
 /sbin/modprobe uhci-hcd&lt;br /&gt;
 &lt;br /&gt;
 # USB Mass Storage support:&lt;br /&gt;
 /sbin/modprobe usb-storage&lt;br /&gt;
 &lt;br /&gt;
 ### Infrared Devices:&lt;br /&gt;
 /sbin/modprobe irda-usb&lt;br /&gt;
 /sbin/modprobe irport&lt;br /&gt;
 /sbin/modprobe irtty-sir&lt;br /&gt;
 /sbin/modprobe sir-dev&lt;br /&gt;
*/etc/rc.d/rc.local (rularea automată a unor scripturi la iniţializarea sistemului de operare);&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
Exemplu: montarea a două unităţi optice şi schimbarea drepturilor de acces a acestora pentru a fi accesibile unui utilizator, fără obţinerea de drepturi de root)&lt;br /&gt;
&lt;br /&gt;
Fişierul /etc/fstab original, imediat după instalare:&lt;br /&gt;
 /dev/cdrom       /mnt/cdrom       auto        noauto,owner,ro  0   0&lt;br /&gt;
&lt;br /&gt;
Fişierul /etc/fstab modificat:&lt;br /&gt;
 /dev/hdc         /mnt/dvd         auto        noauto,user,ro   0   0&lt;br /&gt;
 /dev/hdd         /mnt/cdrom       auto        noauto,user,ro   0   0&lt;br /&gt;
&lt;br /&gt;
*/etc/lilo.conf (fişierul de configurare al LInux LOader). Exemplu (fragment):&lt;br /&gt;
 # LILO configuration file&lt;br /&gt;
 # generated by 'liloconfig'&lt;br /&gt;
 #&lt;br /&gt;
 # Start LILO global section&lt;br /&gt;
 boot = /dev/hda&lt;br /&gt;
 #compact        # faster, but won't work on all systems.&lt;br /&gt;
 prompt&lt;br /&gt;
 timeout = 300&lt;br /&gt;
 #bitmap=/boot/logo64a.bmp&lt;br /&gt;
 #bmp-colors=6,9,0,15,9,0&lt;br /&gt;
 #bmp-table=59,5,1,23,&lt;br /&gt;
 #bmp-timer=66,28,6,8,&lt;br /&gt;
 #install=bmp&lt;br /&gt;
 # Normal VGA console&lt;br /&gt;
 vga = normal&lt;br /&gt;
 # End LILO global section&lt;br /&gt;
 # Linux bootable partition config begins&lt;br /&gt;
 image = /boot/vmlinuz-generic-2.6.17.13&lt;br /&gt;
   initrd = /boot/initrd.gz&lt;br /&gt;
 #  append=&amp;quot;acpi=off&amp;quot;&lt;br /&gt;
   root = /dev/hdb4&lt;br /&gt;
   label = Slackware&lt;br /&gt;
   read-only # Non-UMSDOS filesystems should be mounted read-only for checking&lt;br /&gt;
 # Linux bootable partition config ends&lt;br /&gt;
Nu uitaţi să rulaţi comanda &amp;lt;tt&amp;gt;lilo&amp;lt;/tt&amp;gt; după editarea fişierului /etc/lilo.conf!&lt;br /&gt;
&lt;br /&gt;
===Configurarea serverului grafic===&lt;br /&gt;
Se realizează cu comanda [[Configurarea X în Slackware|xorgconfig]]. Ulterior, dacă apar probleme în iniţializarea sau rularea serverului grafic sau doriţi schimbarea unor opţiuni, puteţi edita fişierul /etc/X11/xorg.conf. Pentru a vedea efectul modificărilor, puteţi compara /var/logfile/Xorg.0.log cu /var/logfile/Xorg.0.log.old:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;diff /var/log/Xorg.0.log /var/log/Xorg.0.log.old&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 14c14&lt;br /&gt;
 &amp;lt; (==) Log file: &amp;quot;/var/log/Xorg.0.log&amp;quot;, Time: Sun Nov 26 19:17:15 2006&lt;br /&gt;
 ---&lt;br /&gt;
 &amp;gt; (==) Log file: &amp;quot;/var/log/Xorg.0.log&amp;quot;, Time: Sun Nov 26 17:35:47 2006&lt;br /&gt;
 810a811&lt;br /&gt;
 &amp;gt; FreeFontPath: FPE &amp;quot;/usr/X11R6/lib/X11/fonts/misc/&amp;quot; refcount is 2, should be 1; fixing.&lt;br /&gt;
adică, în linia 14 este o modificare, iar primul fişier are mai puţin cu o linie (linia 811).&lt;br /&gt;
&lt;br /&gt;
==În loc de încheiere ==&lt;br /&gt;
&amp;quot;There's a lot of good free software out there, but it can't all be added to Slackware, and in my opinion Slackware wouldn't be better if it was&amp;quot;. (''Patrick Volkerding, 2002'')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:HowTo]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Slackware_11.0_-_Instalare_%C3%85%C5%B8i_configurare&amp;diff=3379</id>
		<title>Slackware 11.0 - Instalare ÅŸi configurare</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Slackware_11.0_-_Instalare_%C3%85%C5%B8i_configurare&amp;diff=3379"/>
				<updated>2007-02-03T17:10:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Motto:''' &amp;quot;I think I named it 'Slackware' because I didn't want people to take it all that seriously at first.&amp;quot; (''Patrick Volkerding, 1994'')&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Distribuţia Slackware Linux==&lt;br /&gt;
Slackware Linux este una dintre cele mai vechi distribuţii Linux şi a fost creată de Patrick J. Volkerding pe baza SLS Linux (Soft Landing Systems), distribuţie pe care acesta a modificat-o, i-a reparat o serie de bug-uri şi apoi a oferit-o celor care aveau probleme cu varianta originală SLS Linux. Văzând că munca sa are succes, pe 16 iulie 1993 Patrick Volkerding anunţa lansarea primei versiuni (v. 1.00) a noii distribuţii - Slackware Linux, disponibilă pe servere ftp.&lt;br /&gt;
&lt;br /&gt;
Caracteristicile principale ale distribuţiei sunt: simplitatea şi stabilitatea. Acestea, combinate cu flexibilitatea şi puterea specifice unei distribuţii Linux, au determinat ca Slackware Linux să devină o distribuţie complexă, rapidă şi sigură, ce poate fi folosită atât pe staţii desktop, cât şi pe servere. Există două ramuri ale distribuţiei: versiunea curentă (în dezvoltare pentru următoarea versiune) şi versiunea stabilă (ultima lansată, cu update-uri pentru rezolvarea problemelor de securitate).&lt;br /&gt;
&lt;br /&gt;
Distribuţia poate fi obţinută plecând de la informaţiile de pe [http://www.slackware.com site-ul oficial], în varianta pe 6 CD-uri sau 1 DVD, astfel:&lt;br /&gt;
*prin download, de pe servere mirrors sau folosind tehnologia BitTorrent;&lt;br /&gt;
*prin comandă, contra unei sume de bani.&lt;br /&gt;
&lt;br /&gt;
==Recomandări înainte de instalare==&lt;br /&gt;
===Variante pentru instalare===&lt;br /&gt;
*Pe un computer virtual creat cu o soluţie de virtualizare (dacă nu aţi mai instalat niciodată o distribuţie Linux);&lt;br /&gt;
*Pe un alt hardisk (dacă nu sunteţi sigur că aţi înteles corect procesul de partiţionare a harddisk-ului);&lt;br /&gt;
*Pe acelaşi harddisk, prin repartiţionarea acestuia (dacă sunteţi absolut sigur că ştiţi ceea ce faceţi):&lt;br /&gt;
**Repartiţionare distructivă (dacă alegeţi calea cea mai simplă)&lt;br /&gt;
***repartiţionarea întregului harddisk prin ştergerea partiţiilor existente şi crearea a minim 2 noi partiţii (una Linux şi una swap);&lt;br /&gt;
***ştergerea unei partiţii existente şi crearea în locul acesteia a celor 2 partiţii necesare distribuţiei Slackware Linux;&lt;br /&gt;
**Repartiţionare nedistructivă (dacă ştiţi că aveţi noroc)&lt;br /&gt;
***redimensionarea partiţiilor existente cu un program specializat şi crearea de spaţiu liber pe hardisk, spaţiu care ulterior va fi realocat pentru cele 2 partiţii (Linux şi swap).&lt;br /&gt;
&lt;br /&gt;
===Cum poate fi evitat un eşec===&lt;br /&gt;
*Salvaţi datele importante de pe calculatorul pe care veţi instala distribuţia;&lt;br /&gt;
*Rulaţi un Live CD/DVD pentru a afla cum detectează o distribuţie Linux componentele hardware din acel calculator;&lt;br /&gt;
*Notaţi denumirea exactă şi principalele caracteristici tehnice ale tuturor componentelor hardware din acel calculator;&lt;br /&gt;
*Notaţi adresele IP, Netmask, Gateway şi Name Server (DNS Server);&lt;br /&gt;
*Verificaţi cu utilitarul &amp;lt;tt&amp;gt;md5sum&amp;lt;/tt&amp;gt; imaginile *.iso ale distribuţiei înainte de inscripţionare şi urmăriţi să nu apară erori pe timpul inscripţionării;&lt;br /&gt;
*Citiţi (eventual, listaţi) următoarele documente: Slackware-HOWTO (de pe CD-ul 1) şi manualul Slackbook (de pe CD-ul 5);&lt;br /&gt;
*Notaţi fiecare opţiune sau comandă pe care aţi folosit-o pe timpul instalării, pentru a nu repeta eventualele greşelile făcute;&lt;br /&gt;
*Nu uitaţi că primul CD (DVD-ul) distribuţiei poate fi folosit şi ca &amp;quot;rescue CD/DVD&amp;quot; - bootaţi calculatorul de pe CD/DVD şi tastaţi:&lt;br /&gt;
&amp;lt;code&amp;gt;bare.i root=/dev/hda1 noinitrd ro&amp;lt;/code&amp;gt; unde &amp;quot;hda1&amp;quot; este partiţia pe care aţi instalat distribuţia Slackware Linux;&lt;br /&gt;
*Reţineţi că fişierele din /var/log conţin informaţii importante despre procesul de încărcare a kernelului, detectarea componentelor hardware, iniţializarea diferitelor servicii şi eventualele erori.&lt;br /&gt;
&lt;br /&gt;
==Instalarea distribuţiei==&lt;br /&gt;
[[Instalarea distribuţiei Slackware Linux|Procesul de instalare în imagini]]&lt;br /&gt;
&lt;br /&gt;
==Configurarea sistemului de operare==&lt;br /&gt;
Dacă doriţi reconfigurarea sistemului, majoritatea utilitarelor folosite în etapa &amp;quot;Configure&amp;quot; a procesului de instalare pot fi rulate separat: &amp;lt;tt&amp;gt;netconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;mouseconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;timeconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;liloconfig&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;xwmconfig&amp;lt;/tt&amp;gt;. Dar, ar fi indicat să începeţi cu ceva simplu: citiţi documentaţia care vă interesează din directorul /usr/doc/Linux-HOWTOs, în funcţie de nivelul de cunoştinţe despre Linux pe care îl aveţi.&lt;br /&gt;
&lt;br /&gt;
===Oprirea/pornirea serviciilor===&lt;br /&gt;
Slackware Linux foloseşte scripturi de iniţializare stil BSD, în timp ce alte distribuţii folosesc scripturi System V. Diferenţa este următoarea:&lt;br /&gt;
&lt;br /&gt;
BSD-style &amp;lt;code&amp;gt;/etc/rc.d/rc.sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
System V &amp;lt;code&amp;gt;/etc/init.d/sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Regula de bază a [[Securitatea sistemului de operare (Slackware)|securităţii sistemului de operare]] este închiderea serviciilor care nu sunt necesare. În Slackware Linux, un script de iniţializare este executat dacă are caracteristica &amp;quot;Mode 0755&amp;quot; şi nu este executat dacă are caracteristica &amp;quot;Mode 0644&amp;quot;:&lt;br /&gt;
 -rw-r--r-- 1 0 0 1.2K 2006-05-27 23:24 rc.saslauthd&lt;br /&gt;
 -rwxr-xr-x 1 0 0  967 2006-09-25 11:33 rc.scanluns&lt;br /&gt;
&lt;br /&gt;
Pentru oprirea unui servciu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd stop&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0644 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod -x /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De asemenea, fişierul /etc/inetd.conf conţine o listă comenzi pentru iniţializarea unor servicii (servere, daemoni). Majoritatea nu sunt necesare unei staţii desktop. Până învăţaţi editoarele &amp;lt;tt&amp;gt;vi&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pico&amp;lt;/tt&amp;gt; sau &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt;, managerul de fişiere &amp;lt;tt&amp;gt;mc&amp;lt;/tt&amp;gt; este tot ceea ce aveţi nevoie pentru lucrul cu fişierele de configurare. Puteţi comenta absolut toate liniile din /etc/inetd.conf.&lt;br /&gt;
&lt;br /&gt;
Dacă aveţi nevoie temporar, de exemplu, de serverul &amp;lt;tt&amp;gt;sshd&amp;lt;/tt&amp;gt;, atunci cu următoarea secvenţă de comenzi realizaţi pornirea şi oprirea serviciului:&lt;br /&gt;
&amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0755 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
(sau: &amp;lt;tt&amp;gt;chmod +x /etc/rc.d/rc.sshd&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd start&amp;lt;/code&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.sshd stop&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 0644 /etc/rc.d/rc.sshd&amp;lt;/code&amp;gt;&lt;br /&gt;
(sau &amp;lt;tt&amp;gt;chmod -x /etc/rc.d/rc.sshd&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bineînţeles că acesta este doar un exemplu. În realitate, nu ar trebui să rulaţi nici un serviciu, indiferent de durata de timp, fără a-l configura, securiza şi monitoriza corespunzător.&lt;br /&gt;
&lt;br /&gt;
===Crearea unui cont de utilizator===&lt;br /&gt;
Este absolut necesar să creaţi un cont de utilizator, pentru că este total neindicat utilizarea contului root în afara operaţiilor de administrare a sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;useradd -m &amp;lt;nume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sau:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;adduser&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setarea sau schimbarea parolei unui utilizator:&lt;br /&gt;
&amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ştergerea unui utilizator:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;userdel -r &amp;lt;nume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca utilizator puteţi rula aplicaţii cu drepturi de root cu ajutorul &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; sau puteţi obţine temporar drepturi de root cu &amp;lt;tt&amp;gt;su&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Despre instalarea pachetelor===&lt;br /&gt;
De multe ori i se reproşează distribuţiei Slackware Linux faptul că nu are un sistem de management a pachetelor, sistem care să verifice dependinţele pachetelor ce urmează a fi instalate, să descarce şi să instaleze automat aceste dependinţe. Acest lucru poate ar fi util, dar nu este în spiritul Slackware şi nici nu este dorit de Patrick Volkerding, singurul care decide asupra evoluţiei distribuţiei. Totuşi, există mai multe utilitare pentru instalarea, dezinstalarea şi upgradarea packetelor: &amp;lt;tt&amp;gt;installpkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;removepkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;upgradepkg&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;pkgtool&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În directorul /extra de pe CD-urile 2 şi 3 (de pe DVD) sunt o serie de aplicaţii utile. Exemplu:&lt;br /&gt;
&amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;mount /mnt/dvd&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;pkgtool&amp;lt;/code&amp;gt;&lt;br /&gt;
alegeţi opţiunea &amp;quot;other&amp;quot; şi scrieţi calea către pachetul pe care doriţi să-l instalaţi: /mnt/dvd/extra/k3b&lt;br /&gt;
&amp;lt;code&amp;gt;umount /mnt/dvd&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upgradarea pachetelor este partea cea mai dificilă, dar citind zilnic ChangeLogs de pe site-ul oficial, aflaţi ce pachete au fost upgradate/updatate şi din ce motive (în special cele marcate cu * Security fix *). Sau puteţi să vă înscrieţi pe cele 2 liste de mail şi veţi fi anunţat de modificările apărute în distribuţie. Urmează să vă decideţi ce pachete noi veţi instala pe sistemul dumneavoastră.&lt;br /&gt;
&lt;br /&gt;
===Instalarea kernelului 2.6.17.13===&lt;br /&gt;
Pentru început citiţi fişierul &amp;quot;README.initrd&amp;quot; din directorul /boot sau /extra/linux-2.6.17.13. Cu ajutorul utilitarului &amp;lt;tt&amp;gt;pkgtool&amp;lt;/tt&amp;gt; instalaţi din directorul /mnt/dvd/extra/linux-2.6.17.13 pachetele:&lt;br /&gt;
*kernel-generic-2.6.17.13-i486-1.tgz&lt;br /&gt;
*kernel-source-2.6.17.13-noarch-1.tgz&lt;br /&gt;
*kernel-modules-2.6.17.13-i486-1.tgz     &lt;br /&gt;
*kernel-headers-2.6.17.13-i386-1.tgz&lt;br /&gt;
&lt;br /&gt;
Apoi, urmaţi succesiunea de comenzi (exemplul este valabil pentru sistemul de fişiere reiserfs):&lt;br /&gt;
&amp;lt;code&amp;gt;cd /boot&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;mkinitrd -c -k 2.6.17.13 -m reiserfs&amp;lt;/code&amp;gt;&lt;br /&gt;
şi editaţi fişierul /etc/lilo.conf:&lt;br /&gt;
 # Linux bootable partition config begins&lt;br /&gt;
 image = /boot/vmlinuz-generic-2.6.17.13&lt;br /&gt;
   initrd = /boot/initrd.gz&lt;br /&gt;
   root = /dev/hda1&lt;br /&gt;
   label = Slackware&lt;br /&gt;
   read-only # Non-UMSDOS filesystems should be mounted read-only for checking&lt;br /&gt;
 # Linux bootable partition config ends&lt;br /&gt;
unde &amp;quot;hda1&amp;quot; este partiţia pe care este instalat sistemul de operare.&lt;br /&gt;
&lt;br /&gt;
În final, rulaţi comanda:&lt;br /&gt;
&amp;lt;code&amp;gt;lilo&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configurarea interfeţei de reţea===&lt;br /&gt;
În mod normal, ar trebui să reuşiţi configurarea interfeţei de reţea - în acest caz o placă de reţea - pe timpul instalării sau ulterior, cu comanda &amp;lt;tt&amp;gt;netconfig&amp;lt;/tt&amp;gt;. Pentru a vedea dacă placa de reţea a fost configurată corect, urmăriţi output-ul comenzilor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig &amp;amp;&amp;amp; route -n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 eth0      Link encap:Ethernet  HWaddr 00:0C:29:AC:C8:65&lt;br /&gt;
           inet addr:192.168.102.130  Bcast:192.168.102.255  Mask:255.255.255.0&lt;br /&gt;
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;
           RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
           collisions:0 txqueuelen:1000&lt;br /&gt;
           RX bytes:661 (661.0 b)  TX bytes:471 (471.0 b)&lt;br /&gt;
           Interrupt:10 Base address:0x1080&lt;br /&gt;
 &lt;br /&gt;
 lo        Link encap:Local Loopback&lt;br /&gt;
           inet addr:127.0.0.1  Mask:255.0.0.0&lt;br /&gt;
           UP LOOPBACK RUNNING  MTU:16436  Metric:1&lt;br /&gt;
           RX packets:8 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;
           TX packets:8 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;
           collisions:0 txqueuelen:0&lt;br /&gt;
           RX bytes:560 (560.0 b)  TX bytes:560 (560.0 b)&lt;br /&gt;
 &lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.102.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo&lt;br /&gt;
 0.0.0.0         192.168.102.2   0.0.0.0         UG    1      0        0 eth0&lt;br /&gt;
&lt;br /&gt;
Totul e în regulă, dar - ca exemplu - să spunem că doriţi schimbarea adresei IP a interfeţei eth0. Pentru aceasta:&lt;br /&gt;
*dezactivaţi placa de reţea&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 down&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*editaţi /etc/rc.d/rc.inet1.conf&lt;br /&gt;
&lt;br /&gt;
 # Config information for eth0:&lt;br /&gt;
 IPADDR[0]=&amp;quot;192.168.102.131&amp;quot;&lt;br /&gt;
 NETMASK[0]=&amp;quot;255.255.255.0&amp;quot;&lt;br /&gt;
 USE_DHCP[0]=&amp;quot;&amp;quot;&lt;br /&gt;
 DHCP_HOSTNAME[0]=&amp;quot;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # Default gateway IP address:&lt;br /&gt;
 GATEWAY=&amp;quot;192.168.102.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*verificaţi /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.102.2&lt;br /&gt;
&lt;br /&gt;
*activaţi placa de reţea&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În loc de editarea fişierului /etc/rc.d/rc.inet1.conf şi activarea plăcii de reţea, puteţi rula direct comanda:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ifconfig eth0 192.168.102.131 netmask 255.255.255.0 up&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*în final, rulaţi comenzile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/etc/rc.d/rc.inet1 restart &amp;amp;&amp;amp; /etc/rc.d/rc.inet2 restart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Configurarea plăcii de sunet===&lt;br /&gt;
Placa de sunet se setează cu comanda:&lt;br /&gt;
&amp;lt;code&amp;gt;alsaconf&amp;lt;/code&amp;gt;&lt;br /&gt;
Această comandă detectează şi încarcă modulul de kernel al plăcii de sunet şi scrie liniile de configurare corespunzătoare în fişierul de configurare /etc/modules.conf pentru kernelul 2.4.33.3 sau /etc/modprobe.conf pentru kernelul 2.6.17.13.&lt;br /&gt;
&lt;br /&gt;
Pentru kernelul 2.6.17.13, dacă &amp;lt;tt&amp;gt;alsaconf&amp;lt;/tt&amp;gt; nu găseşte modulul corespunzător plăcii de sunet, atunci editaţi fişierul /etc/rc.d/rc.modules-2.6.17.13, secţiunea &amp;quot;ALSA (Advanced Linux Sound Architecture) support&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Apoi, cu comenzile&lt;br /&gt;
&amp;lt;code&amp;gt;alsamixer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;alsactl store&amp;lt;/code&amp;gt;&lt;br /&gt;
setaţi volumul şi salvaţi setările în fişierul de configurare (/etc/asound.state).&lt;br /&gt;
&lt;br /&gt;
===Alte fişiere de configurare===&lt;br /&gt;
*/etc/rc.d/rc.modules-2.4.33.3 (2.6.17.13) (încărcarea unor module de kernel pe timpul bootării). Exemplu (fragment):&lt;br /&gt;
 ### USB Host Controllers:&lt;br /&gt;
 # Enhanced Host Controller Interface (USB 2.0)&lt;br /&gt;
 /sbin/modprobe ehci-hcd&lt;br /&gt;
 # Open Host Controller Interface (Compaq/Microsoft/National standard):&lt;br /&gt;
 #/sbin/modprobe ohci-hcd&lt;br /&gt;
 # Universal Host Controller Interface (Intel/Via standard):&lt;br /&gt;
 /sbin/modprobe uhci-hcd&lt;br /&gt;
 &lt;br /&gt;
 # USB Mass Storage support:&lt;br /&gt;
 /sbin/modprobe usb-storage&lt;br /&gt;
 &lt;br /&gt;
 ### Infrared Devices:&lt;br /&gt;
 /sbin/modprobe irda-usb&lt;br /&gt;
 /sbin/modprobe irport&lt;br /&gt;
 /sbin/modprobe irtty-sir&lt;br /&gt;
 /sbin/modprobe sir-dev&lt;br /&gt;
*/etc/rc.d/rc.local (rularea automată a unor scripturi la iniţializarea sistemului de operare);&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
Exemplu: montarea a două unităţi optice şi schimbarea drepturilor de acces a acestora pentru a fi accesibile unui utilizator, fără obţinerea de drepturi de root)&lt;br /&gt;
&lt;br /&gt;
Fişierul /etc/fstab original, imediat după instalare:&lt;br /&gt;
 /dev/cdrom       /mnt/cdrom       auto        noauto,owner,ro  0   0&lt;br /&gt;
&lt;br /&gt;
Fişierul /etc/fstab modificat:&lt;br /&gt;
 /dev/hdc         /mnt/dvd         auto        noauto,user,ro   0   0&lt;br /&gt;
 /dev/hdd         /mnt/cdrom       auto        noauto,user,ro   0   0&lt;br /&gt;
&lt;br /&gt;
*/etc/lilo.conf (fişierul de configurare al LInux LOader). Exemplu (fragment):&lt;br /&gt;
 # LILO configuration file&lt;br /&gt;
 # generated by 'liloconfig'&lt;br /&gt;
 #&lt;br /&gt;
 # Start LILO global section&lt;br /&gt;
 boot = /dev/hda&lt;br /&gt;
 #compact        # faster, but won't work on all systems.&lt;br /&gt;
 prompt&lt;br /&gt;
 timeout = 300&lt;br /&gt;
 #bitmap=/boot/logo64a.bmp&lt;br /&gt;
 #bmp-colors=6,9,0,15,9,0&lt;br /&gt;
 #bmp-table=59,5,1,23,&lt;br /&gt;
 #bmp-timer=66,28,6,8,&lt;br /&gt;
 #install=bmp&lt;br /&gt;
 # Normal VGA console&lt;br /&gt;
 vga = normal&lt;br /&gt;
 # End LILO global section&lt;br /&gt;
 # Linux bootable partition config begins&lt;br /&gt;
 image = /boot/vmlinuz-generic-2.6.17.13&lt;br /&gt;
   initrd = /boot/initrd.gz&lt;br /&gt;
 #  append=&amp;quot;acpi=off&amp;quot;&lt;br /&gt;
   root = /dev/hdb4&lt;br /&gt;
   label = Slackware&lt;br /&gt;
   read-only # Non-UMSDOS filesystems should be mounted read-only for checking&lt;br /&gt;
 # Linux bootable partition config ends&lt;br /&gt;
Nu uitaţi să rulaţi comanda &amp;lt;tt&amp;gt;lilo&amp;lt;/tt&amp;gt; după editarea fişierului /etc/lilo.conf!&lt;br /&gt;
&lt;br /&gt;
===Configurarea serverului grafic===&lt;br /&gt;
Se realizează cu comanda [[Configurarea X în Slackware|xorgconfig]]. Ulterior, dacă apar probleme în iniţializarea sau rularea serverului grafic sau doriţi schimbarea unor opţiuni, puteţi edita fişierul /etc/X11/xorg.conf. Pentru a vedea efectul modificărilor, puteţi compara /var/logfile/Xorg.0.log cu /var/logfile/Xorg.0.log.old:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;diff /var/log/Xorg.0.log /var/log/Xorg.0.log.old&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 14c14&lt;br /&gt;
 &amp;lt; (==) Log file: &amp;quot;/var/log/Xorg.0.log&amp;quot;, Time: Sun Nov 26 19:17:15 2006&lt;br /&gt;
 ---&lt;br /&gt;
 &amp;gt; (==) Log file: &amp;quot;/var/log/Xorg.0.log&amp;quot;, Time: Sun Nov 26 17:35:47 2006&lt;br /&gt;
 810a811&lt;br /&gt;
 &amp;gt; FreeFontPath: FPE &amp;quot;/usr/X11R6/lib/X11/fonts/misc/&amp;quot; refcount is 2, should be 1; fixing.&lt;br /&gt;
adică, în linia 14 este o modificare, iar primul fişier are mai puţin cu o linie (linia 811).&lt;br /&gt;
&lt;br /&gt;
==În loc de încheiere ==&lt;br /&gt;
&amp;quot;There's a lot of good free software out there, but it can't all be added to Slackware, and in my opinion Slackware wouldn't be better if it was&amp;quot;. (''Patrick Volkerding, 2002'')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:HowTo]]&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3276</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3276"/>
				<updated>2006-12-04T13:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Interpolarea a patru puncte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a patru puncte folosind o curbă Bézier de ordinul trei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Ecuatiile sunt rezolvate in Maxima 0.7.0a folosind urmatoarele &lt;br /&gt;
	 * eqn: x4  = x0*f1(t4) + x1*f2(t4) + x2*f3(t4) + x3*f4(t4); &lt;br /&gt;
	 * eqn1: x5 = x0*f1(t5) + x1*f2(t5) + x2*f3(t5) + x3*f4(t5); &lt;br /&gt;
	 * algsys([eqn, eqn1], [x1, x2]);&lt;br /&gt;
	 * &lt;br /&gt;
	 * Functiile f1, f2, f3 si f4 sunt polinoamele Bernstein de ordinul 3.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param x0&lt;br /&gt;
	 * @param x4&lt;br /&gt;
	 * @param x5&lt;br /&gt;
	 * @param x3&lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getBezierInterpPoints(Point2D.Float x0, Point2D.Float x4, Point2D.Float x5, Point2D.Float x3) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[4];&lt;br /&gt;
		result[0] = new Point2D.Float();&lt;br /&gt;
		result[0].x = x0.x;&lt;br /&gt;
		result[0].y = x0.y;&lt;br /&gt;
		result[3] = new Point2D.Float();&lt;br /&gt;
		result[3].x = x3.x;&lt;br /&gt;
		result[3].y = x3.y;&lt;br /&gt;
		&lt;br /&gt;
		float t4 = (float) (x0.distance(x4) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		float t5 = (float) ((x0.distance(x4) + x4.distance(x5)) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		result[2] = new Point2D.Float();&lt;br /&gt;
		result[1].x = ((float) (-(f3(t4) * x5.x - f3(t5) * x4.x + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.x + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].x = ((float) ((f2(t4) * x5.x - f2(t5) * x4.x + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.x + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.x) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[1].y = ((float) (-(f3(t4) * x5.y - f3(t5) * x4.y + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.y + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].y = ((float) ((f2(t4) * x5.y - f2(t5) * x4.y + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.y + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.y) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f1(double t) {&lt;br /&gt;
		return Math.pow((1 - t), 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f2(double t) {&lt;br /&gt;
		return 3 * t * Math.pow(1 - t, 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f3(double t) {&lt;br /&gt;
		return 3 * Math.pow(t, 2) * (1 - t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 3 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f4(double t) {&lt;br /&gt;
		return Math.pow(t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(0,0);&lt;br /&gt;
		Point2D.Float Pc1 = new Point2D.Float(50,50);&lt;br /&gt;
		Point2D.Float Pc2 = new Point2D.Float(100,60);&lt;br /&gt;
		Point2D.Float P4 = new Point2D.Float(100,0);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float[] bezCoords = getBezierInterpPoints(P1, Pc1, Pc2, P4);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier cubica este data de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezCoords[0]);&lt;br /&gt;
		System.out.println(bezCoords[1]);&lt;br /&gt;
		System.out.println(bezCoords[2]);&lt;br /&gt;
		System.out.println(bezCoords[3]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3275</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3275"/>
				<updated>2006-12-04T13:08:03Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Interpolarea a patru puncte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a patru puncte folosind o curbă Bézier de ordinul trei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Ecuatiile sunt rezolvate in Maxima 0.7.0a folosind urmatoarele &lt;br /&gt;
	 * eqn: x4  = x0*f1(t4) + x1*f2(t4) + x2*f3(t4) + x3*f4(t4); &lt;br /&gt;
	 * eqn1: x5 = x0*f1(t5) + x1*f2(t5) + x2*f3(t5) + x3*f4(t5); &lt;br /&gt;
	 * algsys([eqn, eqn1], [x1, x2]);&lt;br /&gt;
	 * &lt;br /&gt;
	 * Functiile f1, f2, f3 si f4 sunt polinoamele Bernstein de ordinul 3.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param x0&lt;br /&gt;
	 * @param x4&lt;br /&gt;
	 * @param x5&lt;br /&gt;
	 * @param x3&lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getBezierInterpPoints(Point2D.Float x0, Point2D.Float x4, Point2D.Float x5, Point2D.Float x3) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[4];&lt;br /&gt;
		result[0] = new Point2D.Float();&lt;br /&gt;
		result[0].x = x0.x;&lt;br /&gt;
		result[0].y = x0.y;&lt;br /&gt;
		result[3] = new Point2D.Float();&lt;br /&gt;
		result[3].x = x3.x;&lt;br /&gt;
		result[3].y = x3.y;&lt;br /&gt;
		&lt;br /&gt;
		float t4 = (float) (x0.distance(x4) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		float t5 = (float) ((x0.distance(x4) + x4.distance(x5)) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		result[2] = new Point2D.Float();&lt;br /&gt;
		result[1].x = ((float) (-(f3(t4) * x5.getX() - f3(t5) * x4.getX() + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.getX() + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getX()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].x = ((float) ((f2(t4) * x5.getX() - f2(t5) * x4.getX() + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.getX() + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getX()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[1].y = ((float) (-(f3(t4) * x5.getY() - f3(t5) * x4.getY() + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.getY() + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getY()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].y = ((float) ((f2(t4) * x5.getY() - f2(t5) * x4.getY() + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.getY() + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getY()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f1(double t) {&lt;br /&gt;
		return Math.pow((1 - t), 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f2(double t) {&lt;br /&gt;
		return 3 * t * Math.pow(1 - t, 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f3(double t) {&lt;br /&gt;
		return 3 * Math.pow(t, 2) * (1 - t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 3 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f4(double t) {&lt;br /&gt;
		return Math.pow(t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(0,0);&lt;br /&gt;
		Point2D.Float Pc1 = new Point2D.Float(50,50);&lt;br /&gt;
		Point2D.Float Pc2 = new Point2D.Float(100,60);&lt;br /&gt;
		Point2D.Float P4 = new Point2D.Float(100,0);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float[] bezCoords = getBezierInterpPoints(P1, Pc1, Pc2, P4);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier cubica este data de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezCoords[0]);&lt;br /&gt;
		System.out.println(bezCoords[1]);&lt;br /&gt;
		System.out.println(bezCoords[2]);&lt;br /&gt;
		System.out.println(bezCoords[3]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3274</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3274"/>
				<updated>2006-12-04T13:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Interpolarea a patru puncte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Ecuatiile sunt rezolvate in Maxima 0.7.0a folosind urmatoarele &lt;br /&gt;
	 * eqn: x4  = x0*f1(t4) + x1*f2(t4) + x2*f3(t4) + x3*f4(t4); &lt;br /&gt;
	 * eqn1: x5 = x0*f1(t5) + x1*f2(t5) + x2*f3(t5) + x3*f4(t5); &lt;br /&gt;
	 * algsys([eqn, eqn1], [x1, x2]);&lt;br /&gt;
	 * &lt;br /&gt;
	 * Functiile f1, f2, f3 si f4 sunt polinoamele Bernstein de ordinul 3.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param x0&lt;br /&gt;
	 * @param x4&lt;br /&gt;
	 * @param x5&lt;br /&gt;
	 * @param x3&lt;br /&gt;
	 * @return&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getBezierInterpPoints(Point2D.Float x0, Point2D.Float x4, Point2D.Float x5, Point2D.Float x3) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[4];&lt;br /&gt;
		result[0] = new Point2D.Float();&lt;br /&gt;
		result[0].x = x0.x;&lt;br /&gt;
		result[0].y = x0.y;&lt;br /&gt;
		result[3] = new Point2D.Float();&lt;br /&gt;
		result[3].x = x3.x;&lt;br /&gt;
		result[3].y = x3.y;&lt;br /&gt;
		&lt;br /&gt;
		float t4 = (float) (x0.distance(x4) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		float t5 = (float) ((x0.distance(x4) + x4.distance(x5)) / (x0.distance(x4) + x4.distance(x5) + x5.distance(x3)));&lt;br /&gt;
		&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		result[2] = new Point2D.Float();&lt;br /&gt;
		result[1].x = ((float) (-(f3(t4) * x5.getX() - f3(t5) * x4.getX() + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.getX() + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getX()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].x = ((float) ((f2(t4) * x5.getX() - f2(t5) * x4.getX() + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.getX() + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getX()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[1].y = ((float) (-(f3(t4) * x5.getY() - f3(t5) * x4.getY() + (f4(t4) * f3(t5) - f3(t4) * f4(t5)) * x3.getY() + (f1(t4) * f3(t5) - f3(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getY()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		result[2].y = ((float) ((f2(t4) * x5.getY() - f2(t5) * x4.getY() + (f4(t4) * f2(t5) - f2(t4) * f4(t5)) * x3.getY() + (f1(t4) * f2(t5) - f2(t4)&lt;br /&gt;
				* f1(t5))&lt;br /&gt;
				* x0.getY()) / (f2(t4) * f3(t5) - f3(t4) * f2(t5))));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f1(double t) {&lt;br /&gt;
		return Math.pow((1 - t), 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f2(double t) {&lt;br /&gt;
		return 3 * t * Math.pow(1 - t, 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f3(double t) {&lt;br /&gt;
		return 3 * Math.pow(t, 2) * (1 - t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 3 si de ordin 3&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param t&lt;br /&gt;
	 */&lt;br /&gt;
	private static double f4(double t) {&lt;br /&gt;
		return Math.pow(t, 3);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(0,0);&lt;br /&gt;
		Point2D.Float Pc1 = new Point2D.Float(50,50);&lt;br /&gt;
		Point2D.Float Pc2 = new Point2D.Float(100,60);&lt;br /&gt;
		Point2D.Float P4 = new Point2D.Float(100,0);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float[] bezCoords = getBezierInterpPoints(P1, Pc1, Pc2, P4);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier cubica este data de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezCoords[0]);&lt;br /&gt;
		System.out.println(bezCoords[1]);&lt;br /&gt;
		System.out.println(bezCoords[2]);&lt;br /&gt;
		System.out.println(bezCoords[3]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3273</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3273"/>
				<updated>2006-12-04T11:04:04Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Interpolarea a patru puncte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3272</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3272"/>
				<updated>2006-12-04T11:03:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Interpolarea a patru puncte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rezolvând sistemul se obţine:&lt;br /&gt;
p2=-(b23tc1*pc2-b23tc2*pc1+(b23tc2*b33tc1-b23tc1*b33tc2)*p4+(b03tc1*b23tc2-b03tc2*b23tc1)*p1)/(b13tc1*b23tc2-b13tc2*b23tc1),&lt;br /&gt;
p3=(b13tc1*pc2-b13tc2*pc1+(b13tc2*b33tc1-b13tc1*b33tc2)*p4+(b03tc1*b13tc2-b03tc2*b13tc1)*p1)/(b13tc1*b23tc2-b13tc2*b23tc1)]]&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_2 = - \frac{B_{2,3}(t_{c1})P_{C2} - B_{2,3}(t_{c2})P_{C1} +(B_{2,3}(t_{c2})B_{3,3}(t_{c1}) - B_{2,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{2,3}(t_{c2}) - B_{0,3}(t_{c2})B_{2,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})} \\ P_3 = \frac{B_{1,3}(t_{c1})P_{C2} - B_{1,3}(t_{c2})P_{C1} +(B_{1,3}(t_{c2})B_{3,3}(t_{c1}) - B_{1,3}(t_{c1})B_{3,3}(t_{c2}))P_4 + (B_{0,3}(t_{c1})B_{1,3}(t_{c2}) - B_{0,3}(t_{c2})B_{1,3}(t_{c1}))P_1}{B_{1,3}(t_{c1})B_{2,3}(t_{c2}) - B_{1,3}(t_{c2})B_{2,3}(t_{c1})}\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3271</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3271"/>
				<updated>2006-12-04T10:47:34Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând t-urile pentru punctele de pe curbă putem scrie ecuaţiile sistemului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}P_{C1} = B_{0,3}(t_{c1})P_1 + B_{1,3}(t_{c1})P_2 + B_{2,3}(t_{c1})P_3 + B_{3,3}(t_{c1})P_4 \\ P_{C2} = B_{0,3}(t_{c2})P_1 + B_{1,3}(t_{c2})P_2 + B_{2,3}(t_{c2})P_3 + B_{3,3}(t_{c2})P_4\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3270</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3270"/>
				<updated>2006-12-04T08:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Definirea unei curbe Bézier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a N puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3269</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3269"/>
				<updated>2006-12-04T08:29:44Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: uff more to come&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
Cunoştem patru puncte &amp;lt;math&amp;gt;P_1, P_{C1}, P_{C2}, P_4&amp;lt;/math&amp;gt;, dintre care două puncte sunt pe curbă şi două reprezintă capetele acesteia. Punctele &amp;lt;math&amp;gt;P_{C1}&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_{C2}&amp;lt;/math&amp;gt; verifică ecuaţia curbei pentru &amp;lt;math&amp;gt; t_{c1}&amp;lt;/math&amp;gt; şi respectiv &amp;lt;math&amp;gt;t_{c2}&amp;lt;/math&amp;gt;. Pentru a putea obţine un sistem de două ecuaţii cu două necunoscute (&amp;lt;math&amp;gt;P_2, P_3&amp;lt;/math&amp;gt;) trebuie să aproximăm cumva t-urile. Voi folosi aceeaşi metodă ca la interpolarea prin trei puncte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c1} = \frac{dist(P_1,P_{C1})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_{c2} = \frac{dist(P_1,P_{C1})+dist(P_{C1},P_{C2})}{dist(P_1,P_{C1}) + dist(P_{C1},P_{C2}) + dist(P_{C2},P_4)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3258</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3258"/>
				<updated>2006-12-02T10:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Definirea unei curbe Bézier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;java/&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3115</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3115"/>
				<updated>2006-11-13T09:03:36Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Interpolarea a trei puncte&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
Interpolare: Interpolarea reprezintă o metodă matematică de a creea  date care lipsesc.&lt;br /&gt;
&lt;br /&gt;
Multe persoane nu se simt confortabil să deseneze curbe Bézier folosind acele controale care nu se află pe curbă. Este un pic nenatural, deşi în aplicaţii complexe ale curbelor acele controale devin mult mai importante şi uşurează foarte mult munca. De exemplu atunci când se doreşte alipirea a două curbe Bézier, dorind păstrarea continuităţii punctul de control al celei de-a doua curbe se modifică astfel încât să fie coliniar cu punctul de control al primei curbe şi punctul comun celor două curbe.&lt;br /&gt;
&lt;br /&gt;
În cazurile în care cunoaştem înainte puncte de pe curbă şi vrem să găsim ecuaţia curbei care trece prin acele puncte, trebuie să găsim o metodă de interpolare.&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
Cunoaştem trei puncte &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt;. Dorim să găsim o curbă Bézier care să trecă prin aceste trei puncte. Este clar că &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_3&amp;lt;/math&amp;gt; sunt două dintre punctele care definesc curba Bézier şi mai trebuie să aflăm un punct asfel încât să definim o curbă Bézier de ordinul doi, dar care să treacă prin &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru că &amp;lt;math&amp;gt;P_C&amp;lt;/math&amp;gt; se află pe curbă, înseamnă că satisface ecuaţia ei.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_C = P_1B_{0,2}(t_c) + P_2B_{1,2}(t_c) + P_3B_{2,2}(t_c)&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; este punctul pe care trebuie să-l aflăm. Ţinând cont că P_C este definit pentru un anumit &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt;, trebuie să-l aflăm pentru a putea afla &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; folosind doar ecuaţia liniară scrisă anterior.&lt;br /&gt;
&lt;br /&gt;
O metodă bună de a aproxima t-ul cunoscând un punct de pe curbă este printr-un raport al distanţelor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t_c = \frac{dist(P_1,P_C)}{dist(P_1,P_C)+dist(P_C,P_3)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;math&amp;gt;t_c&amp;lt;/math&amp;gt; putem scrie soluţia ecuaţiei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P_2 = \frac{P_C - P_1B_{0,2}(t_c) - P_3B_{2,2}(t_c)}{B_{1,2}(t_c)}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În continuare codul sursă Java care implementează interpolarea a trei puncte folosind o curbă Bézier de ordinul doi.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;import java.awt.geom.Point2D;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author cristi&lt;br /&gt;
 */&lt;br /&gt;
public class BezierUtils {&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Functia ia ca parametri trei puncte de pe curba si intoarce un array de &lt;br /&gt;
	 * trei elemente care sunt punctele pentru definirea curbei Bezier de ordinul&lt;br /&gt;
	 * doi care trece prin cele trei puncte (Interpolare).&lt;br /&gt;
	 * @param x0 Primul punct de pe curba&lt;br /&gt;
	 * @param x3 Al doilea punct de pe curba&lt;br /&gt;
	 * @param x2 Al treilea punct de pe curba&lt;br /&gt;
	 * @return Point2D.Float[]&lt;br /&gt;
	 */&lt;br /&gt;
	public static Point2D.Float[] getQuadInterpPoints(Point2D.Float x0, Point2D.Float x3, Point2D.Float x2) {&lt;br /&gt;
		Point2D.Float[] result = new Point2D.Float[3];&lt;br /&gt;
		result[0] = new Point2D.Float(x0.x, x0.y);&lt;br /&gt;
		result[2] = new Point2D.Float(x2.x, x2.y);&lt;br /&gt;
		result[1] = new Point2D.Float();&lt;br /&gt;
		double t = x0.distance(x3) / (x0.distance(x3) + x3.distance(x2));&lt;br /&gt;
		result[1].x = ((float)((x3.getX() - fq2(t)*x2.getX() - fq0(t)*x0.getX())/fq1(t)));&lt;br /&gt;
		result[1].y = ((float)((x3.getY() - fq2(t)*x2.getY() - fq0(t)*x0.getY())/fq1(t)));&lt;br /&gt;
		return result;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 0 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq0(double t) {&lt;br /&gt;
		return Math.pow((1-t), 2);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 1 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq1(double t) {&lt;br /&gt;
		return 2*t*(1-t);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	/**&lt;br /&gt;
	 * Polinomul Bernstein de indice 2 si ordin 2&lt;br /&gt;
	 * @param t&lt;br /&gt;
	 * @return&lt;br /&gt;
	 * 	returneaza valoarea polinomului Bernstein B_{k,n}(t) in t, k - indice, n - ordin&lt;br /&gt;
	 */&lt;br /&gt;
	private static double fq2(double t) {&lt;br /&gt;
		return Math.pow(t, 2);&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args) {&lt;br /&gt;
		Point2D.Float P1 = new Point2D.Float(10,10);&lt;br /&gt;
		Point2D.Float PC = new Point2D.Float(30,50);&lt;br /&gt;
		Point2D.Float P3 = new Point2D.Float(15,20);&lt;br /&gt;
		&lt;br /&gt;
		Point2D.Float bezPoints[] = getQuadInterpPoints(P1, PC, P3);&lt;br /&gt;
		System.out.println(&amp;quot;Curba Bezier este definita de:&amp;quot;);&lt;br /&gt;
		System.out.println(bezPoints[0]);&lt;br /&gt;
		System.out.println(bezPoints[1]);&lt;br /&gt;
		System.out.println(bezPoints[2]);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3113</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3113"/>
				<updated>2006-11-09T15:04:29Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,3}P_0 + B_{1,3}P_1 + B_{2,3}P_2 + B_{3,3}P_3 \iff&lt;br /&gt;
P(t) = (1-t)^{3}P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^{3}P_3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Scriem în funcţie de puterile lui t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = t^3(P_3 - 3P_2 + 3P_1 - P_0) + t^2(3P_2 - 6P_1 + 3P_0) + t(3P_1 - 3P_0) + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_3 - 3P_2 + 3P_1 - P_0 \\ B = 3P_2 - 6P_1 + 3P_0 \\ C = 3P_1 - 3P_0 \end{cases} \iff \begin{cases}A = P_3 - P_0 - B - C \\ B = 3(P_2 - P_1) - C \\ C = 3(P_1 - P_0)\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei în funcţie de A, B şi C: &amp;lt;math&amp;gt;P(t) = At^3 + Bt^2 + Ct+P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=User:Cbidea&amp;diff=3104</id>
		<title>User:Cbidea</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=User:Cbidea&amp;diff=3104"/>
				<updated>2006-11-08T16:10:31Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://cbidea.blogspot.com Blog]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3103</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3103"/>
				<updated>2006-11-08T15:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
Curba Bézier cubică sau de ordinul trei este dată prin patru puncte &amp;lt;math&amp;gt;P_0, P_1, P_2&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_4&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;P_1&amp;lt;/math&amp;gt; şi &amp;lt;math&amp;gt;P_2&amp;lt;/math&amp;gt; sunt puncte de control ale curbei.&lt;br /&gt;
&lt;br /&gt;
Pentru a putea scrie ecuaţia curbei scriem mai întâi ecuaţiile polinoamelor Bernstein de ordinul trei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,3} = (1-t)^{3} \\ B_{1,3} = 3t(1-t)^2 \\ B_{2,3} = 3t^2(1-t) \\ B_{3,3} = t^{3} \end{cases}&amp;lt;/math&amp;gt;.&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3085</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3085"/>
				<updated>2006-11-06T17:54:43Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ca şi proprietăţi ale curbei trebuie să subliniez următoarele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(0) = P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(1) = P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acest lucru poate fi uşor observat şi motivat cu ajutorul graficelor din figura 3.&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3076</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3076"/>
				<updated>2006-11-06T11:13:45Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Definirea unei curbe Bézier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul Bernstein de indice k şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3075</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3075"/>
				<updated>2006-11-06T11:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul de indice k, Bernstein şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumite documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;br /&gt;
&lt;br /&gt;
[[Category:Pending]]&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3072</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3072"/>
				<updated>2006-11-05T17:50:42Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Curba Bézier pătratică */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul de indice k, Bernstein şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumie documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases} \iff \begin{cases}A = P_2 - B - C \\ B = 2P_1 \\ C = P_0 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3071</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3071"/>
				<updated>2006-11-05T16:19:36Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Curba Bézier pătratică */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul de indice k, Bernstein şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul doi este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
Aceasta foloseşte polinoamele Bernstein de ordinul doi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^{2} \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia curbei este:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,2}P_0 + B_{1,2}P_1 + B_{2,2}P_2 \iff P(t) = (1-t)^{2}P_0 + 2t(1-t)P_1 + t^{2}P_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În anumie documente ecuaţiile sunt date în funcţie de puterile lui t, lucru care aduce confuzie, de aceea prezint în continuare şi această formă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = P_0 - P_0t^2 +2tP_1-2t^{2}P_1 + t^{2}P_2 \iff&lt;br /&gt;
P(t) = t^{2}(P_2 - P_0 - 2P_1) +t2P_1 + P_0&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se fac notaţiile:&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases}A = P_2 - 2P_1 - P_0 \\ B = 2P_1 \\ C = P_0\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Şi ecuaţia capătă următoarea formă: &amp;lt;math&amp;gt;P(t) = At^2 + Bt + C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3070</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3070"/>
				<updated>2006-11-05T16:02:16Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: /* Curba Bézier liniară */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul de indice k, Bernstein şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv această formă nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]]&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul 2 este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3069</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3069"/>
				<updated>2006-11-05T14:14:31Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
O curbă Bézier de ordinul n se defineşte, cu ajutorul a n puncte, după cum urmează:&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = \sum_{k=0}^N B_{k,N}*P_{k}&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;B_{k,N}&amp;lt;/math&amp;gt; este polinomul de indice k, Bernstein şi de ordin N. &amp;lt;math&amp;gt;P_{k}&amp;lt;/math&amp;gt; sunt puncte în plan, adică vectori cu două componente &amp;lt;math&amp;gt;(x_{k}, y_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier liniară===&lt;br /&gt;
Curba Bézier liniară este definită folosind polinoamele Bernstein de ordinul 1: &amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ecuaţia:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;P(t) = B_{0,1}P_{0} + B_{1,1}P_{1} \iff P(t) = (1-t)P_{0} + tP_{1}, t \in [0,1]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reprezentarea grafică este doar o linie şi din acest motiv nu este aproape deloc folosită.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]] &lt;br /&gt;
===Curba Bézier pătratică===&lt;br /&gt;
Curba Bézier pătratică sau de ordinul 2 este o curbă dată prin trei puncte, punctul din mijloc fiind un punct de control care nu se află pe curbă, dar care influenţează aspectul acesteia.&lt;br /&gt;
&lt;br /&gt;
===Curba Bézier cubică===&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3068</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3068"/>
				<updated>2006-11-05T13:22:25Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Introducerea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O curbă '''Bézier''' este o curbă parametrică inventată de inginerul francez [http://en.wikipedia.org/wiki/Pierre_B%C3%A9zier Pierre Bézier] şi făcută publică în anul 1962. Bézier a folosito în procesul de design al automobilelor.&lt;br /&gt;
Curbele Bézier sunt foarte importante şi pentru domeniul tehnologiei informaţiei, fiind folosite în construcţia fonturilor TrueType.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3067</id>
		<title>Curbe Bezier</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=Curbe_Bezier&amp;diff=3067"/>
				<updated>2006-11-05T13:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Bezier_0.jpg |thumb|300px| Fig. 1 - Graficul polinoamelor Bernstein de ordinul 0]] &lt;br /&gt;
[[Image:Bezier_1.jpg |thumb|300px| Fig. 2 - Graficul polinoamelor Bernstein de ordinul 1]] &lt;br /&gt;
&lt;br /&gt;
==Polinoame Bernstein==&lt;br /&gt;
Polinoamele '''Bernstein''' stau la baza curbelor '''Bézier'''. Acestea poartă numele matematicianului ucrainian [http://en.wikipedia.org/wiki/Sergei_Natanovich_Bernstein Sergei Natanovich Bernstein]. &lt;br /&gt;
&lt;br /&gt;
Pentru a determina polinoamele Bernstein de orice grad se porneşte de la polinomul Bernstein de ordinul zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apoi se scade din ambele părţi o varibilă t şi obţinem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1-t = 1-t \iff (1-t) + t = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ultima expresie este o combinaţie liniară a polinoamelor Bernstein de bază de ordinul unu. Polinoamele sunt: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{cases} B_{0,1} = 1-t \\ B_{1,1} = t\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acum putem obţine polinoame Bernstein de orice grad prin ridicarea la putere a ultimei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;((1-t) + t)^{2} = 1 \iff (1-t)^{2} + 2t(1-t) + t^2 = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obţinem astfel polinoamele Berstein de bază de ordinul doi: &amp;lt;math&amp;gt;\begin{cases}B_{0,2} = (1-t)^2 \\ B_{1,2} = 2t(1-t) \\ B_{2,2} = t^2 \end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
[[Image:Bezier_2.jpg |thumb|300px| Fig. 3 - Graficul polinoamelor Bernstein de ordinul 2]] &lt;br /&gt;
[[Image:Bezier_3.jpg |thumb|300px| Fig. 4 - Graficul polinoamelor Bernstein de ordinul 3]] &lt;br /&gt;
&lt;br /&gt;
Foarte interesante şi utile sunt graficele polinoamelor Bernstein, pentru înţelegerea modului în care &amp;quot;funcţionează&amp;quot; curbele Bézier.&lt;br /&gt;
&lt;br /&gt;
==Definirea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Desenarea unei curbe Bézier==&lt;br /&gt;
&lt;br /&gt;
==Probleme de interpolare folosind curbe Bézier==&lt;br /&gt;
===Interpolarea a trei puncte===&lt;br /&gt;
===Interpolarea a patru puncte===&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:Bezier_3.jpg&amp;diff=3066</id>
		<title>File:Bezier 3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:Bezier_3.jpg&amp;diff=3066"/>
				<updated>2006-11-05T12:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Polinoame Bernstein de ordinul 3 puse in grafic cu GNUPlot.

plot [t=0:1] (1-t)**3, 3*t**2*(1-t), 3*t*(1-t)**2, t**3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polinoame Bernstein de ordinul 3 puse in grafic cu GNUPlot.&lt;br /&gt;
&lt;br /&gt;
plot [t=0:1] (1-t)**3, 3*t**2*(1-t), 3*t*(1-t)**2, t**3&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:Bezier_2.jpg&amp;diff=3065</id>
		<title>File:Bezier 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:Bezier_2.jpg&amp;diff=3065"/>
				<updated>2006-11-05T12:49:46Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Polinoame Bernstein de ordinul 2 puse in grafic cu GNUPlot.

plot [t=0:1] (1-t)**2, 2*t*(1-t), t**2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polinoame Bernstein de ordinul 2 puse in grafic cu GNUPlot.&lt;br /&gt;
&lt;br /&gt;
plot [t=0:1] (1-t)**2, 2*t*(1-t), t**2&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:Bezier_1.jpg&amp;diff=3064</id>
		<title>File:Bezier 1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:Bezier_1.jpg&amp;diff=3064"/>
				<updated>2006-11-05T12:48:14Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Polinoame Bernstein de ordinul 1 puse in grafic cu GNUPlot.

plot [t=0:1] (1-t), t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polinoame Bernstein de ordinul 1 puse in grafic cu GNUPlot.&lt;br /&gt;
&lt;br /&gt;
plot [t=0:1] (1-t), t&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	<entry>
		<id>http://wiki.linux360.ro/index.php?title=File:Bezier_0.jpg&amp;diff=3063</id>
		<title>File:Bezier 0.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.linux360.ro/index.php?title=File:Bezier_0.jpg&amp;diff=3063"/>
				<updated>2006-11-05T12:47:07Z</updated>
		
		<summary type="html">&lt;p&gt;Cbidea: Polinoame Bernestein de ordinul 0 puse in grafic cu GNUPlot.

plot [t=0:1] 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Polinoame Bernestein de ordinul 0 puse in grafic cu GNUPlot.&lt;br /&gt;
&lt;br /&gt;
plot [t=0:1] 1&lt;/div&gt;</summary>
		<author><name>Cbidea</name></author>	</entry>

	</feed>