Discussion:
Normalenvektor einer Ebene
(zu alt für eine Antwort)
Der Andere
2004-04-28 12:17:59 UTC
Permalink
Ich muss zu Polygonen den Normalenvektor berechnen. Ich bin ein Laie in der
Vektorrechnung, aber meiner Logik nach müsste es zwei Normalenvektoren zu
einem Polygon (bzw. einer Ebene) geben, die jeweils entgegengesetzt sind.
Nehmen wir mal an, die Polygone gehören zu einem Objekt und ich kann
feststellen, was die *Außenseite* der Polygone ist.
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen. Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.

Gruß,
Matthias

--
Für emails Anweisung in der Adresse befolgen
Joachim Mohr
2004-04-28 13:38:52 UTC
Permalink
Post by Der Andere
Ich muss zu Polygonen den Normalenvektor berechnen. Ich bin ein Laie in der
Vektorrechnung, aber meiner Logik nach müsste es zwei Normalenvektoren zu
einem Polygon (bzw. einer Ebene) geben, die jeweils entgegengesetzt sind.
Nehmen wir mal an, die Polygone gehören zu einem Objekt und ich kann
feststellen, was die *Außenseite* der Polygone ist.
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen. Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.
Ich gehe mal davon aus, dass Dein Polygon in einer Ebene liegt, sagen
wir. Die Ebene hat die Gleichung 2x1 - 2x2 - 3x3 =10.

Dann ist _ein_ Normalenvektor n=(2 -2 -3), genausogut auch
n=(-2 2 3) (Das war Deine Frage) genausogut aber auch
n=(20 -20 -10).

Kurz: Der "Normalevektor" ist nur bis auf ein Vielfaches eindeutig.

MFG Joachim

Wie Du den Normalenvektor berechnen kannst: siehe
http://joachim.mohr.rottenburg.bei.t-online.de/la1.html#21l
--
Dr. Joachim Mohr
Legionsweg 5 D-72108 Rottenburg am Neckar
e-mail an mich persönlich über:
http://delphi.zsg-rottenburg.de/kontakt.html
hompage über google: "Das schönste Gymnasium in Deutschland"
Achtung: "***@privacy.net" only for spam
Der Andere
2004-04-29 00:55:31 UTC
Permalink
Post by Joachim Mohr
Post by Der Andere
Ich muss zu Polygonen den Normalenvektor berechnen. Ich bin ein Laie in der
Vektorrechnung, aber meiner Logik nach müsste es zwei Normalenvektoren zu
einem Polygon (bzw. einer Ebene) geben, die jeweils entgegengesetzt sind.
Nehmen wir mal an, die Polygone gehören zu einem Objekt und ich kann
feststellen, was die *Außenseite* der Polygone ist.
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen. Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.
Ich gehe mal davon aus, dass Dein Polygon in einer Ebene liegt, sagen
wir. Die Ebene hat die Gleichung 2x1 - 2x2 - 3x3 =10.
Dann ist _ein_ Normalenvektor n=(2 -2 -3), genausogut auch
n=(-2 2 3) (Das war Deine Frage) genausogut aber auch
n=(20 -20 -10).
Kurz: Der "Normalevektor" ist nur bis auf ein Vielfaches eindeutig.
Danke.
Wenn ich nun den Schnittwinkel der Normalen mit einer Gerade berechne
(angenommen, sie schneiden sich), gibt's wiederum zwei Möglichkeiten, je
nachdem "welches Vielfache" (also positiv oder negativ) ich verwende. Dabei
bekomme ich den jeweils anderen Winkel, indem ich den ersten von 180
subtrahiere. Stimmt das?

Grüße,
Matthias
Joachim Mohr
2004-04-29 13:02:37 UTC
Permalink
Wenn ich nun den Schnittwinkel der Normalen mit einer Gerade berechne ...
Mit welcher Geraden. Mit der Verbindungsgeraden zweier Ecken des
Polygons? Dann stehen sie senkrecht aufeinander.

Ansonsten: _Der_ Schnittwinkel zweier Geraden ist nicht eindeutig.
Wie due schon sagst: Mit alpha ist auch 180° - alpha ein Schnittwinkel.

MFG Joachim
--
Dr. Joachim Mohr
Legionsweg 5 D-72108 Rottenburg am Neckar
e-mail an mich persönlich über:
http://delphi.zsg-rottenburg.de/kontakt.html
hompage über google: "Das schönste Gymnasium in Deutschland"
Achtung: "***@privacy.net" only for spam
Joachim Mohr
2004-04-29 13:04:21 UTC
Permalink
P.S. Hier sind Realnamen üblich:-)
--
Dr. Joachim Mohr
Legionsweg 5 D-72108 Rottenburg am Neckar
e-mail an mich persönlich über:
http://delphi.zsg-rottenburg.de/kontakt.html
hompage über google: "Das schönste Gymnasium in Deutschland"
Achtung: "***@privacy.net" only for spam
Der Andere
2004-04-29 13:21:10 UTC
Permalink
Post by Joachim Mohr
P.S. Hier sind Realnamen üblich:-)
Ja ich weiß, das gilt aber nicht unbedingt für die anderen Newsgroups, in
denen ich mich so "rumtreibe". Außerdem bin ich Borchert-Fan. Aber da ich
ein kompromissbereiter Mensch bin, schreibe ich hier von nun an stets

Grüße,
Matthias Treder
;-))
Andreas Pflug
2004-04-28 14:32:27 UTC
Permalink
Hallo,
Post by Der Andere
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen. Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.
zunächst mal muss definiert werden, was unter "Innenseite"
und "Außenseite" zu verstehen ist. Wenn Du nun einen
Normalenvektor \vec{n} hast, probiere folgendes
Verfahren aus:

Bilde einen Differenzvektor \vec{d} = \vec{x}-\vec{x0}


Dabei ist \vec{x} ein Vektor, der vom Ursprung auf einen
beliebigen Punkt der Ebene führt, \vec{x0} ist ein Vektor,
der vom Ursprung auf einen beliebigen Punkt innerhalb
der *Innenseite* führt.

Die Richtung dieses Differenzvektors ist also tendenziell
die *Außenseite*.

Bilde nun das Skalarprodukt von \vec{n} und \vec{d}.
Kommt ein positiver Wert heraus, zeigt \vec{n} nach außen
(d. h. gleiche Richtung wie Differenzvektor),
für einen negavtiven Wert dagegen nach innen
(Null dürfte nicht herauskommen, solange
\vec{x0} nicht auch auf der Ebene liegt).

Viele Grüße

Andreas
Horst Kraemer
2004-04-29 06:35:00 UTC
Permalink
On Wed, 28 Apr 2004 14:17:59 +0200, "Der Andere"
Post by Der Andere
Ich muss zu Polygonen den Normalenvektor berechnen. Ich bin ein Laie in der
Vektorrechnung, aber meiner Logik nach müsste es zwei Normalenvektoren zu
einem Polygon (bzw. einer Ebene) geben, die jeweils entgegengesetzt sind.
Nehmen wir mal an, die Polygone gehören zu einem Objekt und ich kann
feststellen, was die *Außenseite* der Polygone ist.
Was genau meinst Du mit "feststellen" ?
Post by Der Andere
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen.
Mit dem Vektorprodukt (Kreuzprodukt) zweier Spannvektoren der Ebene
(die nicht parallel sind) kannst Du einen Vektor bestimmen, der
senkrecht zur Ebene steht.
Post by Der Andere
Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.
Der Schwierigkeitsgrad haengt von der Art des "Objekts" ab. Wenn es
sich um ein konvexes Polyeder handelt, d.h. wenn fuer jedes
Randpolygon gilt: alle Eckpunkte des Polyeders, die nicht Ecken des
Polygons sind, liegen auf derselben Seite (der "Innenseite") der Ebene
des Polygons, ist es relativ einfach.

Du nimmst drei Eckpunkte A,B,C des Polygons und bildest per

V = (B-A)x(C-A)

einen Vektor, der senkrecht auf der Polygonebene steht. Dann nimmst Du
irgend einen Eckpunkt P des Polyeders, der nicht zu diesem Polygon
gehoert und bildest das Skalarprodukt

<V,P-A>

Dieses Skalarprodukt ist entweder >0 oder <0. Wenn es <0 ist, zeigt V
nach aussen, anderfalls zeigt -V nach aussen.

