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

Aktuelle Zeit: Fr Jul 18, 2025 08:51

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Mär 29, 2005 15:27 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Hi,

Ich habe die Koordinaten dreier Punkte gegeben, die ein (beliebiges) Dreieck bilden. Ein weiterer Punkt liegt auf diesem Dreieck, wobei ich dessen X- und Z- Koordinaten kenne. Wie kann man jetzt die Y-Koordinate des Punktes schnell und leicht ausrechnen?

Es handelt sich um eine Highmap, die allerdings als Triangle_Fan gerendert wird und da wollte ich, wenns irgendwie anders geht, nicht unbedingt 8 Fallunterscheidungen machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 15:50 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Höhrt sich nach ner normalen Linie-Ebene-Schnittpunktberechnung an. Guck z.B. mal ins CompGeo-Script. (Links->General)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 15:57 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zuerst kann man ja die Ebene des Dreiecks ausrechnen.
Dann hat man da ein Normalvektor n und eine Entfernung d.

Für alle Punkte auf der Ebene gilt.
n . x - d =0

Dann nimmt man die xy Position und kann daraus eine senkrechte Gerade konstruieren.
s=(x,y,0)
r=(0,0,1)
x=s+t*r

Und die Gerade in die Ebene einsetzen

n . (s+t*r) -d =0
n.s +n.(t*r) -d =0
n.s +t*n.r -d =0
n.s +t*n.z -d =0
t*n.z=d-n.s
t=(d-n.s) / (n.z)
t=(d-dot3(n,s)) / n.z

Für den Schnittpunkt x gilt dann:

x=s+t*r
x.z=s.z + t* r.z
x.z=0 + t* 1
x.z = t = (d-dot3(n,s)) / n.z

Kann sein, dass es einfacher oder korrekter geht, aber das Dreieck soll ja beliebig sein. Habe es jetzt nicht ausprobiert.

[Edit]
Habe übersehen, dass bei dir Y nach unten/oben geht.
Dann beträgt die Höhe natürlich: (d-dot3(n,s)) / n.y


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 17:54 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Hallo,
Danke für die Mühe, ich hab versucht, das nachzuvollziehen.

d ist hier die Entfernung zu was? Des Punktes zur Ebene? Falls ja, wäre d ja 0, da er ja auf dem Dreieck liegen soll?

Soweit ich das verstanden habe, muss ich folgendes tun:
Code:
  1.  
  2.   //Normale berechnen
  3.   n := VectorCrossProduct(VectorAffineSubtract(V[2],V[1]),VectorAffineSubtract(V[3],V[1]));
  4.   VectorNormalize(n);
  5.   s:=MakeAffineVector([X,0,Z]);
  6.   d:=0; //Das d ist wohl falsch?
  7.   Result := (d - VectorAffineDotProduct(n,s)) / n[1];
  8.  

Wobei X und Z die Koordinaten des Punktes sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
nimm die Ebene in normalenform (Vektor-stützvektor)*normalenvektor=0.
setze dann den vektor (X,Y,?) ein, und multipliziere dass aus.
Das müsste die schnellste möglichkeit ergeben, gerade weil du ja x und y koordinate des punktes schon weißt...

EDIT: Oh, sorry, musst natürlich nach vy auflösen...


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


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

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ne d ist diese 4. Komponente die bei Ebenen immer dabei ist. Das ist das Skalarprodukt aus der Normalen und einem Punkt auf der Ebene und entspricht dem Abstand vom Ursprung.

So müßte es gehen. Kannst dir ja erstmal die Punkte auf die Y Ebene legen und sehen ob das Richtige rauskommt.

Code:
  1. n := VectorCrossProduct(VectorAffineSubtract(V[2],V[1]),VectorAffineSubtract(V[3],V[1]));
  2. VectorNormalize(n);
  3. d:=VectorDotProduct(n,V[1]);
  4. s:=MakeAffineVector([X,0,Z]);
  5. Result := (d - VectorAffineDotProduct(n,s)) / n[1];


Operatorüberladung ist eine schöne Sache.

Zur Probe müßte man zeigen, dass der Punkt (X,Result,Z) auf der Ebene liegt. d.h. die Ebenengleichung erfüllt. x . n -d =0

