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

Aktuelle Zeit: Sa Jul 19, 2025 01:19

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Normalenberechnung ...
BeitragVerfasst: Di Mär 02, 2004 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
... Zweiter Versuch, da der Ur-"Thread" ja von einem anonymen Moderator gelöscht wurde, da ich zu blöd war, auf den "neues Thema erstellen" Button zu drücken..:

(ich fasse mich kurz, da ich es hasse, etwas doppelt zu machen)

Wie kann ich, wenn ich die Punktkoordinaten eines Polygons im Raum, den Normalvektor dieses Polygons berechnen?

Vektorkreuzprodukt sagt mir nicht wirklich was....


Danke für eure Aufmerksamkeit.

PS: Wo ist die Löschen-Funktion?!?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 02, 2004 18:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
3 Punkte, p1,p2,p3

zuerst berechnet man 2 Kanten des Dreieck
v1:=p2-p1;
v2:=p3-p1;

n:=vec_normalize(vec_cross(v1,v2));

Das Kreuzprodukt berechnet einen Vektor, der zu den beiden senkrecht steht. Dabei kommt es auf die Reihenfolge der beiden Vektoren an. Den Normalvektor muß man nacher dann noch normalisieren.


Code:
  1. function vec_cross(const a,b:TVector):TVector;
  2. begin
  3. result:=vector(a.y*b.z-a.z*b.y,b.x*a.z-a.x*b.z,a.x*b.y-a.y*b.x);
  4. end;
  5.  
  6. function vec_normalize(const v:TVector):TVector;
  7. var
  8. l:single;
  9. begin
  10. l:=sqrt(sqr(v.x)+sqr(v.y)+sqr(v.z));
  11. vec_normalize:=vec_scale(v,1/l);
  12. end;
  13.  
  14. function vec_scale(const v:TVector;const scale:single):TVector;
  15. begin
  16. result.x:=v.x*scale;
  17. result.y:=v.y*scale;
  18. result.z:=v.z*scale;
  19. end;
  20.  
  21. function Vector(const x,y,z:single):TVector;
  22. begin
  23. result.x:=x;result.y:=y;result.z:=z;
  24. end;
  25.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 02, 2004 19:22 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Oh Danke, ich glaub, das hat mir sehr geholfen! :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 03, 2004 19:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 20, 2003 22:26
Beiträge: 38
Wohnort: Dresden (noch)
Ich hab's hier auch nochmal als Ganzes:

Code:
  1.  
  2. Procedure PolyNormal(const v1,v2,v3:TVector3f; out Dest:TVector3f);
  3. Var a,b:TVector3f;
  4.     InvLength:Single;
  5. begin
  6.  //plane vectors
  7.  a[0]:=v2[0]-v1[0]; a[1]:=v2[1]-v1[1]; a[2]:=v2[2]-v1[2];
  8.  b[0]:=v3[0]-v1[0]; b[1]:=v3[1]-v1[1]; b[2]:=v3[2]-v1[2];
  9.  //cross-product
  10.  Dest[0]:=a[1]*b[2]-a[2]*b[1];
  11.  Dest[1]:=a[2]*b[0]-a[0]*b[2];
  12.  Dest[2]:=a[0]*b[1]-a[1]*b[0];
  13.  //normalize
  14.  InvLength:=1/sqrt(sqr(Dest[0])+sqr(Dest[1])+sqr(Dest[2]));
  15.  Dest[0]:=Dest[0]*InvLength;
  16.  Dest[1]:=Dest[1]*InvLength;
  17.  Dest[2]:=Dest[2]*InvLength;
  18. end;
  19.  


Mit Assembler und SSE wäre's natürlich noch etwas schneller und dass Dest über den Stack übergeben wird gefäll mir auch noch nicht so... vielleicht schreibe ich's irgendwann mal besser aber im Moment bin ich zu faul :mrgreen:
Ging ja eh nur um's Prinzip, oder?

PS: Wer hat eigentlich die Farben von dem Pascal-Code eingestellt??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 03, 2004 19:14 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Ja, danke, Brainiac, aber mit Lars' Hilfe hab ich das auch schon hingekriegt. Ja, es ging nur ums Prinzip.
Wie wärs, wenn jemand das ins FAQ reinstellt? Ham bestimmt viele Probleme dabei!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 03, 2004 20:16 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Im Linkbereich gibts ein Mathe Script von meinem Computergeometrie Doc.
Wenn du das mal durchgucks, und vorallem mal ziehst, solltest du nicht mehr solche Fragen haben.

(Links->General->Mathescript)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 15 Queries | GZIP : On ]