Bei nicht konvexen Polyedern ist es erheblich komplizierter und
richtig laestig wird es, wenn auch die Polygone nicht notwendigerweise
konvex sind (Loesungverfahren bei Bedarf).
--
Horst
Der Andere
2004-04-29 11:43:27 UTC
Permalink
Post by Horst Kraemer
Post by Der Andere
Ich muss zu Polygonen den Normalenvektor berechnen. Ich bin ein Laie in der
Vektorrechnung, aber meiner Logik nach müsste es zwei Normalenvektoren zu
einem Polygon (bzw. einer Ebene) geben, die jeweils entgegengesetzt sind.
Nehmen wir mal an, die Polygone gehören zu einem Objekt und ich kann
feststellen, was die *Außenseite* der Polygone ist.
Was genau meinst Du mit "feststellen" ?
Die Koordinaten der Eckpunkte des Polygons sind (wenn man dessen Außenseite
betrachten würde) im Uhrzeigersinn angegeben. Sprich, wenn wir auf die
"Rückseite" eines Polygons schauen, würden die Koordinaten gegen den
Uhrzeigersinn angegeben sein.
Post by Horst Kraemer
Post by Der Andere
Mit dem (Skalar-?) Produkt von zwei Spannvektoren kann ich den
Normalenvektor berechnen.
Mit dem Vektorprodukt (Kreuzprodukt) zweier Spannvektoren der Ebene
(die nicht parallel sind) kannst Du einen Vektor bestimmen, der
senkrecht zur Ebene steht.
Post by Der Andere
Woher weiß ich denn nun, welchen der beiden
Vektoren ich habe? Den, der auf der *Innenseite* steht oder den, der auf der
*Außenseite* steht.
Der Schwierigkeitsgrad haengt von der Art des "Objekts" ab. Wenn es
sich um ein konvexes Polyeder handelt, d.h. wenn fuer jedes
Randpolygon gilt: alle Eckpunkte des Polyeders, die nicht Ecken des
Polygons sind, liegen auf derselben Seite (der "Innenseite") der Ebene
des Polygons, ist es relativ einfach.
Du nimmst drei Eckpunkte A,B,C des Polygons und bildest per
V = (B-A)x(C-A)
einen Vektor, der senkrecht auf der Polygonebene steht. Dann nimmst Du
irgend einen Eckpunkt P des Polyeders, der nicht zu diesem Polygon
gehoert und bildest das Skalarprodukt
<V,P-A>
Dieses Skalarprodukt ist entweder >0 oder <0. Wenn es <0 ist, zeigt V
nach aussen, anderfalls zeigt -V nach aussen.
Bei nicht konvexen Polyedern ist es erheblich komplizierter und
richtig laestig wird es, wenn auch die Polygone nicht notwendigerweise
konvex sind (Loesungverfahren bei Bedarf).
Die Polygone sind zwar konvex, die Polyeder aber nicht unbedingt.
Im Endeffekt geht es darum, zu bestimmen, ob die Außenseite eines bestimmten
Polygons sichtbar ist. Dazu soll man den Winkel zwischen der Sichtlinie des
Betrachters zum Polygon und einer Normale des Polygons bestimmen. Liegt
dieser zwischen -90 und 90 Grad, so schaut man auf die Vorderseite des
Polygons und es ist somit (prinzipiell) sichtbar. Meiner Logik nach kann es
jedoch zwei unterschiedliche Resultate geben, je nachdem, auf welcher Seite
(Innen-, Außen-) die Normale steht.
Dieses kann man zwar mit der Methode bestimmen, die du angegeben hast, aber
ich denke, da kommt die implizite Kodierung der Eckkoordinaten der Polygone
(von außen gesehen im Uhrzeigersinn) irgendwie mit ins Spiel.

Grüße,
Matthias
Post by Horst Kraemer
--
Horst
Horst Kraemer
2004-04-29 12:05:00 UTC
Permalink
On Thu, 29 Apr 2004 13:43:27 +0200, "Der Andere"
Post by Der Andere
Die Koordinaten der Eckpunkte des Polygons sind (wenn man dessen Außenseite
betrachten würde) im Uhrzeigersinn angegeben. Sprich, wenn wir auf die
"Rückseite" eines Polygons schauen, würden die Koordinaten gegen den
Uhrzeigersinn angegeben sein.
[...]
Post by Horst Kraemer
Bei nicht konvexen Polyedern ist es erheblich komplizierter und
richtig laestig wird es, wenn auch die Polygone nicht notwendigerweise
konvex sind (Loesungverfahren bei Bedarf).
Die Polygone sind zwar konvex, die Polyeder aber nicht unbedingt.
Wenn die Polygone konvex sind, und die Punkte pro Polygon jeweils von
aussen gesehen im Uhrzeigersinn angeordnet sind, gibt es ueberhaupt
kein Problem.

Du nimmst drei beliebige Eckpunkte mit der Eigenschaft A vor B vor C
und bildest das Vektorprodukt

(C-A)x(B-A)

Dies ist dann ein Normalvektor, der nach aussen zeigt, vorausgesetzt,
dass A,B,C nicht auf einer Geraden liegen.

Dies setzt allerdings voraus, dass sich die Punktkoordinaten auf
Rechts-Koordinatensystem beziehen (x-y-z-Achse entsprechen
Daumen-Zeigefinger-Mittelfinger der rechten Hand). Bei einem
Links-Koordinatensystem waere

(B-A)x(C-A) = - (C-A)x(B-A)

der richtige Normalvektor (und wenn die Punkte andersherum sortiert
waeren, waere es wieder umgekehrt...)
--
Horst
Der Andere
2004-04-29 13:54:49 UTC
Permalink
Post by Horst Kraemer
Post by Der Andere
Die Koordinaten der Eckpunkte des Polygons sind (wenn man dessen Außenseite
betrachten würde) im Uhrzeigersinn angegeben. Sprich, wenn wir auf die
"Rückseite" eines Polygons schauen, würden die Koordinaten gegen den
Uhrzeigersinn angegeben sein.
[...]
Post by Horst Kraemer
Bei nicht konvexen Polyedern ist es erheblich komplizierter und
richtig laestig wird es, wenn auch die Polygone nicht notwendigerweise
konvex sind (Loesungverfahren bei Bedarf).
Die Polygone sind zwar konvex, die Polyeder aber nicht unbedingt.
Wenn die Polygone konvex sind, und die Punkte pro Polygon jeweils von
aussen gesehen im Uhrzeigersinn angeordnet sind, gibt es ueberhaupt
kein Problem.
Du nimmst drei beliebige Eckpunkte mit der Eigenschaft A vor B vor C
und bildest das Vektorprodukt
(C-A)x(B-A)
Dies ist dann ein Normalvektor, der nach aussen zeigt, vorausgesetzt,
dass A,B,C nicht auf einer Geraden liegen.
Ah, genau das war meine Vermutung. Es war aber halt nur eine Vermutung, die
ich nicht überprüfen konnte.
Mit v . w / |v| . |w| (wobei v . w dem Skalarprodukt von v und w
entspricht) erhalte ich den cosinus des Schnittwinkels alpha. Ist dieser
positiv (-90 Grad < alpha < 90 Grad), ist das Polygon sichtbar. Problem
gelöst ;-)

Danke nochmal.

Grüße,
Matthias Treder
Horst Kraemer
2004-04-29 15:17:36 UTC
Permalink
On Thu, 29 Apr 2004 15:54:49 +0200, "Der Andere"
Post by Der Andere
Mit v . w / |v| . |w| (wobei v . w dem Skalarprodukt von v und w
entspricht) erhalte ich den cosinus des Schnittwinkels alpha. Ist dieser
positiv (-90 Grad < alpha < 90 Grad), ist das Polygon sichtbar. Problem
gelöst ;-)
Das Berechnen der Betraege |v| und |w| und die Division kannst Du Dir
dabei sparen, denn das Vorzeichen von v.w ist dasselbe wie das von
v.w/(|v|.|w|), weil Betraege immer positiv sind.
--
Horst
Der Andere
2004-04-29 22:31:02 UTC
Permalink
Post by Horst Kraemer
Post by Der Andere
Mit v . w / |v| . |w| (wobei v . w dem Skalarprodukt von v und w
entspricht) erhalte ich den cosinus des Schnittwinkels alpha. Ist dieser
positiv (-90 Grad < alpha < 90 Grad), ist das Polygon sichtbar. Problem
gelöst ;-)
Das Berechnen der Betraege |v| und |w| und die Division kannst Du Dir
dabei sparen, denn das Vorzeichen von v.w ist dasselbe wie das von
v.w/(|v|.|w|), weil Betraege immer positiv sind.
Stimmt. Noch weniger Arbeit ... wunderbar ;-)

Lesen Sie weiter auf narkive:
Loading...