Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vektorberechnungen (https://www.delphipraxis.net/81709-vektorberechnungen.html)

Flare 2. Dez 2006 11:10


Vektorberechnungen
 
Hey ho!

Ich habe mal eine Frage zu Vektoren.

Und zwar möchte ich gerade eine eigene Vektorbibliothek schreiben (egal ob es schon eine gibt, ist nur zum testen ob ich das kann...ihr wisst schon: Lerneffekt und so :roll: )

Ich habe schon einfache Umrechnungen geschrieben, was ja auch nicht so schwer war, nur jetzt hänge ich gerade an den wirklich sinnvollen Sachen.

Diese wären:
- Schnittpunkt zweier Geraden
- Abstand zweier Geraden
- Schnittpunkt einer Gerade und einer Ebene
- Schnittgerade zwischen 2 Ebenen
- Normalenvektor einer Ebene (schon gelöst)

Mit einem Blatt Papier theoretisch kein Problem, aber wie kriege ich einen Computer dazu, ein Gleichungssystem zu lösen? :shock:

Oder gibt es schon eine fertige Bibliothek wo ich mir die Lösung dort mal anschauen könnte?


Flare

3_of_8 2. Dez 2006 11:12

Re: Vektorberechnungen
 
Ein LGS löst du am besten, indem du das ganze in ne Matrix packst und sie dann in Stufenform bringst.

Flare 2. Dez 2006 11:17

Re: Vektorberechnungen
 
Zitat:

Zitat von 3_of_8
Ein LGS löst du am besten, indem du das ganze in ne Matrix packst und sie dann in Stufenform bringst.

Also gibts dafür noch keine fertige Funktion?

Dann muss ich mich eben noch hinsetzen und eine Funktion zum Lösen von Linearen Gleichungssystem schreiben...


Flare

Cöster 2. Dez 2006 12:05

Re: Vektorberechnungen
 
Lineare Glichungssysteme kann man mit Determinanten lösen. Stichwörter: Cramersche Regel und Regel des Sarrus.

Flare 2. Dez 2006 12:31

Re: Vektorberechnungen
 
Zitat:

Zitat von Cöster
Lineare Glichungssysteme kann man mit Determinanten lösen.

Danke für den Hinweis, wusste ich aber schon :stupid:

Ich habe mir trotzdem nicht die Arbeit gemacht und eine Funktion selber entworfen, sondern ich habe mich hier bedient, die Funktion scheint auch gut zu funktionieren.


Flare

Eichhoernchen 2. Dez 2006 12:32

Re: Vektorberechnungen
 
Der Normalenvektor einer Ebene ist das Kreuzprodukt (Vektorprodukt V x V= V) aus beiden Richtungsvektoren der Ebene

Khabarakh 2. Dez 2006 12:34

Re: Vektorberechnungen
 
Zumindest im Zwei- und Dreidimensionalen lassen sich die Gleichungen ja wohl noch sehr simpel allgemein auflösen, wozu dafür bitte einen LGS-Löser? Und gerade die letzte Aufgabe dürfte wohl in keiner Dimension ein großes Problem sein ;) .

Flare 2. Dez 2006 12:43

Re: Vektorberechnungen
 
Zitat:

Zitat von Eichhoernchen
Der Normalenvektor einer Ebene ist das Kreuzprodukt (Vektorprodukt V x V= V) aus beiden Richtungsvektoren der Ebene

Danke!

Zitat:

Zitat von Khabarakh
Zumindest im Zwei- und Dreidimensionalen lassen sich die Gleichungen ja wohl noch sehr simpel allgemein auflösen, wozu dafür bitte einen LGS-Löser?

Aber du kannst nicht abstreiten, dass es mit LGS-Löser wesentlich komfortabler geht. Und ich habe auch mal Performanceberechnungen durchgeführt, die Funktion ist sehr schnell ausgeführt. 10000 Durchläufe in 0,0016 Sekunden...


