Seite 1 von 1
Gleichung lösen
Verfasst: Montag 5. November 2012, 09:28
von 01detlef
Hallo zusammen,
ich habe folgende Gleichung: u = f*y und u, y sind Vektoren (3D). Ich möchte nun f berechnen, also:
x1 = f1*x2
y1 = f2*y2
z1 = f3*y3
Nun habe ich einfach u/y gerechnet, aber wie kann ich Divisonen durch Null abfangen? Zum Beispiel so etwas:
0=t1*0
3=t2*2
0=t3*0
Oder gibt es dafür eine fertige numpy-Funktion?
detlef
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 11:58
von BlackJack
@01detlef: Suchst Du eventuell das `numpy.linalg`-Modul?
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 12:59
von 01detlef
Ja, das kenne ich, aber das gilt irgendwie nur für matrizen?! ich habe aber nur zwei Vektoren
detelf
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 17:12
von gkuhl
@01detlef: Welches Werte hättest du denn gerne in deinem Beispiel für t1, t2 und t3?
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 21:14
von 01detlef
Hallo,
naja die Werte, die herauskommen. Was meinst du? Ich weiss nicht so genau, wie man eine Schleife bauen kann, so dass überpüft wird, ob ein Punkt auf einer Geraden liegt. Ich habe 20 Punkte und dann soll mit zwei Punkten eine Geradengleichung aufgestellt werden und dann die anderen Punkte einsetzen, ob diese Punkte auf der Geraden liegen.
Wie kann ich das sinnvoll machen?
detlef
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 21:27
von EyDu
Warum machst du es so kompliziert? Wenn du eine Gerade g hast und einen zu testenden Punkt p , dann musst du lediglich eine Projektion von p auf g machen und erhältst einen Punkt q. Dann bestimmst du den Abstand von p und q und kannst das Ergebnis gegen einen Schwellwert testen.
Vollständig ohne Sonderfälle und ohne Nachdenken.
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 21:36
von BlackJack
@01detlef: Ja welche Werte kommen denn da heraus? Gib doch mal zu einem konkreten Beispiel ein konkretes Ergebnis an, dann fällt Dir vielleicht etwas auf.
Ob ein Punkt p_3 auf einer geraden liegt, die von zwei Punkten p_1 und p_2 beschrieben wird, könnte man zum Beispiel prüfen, in dem man schaut ob die Vektoren `p_1 → p_2` und `p_1 → p_3` wenn man sie normiert gleich sind.
Re: Gleichung lösen
Verfasst: Montag 5. November 2012, 21:53
von EyDu
@BlackJack: dass kann aber zu recht unerwarteten Ergebnissen führen. Bei einer Gerade entlang der x-Achse wäre ein Punkte (0, 0.001) weiter von der Geraden entfernt als ein Punkt (100, 1).
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 08:02
von 01detlef
Hallo,
also z.b. die vier Punkte:
p1(0,0,0)
p2(2,0,0)
p3(4,0,0)
p4(3,2,0)
Nun stelle ich mit p1 und p2 eine gerade auf:
g: r = p1 * lamda*(p2-p1)
Und wie kann ich nun der Reihe nach prüfen, ob die Punkte p3 und p4 usw. auf dieser Geraden liegen? Sollte man das mit einer Schleife machen, ich habe die Coordinaten in einem Array stehen.
detlef
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 12:28
von EyDu
01detlef hat geschrieben:Sollte man das mit einer Schleife machen
Ja.
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 17:03
von 01detlef
Aber was genau meinst du mit Projektion und so?
detlef
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 17:15
von EyDu
Projektion auf Gerade.
Oder in kurz für eine Gerade g = s + lambda*n mit normiertem Richtungsvektor n, dem Stützvektor s und dem zu projizierendem Punkt p:
q = s + ((p - s).n)*n
wobei "." das Skalarprodukt ist.
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 20:08
von 01detlef
Und meinst du dann, wenn der Abstand zwischen q und p Null ist, liegt der Punkt auf der Geraden?
detlef
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 20:17
von EyDu
Richtig. Allerdings solltest du auf Grund der Rechenungenauigkeit nicht auf Gleichheit testen, sondern gegen einen sehr kleinen Schwellwert.
Re: Gleichung lösen
Verfasst: Dienstag 6. November 2012, 20:46
von pillmuncher
@01detlef: Was EyDu gesagt hat. Außerdem
das hier.
Re: Gleichung lösen
Verfasst: Mittwoch 7. November 2012, 09:51
von 01detlef
Hallo,
also ich habe das nun alles so eingebaut und es funktioniert. Wie kann ich nun in der Schleife sagen, dass sie abbrechen soll, sobald ein Abstand größer als 0.001 ist?
Code: Alles auswählen
for i in range(n)
p = coordiante_xyz
abstand = np.sqrt(p-q..)
if abstand >= 0.001:
x3 = p
zahl = 3*x3
Also sobald abstand größer als 0.001 ist, soll x3=p sein und die Schleife beendet werden und der nachfolgende Code folgen...
detlef
Re: Gleichung lösen
Verfasst: Mittwoch 7. November 2012, 09:54
von 01detlef
Sorry schon erledigt