I/T5 - WS 04/05 CR – Übung 7 Termin: 17.-21.12.04
Modellierung eines Schaukelpferdes mit parametrischen Splines und linearer Ausgleichs- rechnung
Die Graphik zeigt den Entwurf eines Schaukelpferdes. Der Körper des Pferdes soll mit Hilfe von parametrischen Splines modelliert werden. Dazu sind die hervorgehobenen Knotenpunkte (ohne die Kufen!) graphisch zu erfassen und zwar folgendermaßen:
An einem Computer im Raum 512 (vorne rechts) ist ein kleines Digitalisiertablett angeschlos- sen, mit dem Sie punktweise Koordinaten einer Zeichnung abgreifen und tabellarisch in einer Textdatei speichern können. Den notwendigen Griffel zur Datenerfassung erhalten Sie leih- weise im Raum 520. Das zugehörige Programm punkte.bat finden Sie auf dem K-
Laufwerk im Ordner WR. Die obige Skizze wird unter die Schutzfolie gelegt und die markier- ten Punkte werden – beginnend mit dem Auge – reihum abgegriffen und in einer Datei na- mens xy.pt in Ihrem Arbeitsverzeichnis gespeichert.
(Ersatzlösung für Heimarbeiter, die kein Digitalisiertablett haben: Graphik einscannen, als Datei pferd.jpg speichern. Mit dem Matlab-Programm punkte.m aus des Lösungsordner können die Punkte abgegriffen und in xy.pt gespeichert werden.)
Das Pferd wird mit parametrischen Splines gezeichnet, in einem 20-fach feineren Raster. Die Kufen sind durch lineare Ausgleichsrechnung zu erzeugen. Dazu wird der optimale Kreisbo- gen durch die 6 Punkte in den Hufen des Pferdes ermittelt (d.h. sein Mittelpunkt ( ,x y0 0) und Radius r0). Der Sektor für die Kufen ergibt sich aus dem Winkel ϕ zwischen dem linken Huf, dem Kreismittelpunkt ( ,x y0 0) und rechten Huf, zuzüglich 20%. Der untere Rand der Kufe entsteht einfach durch Vergrößerung des Radius r0 um 10%.
Soweit der Plan zum Programm. Jetzt kommt die Theorie dazu.
1. Formeln und Vorgehensweise zur Kreisberechnung:
Für die 6 Huf-Punkte (x yn, n) soll die Kreisgleichung: (xn −x0)2+(yn−y0)2 =r02 gelten, die nur die 3 Unbekannten x y r0, 0, 0 enthält, die leider nicht linear vorkommen. Nach Ausmultip- lizieren der Klammern wird die Gleichung umsortiert zu
2 2 2 2 2
0 0 0 0 0
2x xn +2y yn −x −y +r =xn +yn
Führt man z=r02−x02−y02 als neue Variable ein, so entsteht die „linearisierte“ Gleichung
2
0 0
2x xn +2y yn + =z xn +yn2 (1) für die neuen Unbekannten x y z0, 0, . Setzt man hierin der Reihe nach alle 6 Huf-Punkte ein, so entsteht ein überbestimmtes System Bx = c aus 6 Gleichungen für die 3 Unbekannten. Aus seiner Näherungslösung ergibt sich schließlich r0 = z+x02+y02 . Damit sind Kreismittel- punkt ( ,x y0 0) und innerer Kufenradius r0 bekannt, s. Skizze unten. Der Radius r1 des äuße- ren Kufenrands ergibt sich durch Vergrößern von r0 um 10%.
2. Konstruktion der Kufen durch Rastern des Winkelbereichs
Die 6 Huf-Punkte ( ,x yn n) werden jetzt in Polarkoordinaten ( ,rn ϕn) um den Kreismittelpunkt
0 0
( ,x y ) umgerechnet und nach Winkeln ϕn sortiert. Dabei ist 0
0
arctan n
n
n
y y x x
ϕ = ⎛⎜⎝ −− ⎞⎠⎟. (2)
0 0
( ,x y )
Nach der Sortierung liegt der Sektor der Hufe im Intervall
[
ϕ ϕ1, 6]
. Um die Kufen (in der Skizze ganz unten) rechts und links etwas überstehen zu lassen, geben wir auf beiden Seiten 20% dazu, d.h. mit h=(
ϕ ϕ6− 1)
⋅0, 2 entsteht der „Kufensektor“[
ϕ1−h,ϕ6+h]
, den wir für die Zeichnung mit 50 Rasterpunkten ψm belegen wollen. Die Kufen selbst bestehen aus ei- nem inneren Rand aus Punkten(
xm,ym) (
= x0+r0cos(ψm),y0+r0sin(ψm))
verbunden mit einem äußeren Rand aus Punkten(
xm,ym) (
= x0+r1cos(ψm),y0+r1sin(ψm))
.Das Pferd kann nun gezeichnet und animiert werden.
3. Animation mit Schaukelbewegung (optional, nur für Spezialisten)
Für die Animation sind Auflagepunkte am Boden zu errechnen, die sich durch die Schaukel- bewegung ergeben. Gesucht wird zunächst der Auflagepunkt
(
x yl, l)
der Kufen in Nulllage, das ist der weiße Punkt im Bild ganz unten. Bei der Schaukelbewegung bildet dieser Punkt über den Mittelpunkt ( ,x y0 0) zum neuen Auflagepunkt(
x yk, k)
einen Winkel α, der aus den Zeilenvektoren a=[
xl −x y0, l −y0]
und b=[
xk−x y0, k−y0]
berechnet werden kann über dieϕ1
ϕ6
Huf- Punkte Huf-
Punkte
0 0
( ,x y )
ϕ1
ϕ6
Radius r0
Äußerer Kufenrand, Radius r1
Formel cos( ) a b' α = a b⋅
⋅ . Aus α entsteht mit s=sin( )α , c=cos( )α die Rotationsmatrix
A c s
s c
⎡ ⎤
= ⎢⎣− ⎦⎥. Jeder Bildpunkt P=( , )x y ist mit Hilfe dieser Matrix um den Kreismittelpunkt
0 ( ,0 0)
P = x y zu rotieren und um die Bogenlänge r1α horizontal zu verschieben. Der durch die Rotation entstehende Punkt ist P'= ⋅A (P−P0)+P0. Seine x-Koordinate wird anschließend verschoben durch x'= +x r1α. Für die Animation werden in einer Schleife alle Bildpunkte so umgerechnet und gezeichnet.
Im einzelnen soll Ihr Programm folgendes leisten
• Einlesen der Bildpunkte aus der Datei xy.pt mit load. Speichern Sie die xy-Koordinaten in 2 Spaltenvektoren u,v. Entfernen Sie den 1. Punkt (das Auge) aus u,v und speichern Sie seine Koordinaten in einem Vektor e. Fügen Sie den letzten Bildpunkt an erster Stelle in u,v ein, damit die Kurve geschlossen ist.
• Erzeugen Sie 2 parametrische Splines U,V durch die Knoten u,v mit 20-fach feinerem Raster.
• Sortieren Sie mit sortrows die Matrix [u,v] nach der 2. Spalte v und speichern Sie die ers- ten 6 Zeilen in zwei Spaltenvektoren x,y. (Das sind die 6 Huf-Punkte.)
• Stellen Sie mit Hilfe der oben angegebenen Formel (1) ein überbestimmtes lineares Glei- chungssystem Bw= c zur Berechnung von w=[ ,x y z0 0, ]' auf, lösen Sie es und berech- nen Sie die Kufenradien r0 sowie r1=1,1⋅r0.
• Verwenden Sie atan2, um die Winkel ϕ aller 6 Huf-Punkte zu berechnen und in einem Spaltenvektor phi zu speichern.
• Nach Sortieren von phi, ist der Huf-Sektor
[
ϕ ϕ1, 6]
. Mit h=(
ϕ ϕ6− 1)
⋅0, 2 wird der Ku- fensektor[
ϕ1−h,ϕ6+h]
. Rastern Sie diesen Sektor mit linspace in 50 Punkte ψm, die im Zeilenvektor psi gespeichert werden.• Erzeugen Sie aus diesen Rasterpunkten den Kufen-Umriss als geschlossene Kurve in x,y- Koordinaten, die in 2 Zeilenvektoren X,Y gespeichert werden. Umrechnungsformeln:
0 cos( ), 0 sin( )
x=x +r ψ y=y +r ψ . Für den inneren Kufenrand gilt r =r0, außen ist r =r1.
• Bestimmen Sie mit find den Index l des Rasterpunktes aus X,Y, der dem skizzierten Auf- lagepunkt o am nächsten kommt. Yl ist die Höhe der Nulllinie, d.h. der Boden, auf dem das Pferd steht.
• Die Gesamthöhe H des Schaukelpferdes ist zu ermitteln, ebenso die Kufenlänge . Damit ist
[
(
1 max min
K =r ψ −ψ
)
Xl−K X, l +K] [
× Yl−0.1 ,H Yl+1.3H]
ein sinnvoller Bildausschnitt. Zeichnen Sie die Nulllinie und legen Sie mit den axis-Befehlen gleiche und unsichtbare Achsen sowie den angegebenen Bildausschnitt fest.• Zeichnen Sie ins vorhandene Bild mit patch und den Spline-Punkten U,V das Pferd weiß als Schimmel, mit patch und den Punkten X,Y die Kufen rot, mit plot und e das Auge als schwarzen Kreis mit blauem Punkt.
• Zur Animation werden der Reihe nach alle Kufenpunkte