{X , (d - VectorAffineDotProduct(n,s)) / n[1] , Z} . n -d
=X*n[0]+ (d - VectorAffineDotProduct(n,s))/n[1] * n[1]+Z*n[2]-d
=X*n[0]+d- (n . s) + Z * n[2]-d
=X*n[0]- (n . s) + Z * n[2]
=X*n[0]- (n . {X,0,Z}) + Z * n[2]
=(X*n[0]- n[0]*X)+ (-n[2]*Z + Z * n[2])
=0

Wenn ich mich jetzt nicht zweimal verrechnet habe, müßte das stimmen.

[Edit]
Hab erst jetzt den Post von geo gesehen:
Das ist ja das gleiche auch wenn die Herleitung kürzer ist, denn
d=dot3(n,v[1])=n.x*v[1].x+n.y*v[1].y+n.z*v[1].z
VectorAffineDotProduct(n,s) = n.x*s.x+n.z*s.z
zusammen ergibt das:

(n.x*v[1].x+n.y*v[1].y+n.z*v[1].z-n.x*s.x+n.z*s.z) / n[1]


Zuletzt geändert von LarsMiddendorf am Mi Mär 30, 2005 12:37, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 29, 2005 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Einwandfrei! Funktioniert super, vielen Dank :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 06:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
[offtopic]Ich wollte blos mal fragen, wo ihr beide, Lars und geo, solch große Kenntnisse habt in Bezug auf die Mathematik um 3D-Raum. Ich selbst kämpfe auch gerade mit der Materie, und mich würde es interessieren, wo man sowas lernen kann, weil das ist glaub ich was, was man aus Tutorials kaum erfährt, ich tippe mal auf Uni? Danke[/offtopic]

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 11:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Also diese Mathematik habe ich zumindest noch in der Schule gelernt in der 12. oder 13. Klasse - und die Leute im Grundkurs auch soweit ich das mitbekommen habe. Ansonsten wurden hier im Forum dazu aber auch schon hin und wieder links gepostet, die das Thema vertiefen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 12:13 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Hmm ja, hab auch schon genug Tutoials und Artikel gelesen. Mich fasziniert blos immer wieder, wie einige diese Formeln immer so "einfach aus dem Ärmel schüttlen". Für solche Überlegungen brauch immer ewig Zeit, und wenns fertig is, dann sind x Fehler drin, die ich erstens nicht finde und zweitens nicht verstehe. Aber wahrscheinlich liegts zum Gro0teil an der Übung. Bin jetz 12. Klasse LK Mathe, und ich glaub, des wird noch ;)

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 12:32 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 21, 2003 17:36
Beiträge: 141
Geht mir genauso wie La_Boda, bin auch Mathe LK12, bisher hat mir, was wir bis jetzt behandelt haben, zwar etwas weitergeholfen, aber eigentlich so, dass ich damit solche Probleme lösen könnte. Hoffe, da kommt noch genug dazu zu meinem Wissen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 12:40 
Offline
DGL Member

Registriert: So Jun 23, 2002 12:37
Beiträge: 144
Programmiersprache: C/C++, Delphi
Ihr macht echt schon lineare Algebra und analytische Geometrie in der 12? Ich bin auch im LK (12), aber wir fangen damit, wenn überhaupt Ende der 12 an. Es könnte sogar wegfallen, wenn die Mehrheit des Kurses für Wahrscheinlichkeitsrechnung ist.
Da wird man direkt neidisch...

_________________
--->ladida<---


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 12:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also zur Geometrie im 3D Raum hab ich an der Uni ne gute Vorlesung gehört. Das Script dazu welches alle Formeln enthält hab ich hier schon paar mal erwähnt (Links->General->CompGeo.pdf). Ewentuell hilft das dem ein oder anderen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 30, 2005 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Habs eigentlich auch aus der Schule, war allerdings meistens aus eigeninteresse vor dem Schulstoff...
Vektorrechnung funktioniert bei mir meistens intuitive :-)
Nur bei Rotations-sachen muss ich immer auf bereits erwähnte texte zurückgreifen, ich hoffe das mir das in der uni mahl jemand schlüssig näher bringt...

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.010s | 16 Queries | GZIP : On ]