BannerBannerBanner

Glatte Kurven durch Stützstellen

Javascript Version dieses Beispiels»

Obwohl Lineare Algebra sich im Wesentlichen mit geradlinigen Objekten befasst, kann sie auch dazu benutzt werden, nicht-geradlinige Kurven durch eine gegebene Menge von Stützstellen zu legen. Im folgenden Beispiel wird eine Kurve aus stückweise kubischen Kurven-Stücken durch vier Stützpunkte gelegt. Die einzelnen Kurvenstücke werden hierbei sogar glatt aneinander angesetzt. Weiterhin sind die Randsteigungen anpassbar.

Bitte schalten Sie Java ein, um eine Cinderella-Konstruktion zu sehen.

Das Problem des Auffindens der Kurvenparameter kann komplett auf das Lösen eines linearen Gleichungssystems zurückgeführt werden. Sind $a_3x^3+a_2x^2+a_1x+a_0$, $b_3x^3+b_2x^2+b_1x+b_0$ und $c_3x^3+c_2x^2+c_1x+c_0$ die Gleichungen der drei Kurvenstücke, so ergibt sich für die Stützstellen 1,2,3,4 das folgende zu lösende Gleichungssystem:

\[ \left(\begin{array}{cccccccccccccccccc} 1&1&1&1&0&0&0&0&0&0&0&0\\ 8&4&2&1&0&0&0&0&0&0&0&0\\ 0&0&0&0&8&4&2&1&0&0&0&0\\ 0&0&0&0&27&9&3&1&0&0&0&0\\ 0&0&0&0&0&0&0&0&27&9&3&1\\ 0&0&0&0&0&0&0&0&64&16&4&1\\ 3&2&1&0&0&0&0&0&0&0&0&0\\ 12&4&1&0&-12&-4&-1&0&0&0&0&0\\ 0&0&0&0&27&6&1&0&-27&-6&-1&0\\ 0&0&0&0&0&0&0&0&48&8&1&0\\ 12&2&0&0&-12&-2&0&0&0&0&0&0\\ 0&0&0&0&18&2&0&0&-18&-2&0&0\\ \end{array}\right) \cdot \left(\begin{array}{cccccccccccccccccc} a_3\\ a_2\\ a_1\\ a_0\\ b_3\\ b_2\\ b_1\\ b_0\\ c_3\\ c_2\\ c_1\\ c_0\\ \end{array}\right) = \left(\begin{array}{cccccccccccccccccc} y_1\\ y_2\\ y_2\\ y_3\\ y_3\\ y_4\\ h_1\\ 0\\ 0\\ h_2\\ 0\\ 0\\ \end{array}\right) \]

Der komplette Programmcode für feste Stützstellen 1,2,3,4 ist im Folgenden angegeben.

A.x=1;
B.x=2;
C.x=3;
D.x=4;

h1=(E-A).y/(E-A).x;
h2=(F-D).y/(F-D).x;


m=[
[1,1,1,1,0,0,0,0,0,0,0,0],
[8,4,2,1,0,0,0,0,0,0,0,0],
[0,0,0,0,8,4,2,1,0,0,0,0], 
[0,0,0,0,27,9,3,1,0,0,0,0],
[0,0,0,0,0,0,0,0,27,9,3,1],
[0,0,0,0,0,0,0,0,64,16,4,1],
[3,2,1,0,0,0,0,0,0,0,0,0],
[12,4,1,0,-12,-4,-1,0,0,0,0,0],
[0,0,0,0,27,6,1,0,-27,-6,-1,0], 
[0,0,0,0,0,0,0,0,48,8,1,0],
[12,2,0,0,-12,-2,0,0,0,0,0,0],
[0,0,0,0,18,2,0,0,-18,-2,0,0]
];

v=[A.y,B.y,B.y,C.y,C.y,D.y,h1,0,0,h2,0,0];
a=Linearsolve[m,v];

plot[x^3*a_1+x^2*a_2+x*a_3+a_4,start->1,stop->2];
plot[x^3*a_5+x^2*a_6+x*a_7+a_8,start->2,stop->3];
plot[x^3*a_9+x^2*a_10+x*a_11+a_12,start->3,stop->4];


Dateidownload unter