Flare

Khabarakh 2. Dez 2006 13:12

Re: Vektorberechnungen
 
Zitat:

Zitat von Flare
Aber du kannst nicht abstreiten, dass es mit LGS-Löser wesentlich komfortabler geht.

Hüm :gruebel: ? Ich brauche für das Umformen doch keine 10 Sekunden, in der Zeit ist mein Firefox noch nicht einmal gestartet.
Zitat:

Und ich habe auch mal Performanceberechnungen durchgeführt, die Funktion ist sehr schnell ausgeführt. 10000 Durchläufe in 0,0016 Sekunden...
Ich würde nie in meinem Leben eine Lib einsetzen, die - einfach mal geschätzt - mindestens um den Faktor 10 langsamer geworden ist, nur weil der Autor auf 10 Sekunden Gleichungen-Auflösen verzichtet hat. Und wenn es Bereiche gibt, die besonders oft in performancekritischen Codeteilen benötigt werden, dann gehört die Vektorrechnung auf jeden Fall dazu.

Flare 2. Dez 2006 13:22

Re: Vektorberechnungen
 
Zitat:

Zitat von Khabarakh
Und wenn es Bereiche gibt, die besonders oft in performancekritischen Codeteilen benötigt werden, dann gehört die Vektorrechnung auf jeden Fall dazu.

Mir geht es jetzt erst mal ums lernen. Dass es nicht effektiver ist, ist mir schon klar, ich meinte ja auch bloß, dass so ein LGS-Löser komfortabler ist, da ich mir selber in dieser Hinsicht nix ausdenken muss. Und manche Zahlenpaare kann man eben nicht mehr schnell in 10 Sekunden lösen, weswegen ich meinem TR sehr dankbar bin, dass er Matrizen mit Determinanten und allem drum und dran berechnen kann.

Flare

Khabarakh 2. Dez 2006 13:30

Re: Vektorberechnungen
 
Was meinst du in diesem Zusammenhang mit Zahlenpaaren? Es geht doch darum, beispielsweise für die Schnittpunktbestimmung die Geradengleichungen allgemein aufzulösen, damit ich eine Funktion erhalte, die ich fest in den Code einfügen kann und nachher nur noch mit den konkreten Parametern der zwei Geraden füttern muss. Und das ist wirklich nur eine einmalige Arbeit von 10 Sekunden.

3_of_8 2. Dez 2006 13:54

Re: Vektorberechnungen
 
"Ich will etwas lernen, benutze dafür aber eine fertige Library."

Wo ist der Fehler in diesem Satz? :mrgreen:

Flare 2. Dez 2006 14:06

Re: Vektorberechnungen
 
Ich benutze keine fertige Library. Ich möchte Vektorrechnung im Programmierteschnichen Sinne lernen und benutze dafür eine fertige LGS-Solver-Lib. Wo ist das Problem? Die Vectorlib schreibe ich selber.


Flare

3_of_8 2. Dez 2006 14:12

Re: Vektorberechnungen
 
Das Problem ist, dass du bei einem LGS-Lösungsalgorithmus auch ne Menge lernen könntest. ;)

Flare 2. Dez 2006 14:14

Re: Vektorberechnungen
 
Zitat:

Zitat von 3_of_8
Das Problem ist, dass du bei einem LGS-Lösungsalgorithmus auch ne Menge lernen könntest. ;)

Stimmt schon, vielleicht hole ich das ja noch nach! :stupid:
Nur habe ich mich gerade auf Vektoren versteift...versicht mich nicht davon abzubringen, sonnst klappt das noch! :roll:


Flare

Oxmyx 2. Dez 2006 15:43

Re: Vektorberechnungen
 
Irgendwie verstehe ich das Problem gerade nicht ganz. Wozu braucht man überhaupt bei dieser Aufgabenstellung einen Lösungsalgorithmus für ein LGS? Es muss doch überhaupt nichts gelöst werden!

