Bézierkromme van de derde orde berekenen
In het item Over Bézier-krommen wordt in algemene termen uit de doeken gedaan hoe zo'n kromme wordt berekend. Op deze pagina wordt dit uitgewerkt: we gaan een Bézier-kromme van de derde orde berekenen.
Dit is een lastig te doorgronden berekening. Als je dit snel wilt doorgronden neem je het beste eerst kennis van het item Bézierkromme van de tweede orde berekenen. Daar wordt een tweede orde Bézierkromme uitgewerkt, die is eenvoudiger om te begrijpen.
- De punten en de lijnen
- We gaan uit van vier punten, P0 = (0,0), P1 = (3,9), P2 = (7,3) en P3 = (9,9).
- De punten P0 en P1 zijn het begin- en eindpunt van het lijnstuk L1. De punten P1 en P2 zijn het begin- en eindpunt van het lijnstuk L2. De punten P2 en P3 zijn het begin- en eindpunt van het lijnstuk L3. Zie de illustratie hiernaast.
- De vectorvoorstellingen van de lijnen zijn:
L1: (0,0) + t·(3,9)
L2: (3,9) + t·(4,-6)
L3: (7,3) + t·(2,6)
Merk op dat de parameter bij de richtingsvector,t
bij alledrie de vectorvoorstellingen gelijk is.
-
De parameter
t
gaat nu lopen van 0 naar 1: Op het lijnstuk L1 vanaf P0 naar P1, op het lijnstuk L2 vanaf P1 naar P2, op het lijnstuk L3 vanaf P2 naar P3. Dit gebeurt in gelijke stappen. De stapgrootte wordt kleiner naarmate de gewenste nauwkeurigheid groter is. In het voorbeeld is de stapgrootte 0.1, om een en ander een beetje overzichtelijk te houden. In de praktijk reken je tenminste met 0.01, maar vaak kleiner. - Bij elke stap wordt op de drie lijnen een punt bepaald, op afstand
t·L'
, waarbijL'
de lengte van het betreffende lijnstuk is. - Tussen de zo gevonden (drie) punten worden de lijnstukken M1(t) resp. M2(t) getrokken. Op elk van die lijnen
wordt weer een punt bepaald, op afstand
t·M'
, waarbijM'
de lengte van het betreffende lijnstuk is. - Tussen de punten op de lijnen M1(t) en M2(t) wordt een lijn getrokken, L(t).
- Op de lijn L(t) wordt een punt Q(t) bepaald dat ligt op afstand
t·L"
, waarbijL"
de lengte van L(t) is. - De achtereenvolgende punten Q(t) vormen de Bézier-kromme.
Een manier om dat inzichtelijk te maken is met tabellen, zie hieronder. Allereerst worden de punten op de lijnen L1, L2 en L3 bepaald. Daaruit volgen de vectorvoorstellingen van de lijnen M1 en M2. Daarna volgen de punten op M1 en M2, waaruit de vectorvoorstellingen van de lijnen L volgen. Tenslotte worden de punten Q(t) bepaald, die de kromme vormen. - De getallen in de tabellen kunnen afgerond zijn op één of twee decimalen, vooral in de laatste tabel.
Punten P0(t), P1(t) en P2(t) |
||||||||||||
t | P0(t),x | P0(t),y | P1(t),x
| P1(t),y | P2(t),x | P2(t),y | P3(t),x | P3(t),y |
||||
0.0 | 0.0 | 0.0 | 3.0 | 9.0 | 7.0 | 3.0 |
7.0 | 3.0 |
||||
0.1 | 0.3 | 0.9 | 3.4 | 8.4 | 7.2 | 3.6 |
7.2 | 3.6 |
||||
0.2 | 0.6 | 1.8 | 3.8 | 7.8 | 7.4 | 4.2 |
7.4 | 4.2 |
||||
0.3 | 0.9 | 2.7 | 4.2 | 7.2 | 7.6 | 4.8 |
7.6 | 4.8 |
||||
0.4 | 1.2 | 3.6 | 4.6 | 6.6 | 7.8 | 5.4 |
7.8 | 5.4 |
||||
0.5 | 1.5 | 4.5 | 5.0 | 6.0 | 8.0 | 6.0 |
8.0 | 6.0 |
||||
0.6 | 1.8 | 5.4 | 5.4 | 5.4 | 8.2 | 6.6 |
8.2 | 6.6 |
||||
0.7 | 2.1 | 6.3 | 5.8 | 4.8 | 8.4 | 7.2 |
8.4 | 7.2 |
||||
0.8 | 2.4 | 7.2 | 6.2 | 4.2 | 8.6 | 7.8 |
8.6 | 7.8 |
||||
0.9 | 2.7 | 8.1 | 6.6 | 3.6 | 8.8 | 8.4 |
8.8 | 8.4 |
||||
1.0 | 3.0 | 9.0 | 7.0 | 3.0 | 9.0 | 9.0 |
9.0 | 9.0 |
- De plaatsvectoren van de lijnen M1(t) zijn de punten P0(t). De richtingsvectoren van deze lijnen zijn P1(t) - P0(t).
- De plaatsvectoren van de lijnen M2(t) zijn de punten P1(t). De richtingsvectoren van deze lijnen zijn P2(t) - P1(t).
- Onderstaande tabel toont de richtingsvectoren van M1(t) en M2(t), aangeduid als rM1(t) en rM2(t). Ook staan daar de punten op de lijnen M1(t) en M2(t), aangeduid als pM1(t) en pM2(t).
Richtingsvectoren van, en punten op, de lijnen M1(t) en M2(t) |
||||||||||||
t | rM1(t),x | rM1(t),y | rM2(t),x | rM2(t),y | pM1(t),x | pM1(t),y |
pM2(t),x | pM2(t),y |
||||
0.0 | 3.0 | 9.0 | 4.0 | -6.0 | 0.0 | 0.0 |
3.0 | 9.0 |
||||
0.1 | 3.1 | 7.5 | 3.8 | -4.8 | 0.6 | 1.7 |
3.8 | 7.9 |
||||
0.2 | 3.2 | 6.0 | 3.6 | -3.6 | 1.2 | 3.0 |
4.5 | 7.1 |
||||
0.3 | 3.3 | 4.5 | 3.4 | -2.4 | 1.9 | 4.1 |
5.2 | 6.5 |
||||
0.4 | 3.4 | 3.0 | 3.2 | -1.2 | 2.6 | 4.8 |
5.9 | 6.1 |
||||
0.5 | 3.5 | 1.5 | 2.0 | 0.0 | 3.3 | 5.3 |
6.5 | 6.0 |
||||
0.6 | 3.6 | 0.0 | 2.8 | 1.2 | 4.0 | 5.4 |
7.1 | 6.1 |
||||
0.7 | 3.7 | -1.5 | 2.6 | 2.4 | 4.7 | 5.3 |
7.6 | 6.5 |
||||
0.8 | 3.8 | -3.0 | 2.4 | 3.6 | 5.4 | 4.8 |
8.1 | 7.1 |
||||
0.9 | 3.9 | -4.5 | 2.2 | 4.8 | 6.2 | 4.1 |
8.6 | 7.9 |
||||
1.0 | 4.0 | -6.0 | 2.0 | 6.0 | 7.0 | 3.0 |
9.0 | 9.0 |
- De plaatsvectoren van de lijnen L(t) zijn de punten M1(t). De richtingsvectoren van deze lijnen zijn pM2(t) - pM1(t).
- Onderstaande tabel toont de richtingsvectoren van L(t), aangeduid als rL(t). Ook staan daar de punten op de lijn L(t), aangeduid als Q(t), die de Bézierkromme beschrijven.
Richtingsvectoren van, en punten Q(t) op, de lijnen L(t) |
||||||||||||
t | rL(t),x | rL(t),y | Q(t),x | Q(t),y
| ||||||||
0.0 | 3.0 | 9.0 | 0.00 | 0.00 |
||||||||
0.1 | 3.2 | 6.3 | 0.93 | 2.28 |
||||||||
0.2 | 3.3 | 4.1 | 1.90 | 3.88 |
||||||||
0.3 | 3.3 | 2.4 | 2.89 | 4.78 |
||||||||
0.4 | 3.3 | 1.3 | 3.89 | 5.33 |
||||||||
0.5 | 3.3 | 0.8 | 4.88 | 5.63 |
||||||||
0.6 | 3.1 | 0.7 | 5.83 | 5.83 |
||||||||
0.7 | 2.9 | 1.2 | 6.74 | 6.11 |
||||||||
0.8 | 2.7 | 2.3 | 7.58 | 6.62 |
||||||||
0.9 | 2.4 | 3.9 | 8.34 | 7.55 |
||||||||
1.0 | 2.0 | 6.0 | 9.00 | 9.00 |
- De figuur hieronder toont de punten Q als functie van t. De kromme is nogal hoekig, door de relatief grote stapgrootte.