Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 06, 2025 12:41

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Normale eines Dreiecks
BeitragVerfasst: So Mär 11, 2007 16:43 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Hallo!

Ich möchte den Normalenvektor eines Dreiecks ausrechen.
Bis jetzt nehme ich dazu 2 Seiten des Dreiecks: a = B-A und b = C-A.
Da ich eine Normale ausrechnen will, muss diese zu beiden vektoren a und b senkrechts sein und ich bekomme das LGS:

a1*n1 + a2*n2 + a3*n3 = 0
b1*n1 + b2*n2 + b3*n3 = 0

Das LGS ist eigentlich ganz leicht zu lösen, Probleme bereiten mir nur die "Ausnahmefälle". Wenn nämlich a1, a2, a3, b1, b2, b3 jeweils <> 0 sind kann ich die Normale ausrechnen mit:

Code:
  1.  
  2. tmp := a1/b1;
  3. b1 := b1 * tmp;
  4. b2 := b2 * tmp;
  5. b3 := b3 * tmp;
  6.  
  7. n2 := a3 - b3;
  8. n3 := -a2 + b2;
  9. n1 := (a2*n2+a3*n3)/(-a1);
  10.  


Sobald aber eine der Werte a1, a2, a3, b1, b2, b3 = 0 ist, dann kann ich das LGS nicht mehr so lösen. Das bedeutet, es gibt 2^6-1=63 verschiedene Ausnahmefälle, die ich alle einzeln behandeln muss.
Bis jetzt mach ich das auch so und es geht eigentlich recht flott und ist nur etwas schlecht leserlich.
Mein Problem ist aber außerdem, dass die Richtungen der Normalenvektoren nicht mehr stimmen. Eigentlich ist dir Richtung der Normalen ja egal, ich bräuchte es aber so, dass die Richtung des Normalenvektors abhängig von der sichtbaren Fläche des Dreiecks ist. Das bedeutet, der Normalenvektor sollte immer auf die sichtbare Fläche des Dreiecks zeigen oder immer von der sichtbaren Fläche des Dreiecks wegzeigen. Und bis jetzt hab ich das noch nicht einheitlich hinbekommen.

Das bedeutet ich habe zwei Fragen an euch:
1) Wie rechne ich den Normalenvektor eines Dreiecks am geschicktesten aus (ohne 63 Sonderfälle behandeln zu müssen)?
2) Wie sorge ich dafür, dass der Normalenvektor des Dreiecks immer von der sichtbaren Fläche wegzeigt oder immer auf die sichtbare Fläche zeigt, jedoch nicht mal so mal so???

Vielen Dank im Voraus!!!

Grüße
Simon[/pascal]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 16:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das Kreuzprodukt der beiden Kantenvektoren ergibt einen Vektor der senkrecht auf beiden steht. Dabei spielt die Reihenfolge eine Rolle.

http://de.wikipedia.org/wiki/Kreuzprodukt

Bild

Damit der Vektor immer in die gleiche sinnvolle Richtung zeigt, muss man sich auf eine Reihenfolge festlegen. Also z.B. immer n=(v1-v0) x (v2-v0)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 18:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

Das einzige was du beim Kreuzprodukt berücksichtigen musst ist dass du, falls a und b linear abhängig sind, den Nullvektor erhälst.
Ausserdem sollstest du noch beachten, dass ein Normalenvektor immer die Länge 1 hat. Der Ergebnisvektor des Kreuzproduktes sollte also noch auf die Länge 1 skaliert werden. (Division der Komponenten durch die Länge des Vektors, Vorsicht falls Länge gleich 0!)

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 18:25 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Das kann doch nicht wahr sein!
Ist das schon alles???

Ich hab für den schei.. bestimmt ne stunde gebraucht und 150 zeilen code bekommen! Und jetzt sagt man mir hier das ich nur 3 zeilen brauch...

Ich glaub ich dreh durch!
Die letzten 4 Tage sitz ich am gleichen Problem und schreib bestimmt 1000 zeilen code. und als ergebnis darf ich fast alles wieder löschen und es bleiben ca 20 zeilen code übrig.

Warn das jetzt 4 tage lang nur verschwendete zeit?!?


Naja, auf jeden Fall danke LarsMiddendorf für die Erleuchtung!
Fragen lohnt sich manchmal halt doch...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 20:41 
Offline
DGL Member

Registriert: Sa Okt 22, 2005 20:24
Beiträge: 291
Wohnort: Frauenfeld/CH
hättest dir nur das Tutorial über Vektorgeometrie durchsehen müssen ;)

_________________
bester uo-shard: www.uosigena.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 12, 2007 00:31 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Gaukler hat geschrieben:
hättest dir nur das Tutorial über Vektorgeometrie durchsehen müssen ;)

Also in den DGL Tuts ists wirklich sehr oft erwähnt (grad weils so wichtig ist). Auch unter dem begriff Normale ist das im Wiki vermerkt. Bei manchen Dinge lohnt es sich einfach mal im Wiki nach verdächtigen Begriffen zu suchen ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 12, 2007 00:37 
Offline
DGL Member

Registriert: Sa Feb 10, 2007 15:45
Beiträge: 32
Ihr habt ja recht! :D
Aber ich hab halt versucht n Problem zu lösen, bei dem ich niemals gedacht hätte, dass ich die Normale dazu brauch. Und über 10 Ecken bin ich dann irgendwie zu dem Problem gekommen. Deshalb hätte ich auch nicht gedacht, dass das auch sonst oft gebraucht wird...
Aber nochmal danke!
Ich bin doch froh, dass ich mit eurer bzw LarsMiddendorfs Hilfe noch zu diesem Lösungsweg gekommen bin. Denn das andere hat zwar au geklappt, war aber doch sehr umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]