Programmierung

 

Backstage

Die Mathematik ist die Sprache der Physik. Aufgrund dieser Elementarität ist die Mathematik die reinste Naturwissenschaft.

Die hier vorgestellten Polyeder werden im dreidimensionalen Raum R³ gedreht. Das Handwerkzeugs hierfür sind Vektoren und Drehmatrizen. Der Rahmen wird durch die Programmiersprache Javascript bereitgestellt.

Dem Betrachter möchte ich hiermit einen kleinen Einblick geben, wie die vorangegangenen Webseiten erschaffen worden sind.

Mathematik

Handwerk

Bei der Programmierung der vorangegangenen Webseiten sieht man, wie die Mathematik arbeitet. Beim Radarplotten sehen wir Drehungen in der Ebene. Hier betreten wir nun den dreidimensionalen Raum.

Matrizen sind bzgl. der Multiplikation nicht kommuntativ sind, d.h. die Matrix A und B sind nicht vertauschbar: AB != BA

Dies hat zur Folge, dass die Polyeder zuerst horizontal gedreht werden, bevor man sie kippt.

Drehungen

Für die Drehung einer Ecke v(x,y,z)
eines Polyeders gilt:

Horizontale und vertikale Drehungen


Orthogonale Basis

Von all unseren Drehungen erwarten wir, dass Abstände und Winkel erhalten bleiben. Mathematisch heißt das, dass die Drehmatrizen orthogonal sein müssen:

|D(φ)| = cos²φ + sin²φ = 1

Beim letzten Rechenschritt nutzen wir den Pythagoras im Einheitskreis.

Programmierung

Vektoren

Das Ästhetische bei Programmiersprachen ist die Definition von sogen. Klassen.

Beispiel:
Ein Vektor v(x,y,z) mit x-, y- und z-Koordinaten:

function Vektor( x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}

Drehmatrix D(φ) dreht Vektor v

Gedrehter Vektor vgedreht = D(φv

function Drehung( v, winkel_grad) {
// Umwandlung von Grad ins Bogenmass:
var winkel_rad = Math.PI*winkel_grad/180;
var x = v.x * Math.cos( winkel_rad);
var y = v.y * Math.sin( winkel_rad);
var z = v.z;
var v_gedreht = new Vektor( x, y, z);
return v_gedreht;
}

Realisierung

Definition und Drehung eines Quadrats:

var KL = 30; // Kantenlaenge
var ecken = [
new Vektor( +KL/2, +KL/2, 0),
new Vektor( −KL/2, +KL/2, 0),
new Vektor( −KL/2, −KL/2, 0),
new Vektor( +KL/2, −KL/2, 0),
];
var φ = 10;
for(var i=0; i<ecken.length; i++) {
ecken[i] = Drehung( ecken[i], φ);
}

Showeffekte

Normalenvektor

Wird ein Polyeder gedreht, fragt man sich sofort, ob man die Außen- oder die Innenseite der Flächen sieht. Im letzteren Fall wird die unsichtbare Fläche erst gar nicht dargestellt. Bei transparenten Polyedern werden die Kanten schwächer gezeichnet. Dies verstärkt die dreidimensionale Erscheinung.

Die Lösung zur Unterscheidbarkeit besteht nun darin, dass man zu jeder Fläche einen Normalenvektor berechnet. Dieser steht senkrecht auf der Fläche und zeigt stets nach außen.

Zeigt der Normalvektor aus dem Bildschirm heraus, ist nach obiger Definitionen die x-Komponente positiv. In diesem Fall ist die Fläche sichtbar.

Vektorrechnung

Es gibt zwei verschiedene Arten, zwei Vektoren miteinander zu multiplizieren. Während das Skalarprodukt eine reelle Zahl ergibt, liefert das Kreuzprodukt wieder einen Vektor:

Skalarprodukt und Kreuzprodukt


Orientierung

Der Normalenvektor als Kreuzprodukt benötigt zwei Basisvektoren. Hierzu nimmt man Vektoren, die aus den Ecken erzeugt werden. Um einen dieser Kantenvektoren zu erhalten, subtrahiert man entsprechende Ecken vektoriell.

Wichtig dabei ist, dass alle Flächen einen gleichen Drehsinn haben. Es bietet sich an, alle Ecken immer im mathematisch positiven Drehsinn zu nummerieren, also entgegengesetzt des Uhrzeigersinns.

www.harald-blazy.de/
platonische-koerper/
programmierung.html

Sitemap  •  Datenschutz  •  Impressum
© Harald Blazy