Flare 2. Dez 2006 16:27

Re: Vektorberechnungen
 
Doch.
Ich brauche z.B. für den Schnittpunkt von 2 Geraden ein Gleichungssystem.
Oder bei der Berechnung ob ein Punkt in einer Gerade liegt.

Oder hast du dafür andere Lösungsverfahren?


Flare

3_of_8 2. Dez 2006 16:32

Re: Vektorberechnungen
 
Also wenn dus nur für 2- bzw. 3-dimensionale Vektoren brauchst, dann brauchst du kein LGS, weil du das einfach schon per Hand auflösen kannst.

Wenn dus für n-dimensionale Vektoren haben willst, dann ist ein LGS (AFAIK) unumgänglich. Ist aber auch nicht so schwer, nimm dir ein Array, verwende es als erweiterte Koeffizientenmatrix und löse es, indem du die Matrix in Stufenform bringst.

Flare 2. Dez 2006 23:06

Re: Vektorberechnungen
 
Ihr hattet irgendwie recht :roll:

Ich habe jetzt schon einige Sachen programmiert und bis jetzt doch noch kein LGS-Löser gebraucht.

Nur jetzt hänge ich an der Umsetzung für das Schneiden von 2 Geraden in der Form
Code:
x1       x2   x3       x4
y1 + r * y2 = y3 + s * y4
z1       z2   z3       z4
wobei die Zahlen, die untereinander stehen, die Vektoren (3-Dimensional) sein sollen.

Ich hatte die Idee, die dritte Gleichung des LGS nach r umzustellen, dann das in die 1. Gleichung einzusetzen und dann diese 1. Gleichung nach s umstellen und das dann in die 2. Gleichung einzusetzen. (Die Reihenfolge dürfte ja eigentlich egal sein)
Dann habe ich eine Gleichung, die ich nach r umstellen kann, welche von allen x-, y- und z-Werten abhängig ist.
Das r kann ich dann in irgendeine Gleichung einsetzen um s herauszubekommen.

Ist diese Herangehensweise überhaupt richtig? :gruebel:

Wenn ja, ist das allerdings sehr umständlich, da verschiedene Werte in dieser Gleichung nicht 0 sein dürfen.

Gibt es eine einfachere Lösung zum herausfinden des Schnittpunktes zweier Geraden?
(für einen Lösungsansatz für Gerade+Ebene und Ebene+Ebene wäre ich auch sehr dankbar!)


Flare

//Edit: Soory, meinte r anstatt t :oops:

Khabarakh 2. Dez 2006 23:14

Re: Vektorberechnungen
 
Wo nimmst du nun auf einmal "t" her :gruebel: ? Du musst einfach nur die erste und zweite Gleichung nach r auflösen, gleichsetzen und dann nach s auflösen, feddisch.

@3/8: Nope, die Formel bleibt gleich(simpel), es kommt nur pro Dimension eine weitere Prüfung hinzu, ob der gefundene s-Wert auch für alle Dimensionen gültig ist.

Flare 3. Dez 2006 16:23

Re: Vektorberechnungen
 
Danke für die leichtere Gleichung Khabarakh!

Ich habe es jetzt eingebaut, klappt sogar ziemlich gut. Nur leider nicht, wenn X- und Y-Wert des Richtungsvektors 0 sind. Mal sehen inwiefern ich das noch abändere.

Ich setze mich jetzt an die anderen Sachen (Abstand von 2 Geraden, Schnittpunkt zwischen Gerade und Ebene, Schnittgerade von zwei Ebenen).


Flare

Khabarakh 3. Dez 2006 16:37

Re: Vektorberechnungen
 
Eine 0 als Nenner musst du natürlich davor gesondert behandeln. Das ist der Fall, wenn die Geraden auf der XY-Plane parallel zueinander sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz