1. Die Gleichung einer Ebene im 3-dimensionalen Raum


1.1. Definition mit Hilfe eines Normalenvektors und eines Punktes

Eine Ebene im 3-dimensionalen Raum kann durch den Normalenvektor und irgendeinen in der Ebenen liegenden Punkt eindeutig definiert werden. (Der Normalenvektor allein würde nicht reichen, da die Ebene in Richtung der Normale beliebig verschoben werden könnte.)


Sei \(\vec{r_0}\) der in der Ebene liegende Punkt und \(\vec{n}\) der Normalenvektor. Dann gilt für alle Punkte \(\vec{r}\) der Ebene

\[ \vec{n} \cdot \left( \vec{r} - \vec{r_0} \right) = 0 \] da der Normalenvektor senkrecht auf dem Verbindungsvektor zwischen \(\vec{r}\) und \(\vec{r_0}\) liegen muss und letzterer in der Ebene liegt. Mit den Bezeichnungen \(\vec{r_0} = (x_0, y_0, z_0)\), \(\vec{r} = (x, y, z)\) und \(\vec{n} = (a, b, c)\) wird die obige Gleichung in Koordinatenschrweibweise

\[ a \cdot (x - x_0) + b \cdot (y - y_0) + c \cdot (z - z_0) = 0 \] Für die letzte Gleichung kann man auch

\[ a \cdot x + b \cdot y + c \cdot z = d \] schreiben, wenn die Abkürzung \(d = -(a \cdot x_0 + b \cdot y_0 + c \cdot z_0 )\) benutzt wird. Mehr in diesem Wikipedia-Eintrag.


1.2. Definition mit Hilfe von 2 Basisvektoren und eines Punktes

Eine Alternative ist die Definition der Ebene mit Hilfe von 2 linear unabhängigen (also nicht parallelen) Basisvektoren \(\vec{u}\) und \(\vec{v}\) sowie deren gemeinsamen Ursprung \(\vec{r_0}\). Die Vektoren spannen gewissermaßen die Ebene auf. Die Vektoren werden praktischerweise oft orthogonal sein, meistens werden diese auch auf den Betrag 1 normiert. Beides ist jedoch nicht Bedingung.

Die Gleichung für einen beliebigen Vektor in der Ebene lautet dann:

\[ \vec{r} = \vec{r_0} + s \cdot \vec{u} + t \cdot \vec{v} \]

Die Parameter \(s\) und \(t\) sind beliebige reelle Zahlen.

Siehe auch diesen Wikipedia-Eintrag.


2. Projektion eines Punktes im 3D auf eine Ebene

Sei der Punkt \(\vec{r_1} = (x_1, y_1, z_1)\) die Projection irgend eines Punktes \(\vec{r} = (x, y, z)\) auf die Ebene. Da \(\vec{r_1}\) in der Ebene liegt, muss er die Gleichung

\[ a \cdot x_1 + b \cdot y_1 + c \cdot z_1 = d \hspace{2cm} (1) \] erfüllen. Der Verbindungsvektor zwischen dem Originalpunkt \(\vec{r}\) und dem projizierten Punkt \(\vec{r_1}\) muss nun parallel zum Normalenvektor liegen, denn die Projektion ist ja das senkrechte “Lot” auf die Ebene, siehe Abbildung:

Wir haben also:

\[ ( \vec{r_1} -\vec{r} ) = k \cdot \vec{n} \] mit irgendeinem noch unbekannten reellen Faktor \(k\). In Koordinatenschreibweise lautet die letzte Gleichung:

\[ \begin{align*} x_1 - x &= k \cdot a \\ y_1 - y &= k \cdot b \\ z_1 - z &= k \cdot c \hspace{2cm} \text{(2)} \end{align*} \]

oder

\[ \begin{align*} x_1 &= x + k \cdot a \\ y_1 &= y + k \cdot b \\ z_1 &= z + k \cdot c \hspace{2cm} \text{(3)} \end{align*} \]

Wenn wir dies in Gleichung (1) einsetzen, können wir \(k\) bestimmen:

\[ a \cdot (x + k \cdot a) + b \cdot (y + k \cdot b) + c \cdot ( z + k \cdot c) = d \] \[ a \cdot x + b \cdot y + c \cdot z = d - k \cdot \left( a^2 + b^2 + c^2 \right) \] \[ k = \frac{d - a \cdot x - b \cdot y - c \cdot z }{\left( a^2 + b^2 + c^2 \right)} \hspace{2cm} \text{(4)} \] Alle Größen auf der rechten Seite sind bekannt: \(a\), \(b\), \(c\) und \(d\) sind die Ebenen-Parameter; der Punkt \((x, y, z)\) ist der zu projizierende Punkt im 3-dimensionalen Raum. Die Zahlen \((a, b, c)\) sind die Koordinaten des Normalenvektors, denn wir hatten \(\vec{n} = (a, b, c)\). Ist dieser Vektor auf die Länge \(1\) normiert, wird der Nenner in obiger Gleichung ebenfalls \(1\).

Da nun \(k\) bekannt ist, können wir mit Hilfe von (3) die Koordinaten des projizierten Punktes berechnen.


3. Die Lage des projizierten Punktes im Koordinatensystem der Ebene

Gleichung (3) zusammen mit Gleichung (4) gibt die Lage des projizierten Punktes im 3-dimensionalen Koordinatensystem an. Es kann aber auch notwendig sein, die Koordinaten im System der Basisvektoren \(\vec{u}\) und \(\vec{v}\) der Ebene zu finden, wie in Abschnitt 1.2. beschrieben. Der Einfachheit nehmen wir an, dass der Ursprung der Basisvektoren als Punkt \((0, 0)\) definiert wird. Außerdem setzen wir voraus, dass die Basisvektoren \(\vec{u}\) und \(\vec{v}\) auf die Länge \(1\) normiert sind. Der Vektor \(\vec{r_1}\) ist der auf die Ebene projizierte Vektor in 3D-Koordinaten. Sei \(\vec{r^{\prime}_1}\) der gleiche Vektor im Koordinatensysten der Ebene: \(\vec{r^{\prime}_1} = (x^{\prime}, y^{\prime})\). In der folgenden Abbildung ist nur die Ebene dargestellt:

Wir erhalten die Kordinaten \((x^{\prime}, y^{\prime})\) in der Ebene durch:

\[ \begin{align*} x^{\prime} &= \vec{u} \cdot \vec{r_1} \\ y^{\prime} &= \vec{v} \cdot \vec{r_1} \hspace{2cm} \text{(5)} \end{align*} \] Dies sehen wir durch folgende Überlegungen (und mit Hilfe der obigen Skizze):

\[ \vec{u} \cdot \vec{r_1} = \lvert \vec{u} \lvert \cdot \lvert \vec{r_1}\lvert \cdot \cos{(\vec{u}, \vec{r_1})} =\lvert \vec{r_1}\lvert \cdot \cos{(\vec{u}, \vec{r_1})} = x^{\prime} \] und

\[ \vec{v} \cdot \vec{r_1} = \lvert \vec{v} \lvert \cdot \lvert \vec{r_1}\lvert \cdot \cos{(\vec{v}, \vec{r_1})} =\lvert \vec{r_1}\lvert \cdot \cos{(\vec{v}, \vec{r_1})} = y^{\prime} \]


4. Beispiel

Wir nehmen an, dass eine Ebene wie in Abschnitt 1.2. beschrieben durch 2 Basisvektoren definiert wird, dessen gemeinsamer Ursprung der Punkt \((0,0,0)\) ist, z.B.

\[ \begin{align*} \vec{u} &= \left( u_1, u_2, u_3 \right) = \left( 1, 0, 0 \right) \\[8pt] \vec{v} &= \left( v_1, v_2, v_3 \right) = \left( 0, 1, 0 \right) \hspace{2cm} \text{(6)} \end{align*} \]

Das Skalarprodukt \(\vec{u} \cdot \vec{v}\) ist Null, die Vektoren stehen also senkrecht aufeinander. Außerdem haben beide Basisvektoren die Länge \(1\), d.h. sie sind normiert. Ferner wissen wir jetzt bereits, dass \(d=0\), da die Ebene durch den Punkt \(\left( x_0, y_0, z_0\right)=(0,0,0)\) geht, siehe Abschnitt 1.1 unten.

Die Flächennormale steht senkrecht auf den beiden Basisvektoren, ergibt sich also aus dem Kreuzprodukt \(\vec{u} \times \vec{v}\):

\[ \vec{n} = \vec{u} \times \vec{v} = \begin{pmatrix} u_2 \cdot v_3 - u_3 \cdot v_2 \\ u_3 \cdot v_1 - u_1 \cdot v_3 \\ u_1 \cdot v_2 - u_2 \cdot v_1 \end{pmatrix} = \begin{pmatrix} 0 \cdot 0 - 0 \cdot 1 \\ 0 \cdot 0 - 1 \cdot 0 \\ 1 \cdot 1 - 0 \cdot 0 \end{pmatrix} = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix} \hspace{2cm} \text{(7)} \]

Mit den obigen Bezeichnungen für die Flächennormale ist also \(\vec{n} = \left(a, b, c \right) = \left(0, 0, 1 \right)\). Mit diesen Werten von \(a\), \(b\) und \(c\) reduziert sich die Ebenengleichung \(a \cdot x + b \cdot y + c \cdot z = d\) auf \(z=0\) für alle \(x,y\), d.h. wir bekommen eine Ebene, die mit der \(x,y\)-Ebene identisch ist.

In R könnte man zur Berechnung des Kreuzproduktes das Package pracma benutzen:

library(pracma)
u = c(1, 0, 0) 
v = c(0, 1, 0)
cross(u,v)
## [1] 0 0 1

Wir können nun, wie in Abschnitt 2 beschrieben, die Projektion eines Punktes auf die durch \(\vec{u}\), \(\vec{v}\) und \(\left(x_0, y_0, z_0 \right) = \left(0,0,0\right)\) beschriebene Ebene berechnen. Zunächst zeichnen wir die Ebene und den Punkt \((x,y,z)=(1,1,1)\). Dieser Punkt soll dann auf die Ebene projiziert werden:

## normal of the plane
a = 0
b = 0
c = 1
normal = c(a, b, c)             
normal
## [1] 0 0 1
## a point in the plane
x0 = 0
y0 = 0
z0 = 0                          
d = -(a*x0 + b*y0 + c*z0)  
d    # should be zero   
## [1] 0
## plot the plane
axes3d()
wire3d(scale3d(cube3d(color = "black", alpha = 0.1), 2, 2, 2))
title3d(xlab = "x", ylab = "y", zlab = "z") 
planes3d(a, b, c, -d, col = "green", alpha = 0.5, lwd = 2)  

## plot a point
x = 1
y = 1
z = 1
points3d(x, y, z, col = "red", size = 8, pch = 16)
rglwidget()

Der Plot kann mit der Maus gedreht oder vergrößert werden.

Wir wollen nun den roten Punkt \((x,y,z)=(1,1,1)\) auf die Ebene projizieren. Dazu verwenden zunächst Gleichung (4):

\[ k = \frac{d - a \cdot x - b \cdot y - c \cdot z }{\left( a^2 + b^2 + c^2 \right)} = \frac{0 - 0 \cdot 1 - 0 \cdot 1 - 1 \cdot 1 }{\left( 0^2 + 0^2 + 1^2 \right)} = -1 \]

… und mit diesem \(k\) dann Gleichung (3):

\[ \begin{align*} x_1 &= x + k \cdot a = 1 - 1 \cdot 0 = 1 \\ y_1 &= y + k \cdot b = 1 - 1 \cdot 0 = 1 \\ z_1 &= z + k \cdot c = 1 - 1 \cdot 1 = 0 \end{align*} \] Die 3-dimensionalen Koordinaten des auf die Ebene projizierten Punktes sind also \(\vec{r_1} = \left(x_1, y_1, z_1 \right) = (1,1,0)\). Zur Probe können wir den Punkt einzeichen:

## plot a point
x1 = 1
y1 = 1
z1 = 0
points3d(x1, y1, z1, col = "blue", size = 8, pch = 16)
lines3d(c(x, x1),  c(y, y1), c(z, z1), col="darkgrey", lwd = 2)
rglwidget()

Wie die Lage des projizierten Punktes in Koordinatensystem der Basisvektoren \(\vec{u}\) und \(\vec{v}\) berechnet wird, wurde bereits im Abschnitt 3 beschrieben. Dazu müssen wir das Skalarprodukt des projizierten Vektors mit den Basisvektoren bilden, siehe Gleichung (5):

\[ x^{\prime}= \vec{u} \cdot \vec{r_1} = (1, 0, 0) \cdot \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} = 1 \] \[ y^{\prime}= \vec{v} \cdot \vec{r_1} = (0, 1, 0) \cdot \begin{pmatrix} 1 \\ 1 \\ 0 \end{pmatrix} = 1 \] Wir haben also \(\left( x^{\prime}, y^{\prime} \right) = (1, 1)\). Von der Richtigkeit der Koordinaten kann man sich überzeugen, indem das das obige Bild auf die \(x,y\)-Ebene dreht.


Note that all code snippets are designed for comprehensibility, not for efficiency!


uwe.menzel@matstat.org