Indem er einen der bekannten Punkte in die Ebenengleichung
ax + by + cz + d = 0
eingesetzt und nach d aufgelöst hat.
d ist geometrisch gesehen der Normalabstand der Ebene zum Ursprung es
Koordinatensystems.
Karl Heinz Buchegger schrieb:> Indem er einen der bekannten Punkte in die Ebenengleichung>> ax + by + cz + d = 0>> eingesetzt und nach d aufgelöst hat.>>> d ist geometrisch gesehen der Normalabstand der Ebene zum Ursprung es> Koordinatensystems.
Stimmt, jetzt funktioniert es. Dank dir.
Rotkev schrieb:> Ergibt das folgende Sinn:
Schreib dir doch erst mal ein paar Vektor Funktionen anstatt hier alles
aufzudröseln. Das ist doch ausser fehleranfällig nur noch
fehleranfällig.
So wie du eine Funktion "kreuzprodukt hast" brauchst du eine Funktion
"normalisiere" und eine Funktion "skalarprodukt"
Dann beginnt dein Code so
n = kreuzprodukt( X_Achsen_Vektor ,Y_Achsen_Vektor );
normalisiere( &n );
d = - skalarprodukt( n, X_Achsen_Punkt );
und das ist dann schon mal wesentlich besser zu verstehen als dein X/Y/Z
Origien.
Und wenn du dann noch ein bischen darauf achtest, wie sich ein Quadrat
unter einem Bruchstrich übersetzt, dann könnte das sogar etwas werden.
t0 aus dem ersten Link brauchst du nur einmal berechnen. Es ist für alle
3 Koordinatenachsen gleich. Also rechne dir das aus, setz in die
Geradengleichung ein und du hast deinen Schnittpunkt.
Aber was rechnest du da eigentlich rum?
Du hast einen Punkt, du hast die Flächengleichung.
Damit ergibt sich die Distanz des Punktes 'kopf' zu der Ebene als
dist = skalarprodukt( n, kopf ) + d;
um diese Distanz gehst du vom Punkt aus in Richtung des negativen
Normalvektors und kriegst so den Punkt, an dem der Lotvektor auf die
Ebene die Ebene durchstösst.
fuss = add( kopf, scale( n, -dist ) );
Überlegen, was eigentlich das t0 in
p = p0 + t0 * delta
überhaupt ist.
Das t0 ist für alle Dimensionen des Vektors identisch.
Du musst beim berechnenn nur aufpassen, dass du nicht durch 0
dividierst. Normalerweise nimmt man vom Vektor einfach die Komponente
deren Absolutbetrag am größten ist.
Aber: eigentlich brauchst du das gar nicht ausrechnen :-) Zumindest
nicht so, wie in dem Link angegeben.
Das führt nur zu 'massenhaft' Berechnungen, die gar nicht notwendig
sind.
Das hier
dist = skalarprodukt( n, kopf ) + d;
ist nämlich genau dieses t0, wenn n ein normierter Vektor ist, was er ja
ist.
Rotkev schrieb:>> stimmt das so, wenn nicht, bitte modifizieren
erfinde ein paar Werte, stell vorab fest was rauskommen muss und dann
lass deinen Code laufen und vergleich mit dem was rauskommen muss.
Sorry. Aber nur so läuft die Sache.
(Und ausserdem ist es ein gutes Training, ob du verstanden hast
* worum es überhaupt geht
* wie die Mathe dahinter funktioniert
)
Wenn du 3 Punkte hast, die die Ebene aufspannen
[0, 0, 0] (gemeinsam) [5, 0, 0] und [ 0, 5, 0 ]
und einen Kopfpunkt von [8, 2, 7]
dann liegt der Fusspunkt bei [8, 2, 0]
Dann drehst du deine Vektoren mal (zb um die Z-Achse). Muss immer noch
der gleiche Fusspunkt rauskommen. Dann verschiebst du die
Punktkoordinaten mal. Zb in Z-Richtung. Zb. in X-Richtung.
Dann drehst du die Vektoren mal um 90 um die Y-Achse. Wo muss dann der
Fusspunkt sein. usw. usw.
Am Anfang nimmt man Werte, bei denen man sich nur eine Skizze ansehen
muss um zu entscheiden, welches das korrekte Ergebnis ist.
Karl Heinz Buchegger schrieb:> (Und ausserdem ist es ein gutes Training, ob du verstanden hast> * worum es überhaupt geht> * wie die Mathe dahinter funktioniert> )
Und außerdem suche ich mir Trainer selbst aus, und du bist nicht mein
Trainer.
Rotkev schrieb:> Und außerdem suche ich mir Trainer selbst aus, und du bist nicht mein> Trainer.
Na prima, da gibt sich Karl Heinz die größte Mühe und so ein unfähiger
merkbefreiter Grünschnabel, der meint lernen besteht aus guttenbergen,
wird auch noch frech!
Da könnte man glatt seine Manieren vergessen.
Udo Schmitt schrieb:> Rotkev schrieb:>> Und außerdem suche ich mir Trainer selbst aus, und du bist nicht mein>> Trainer.>> Na prima, da gibt sich Karl Heinz die größte Mühe und so ein unfähiger> merkbefreiter Grünschnabel, der meint lernen besteht aus guttenbergen,> wird auch noch frech!> Da könnte man glatt seine Manieren vergessen.
Dann müßtest du ja ein Grünschnabel sein.
Rotkev schrieb:> Karl Heinz Buchegger schrieb:>> (Und ausserdem ist es ein gutes Training, ob du verstanden hast>> * worum es überhaupt geht>> * wie die Mathe dahinter funktioniert>> )>> Und außerdem suche ich mir Trainer selbst aus, und du bist nicht mein> Trainer.
Dann frag ich mich, wozu du hier überhaupt nachfragst, wenn du sowieso
keine Hilfe zur Selbsthilfe annehmen willst. Wenn ich mir deinen Code so
ansehe, dann könntest du einen Trainer, der dich mal etwas härter
rannimmt, extrem gut gebrauchen.
Ach weißt du was. Mach doch deinen Kram alleine. Auf arrogante Schnösel
ohne Manieren, die auf ihr Nichtwissen auch noch stolz sind, kann ich
gerne verzichten.
Udo Schmitt schrieb:> Rotkev schrieb:>> Dann müßtest du ja ein Grünschnabel sein.>> Ziemlich armseliger Return.> Aber Karl Heinz hat recht. Wir haben kein Problem :-)
Hier ist nichts armselig außer deinen Kommentaren. Sprich nur weiter,
wir schauen dir gerne zu.