Hallo an alle,
ich schreibe in Java gerade ein Programm, dass ein Teilchen durch eine Röhre schicken und erkennen soll, wann es die Wand berührt (um anschließend davon abzuprallen). Angegangen bin ich das Ganze damit, zu prüfen, ob sich Kreis (Teilchen) und Gerade (Wand) schneiden:
Geradengleichung
(mit negativer Steigung, da y-Achse auf dem Schirm stets nach unten zeigt)
y = -m \cdot x + n = -\frac{x_E-x_A}{y_E-y_A}\cdot(x + x_A) + y_A = -\frac{x_E-x_A}{y_E-y_A}\cdot x + \frac{x_E-x_A}{y_E-y_A}\cdot x_M + y_A
Kreisgleichung
(da das Teilchen sich noch verformen könnte als Ellipsengleichung)
\frac{(x - x_M)^2}{a^2} + \frac{(y - y_M)^2}{b^2} - 1 = 0
a = b/2 (Breite)
b = h/2 (Höhe)
\frac{(x - x_M)^2}{\frac{b^2}{4}} + \frac{(y - y_M)^2}{\frac{h^2}{4}} - 1 = 0
Und nun mein Problem: Da ich Java nicht einfach fröhlich ineinandereinsetzen lassen kann, sondern ihm die Faktoren für x², x und die Konstante geben muss, habe ich das Ganze zu kruden Ausdrücken umgeformt. Die Schnittstellen lasse ich nun mittels einer Methode, die mit der Mitternachtsformel arbeitet, ausrechnen und komme allerdings immer (egal, ob das Teilchen die Wand nun tatsächlich schneidet oder nicht) auf nicht-reelle Lösungen. Seht ihr einen Umformungsfehler?
\frac{4\cdot(x - x_M)^2}{b^2} + \frac{4\cdot(-m\cdot(x + x_A) + y_A - y_M)^2}{h^2} - 1 = 0
\frac{4 \cdot (x)^2}{b^2} - \frac{4 \cdot (x \cdot x_M)^2}{b^2} + \frac{4 \cdot (x_M)^2}{b^2} + \frac{4\cdot(-m \cdot x -m \cdot x_A + y_A - y_M)^2}{h^2} - 1 = 0
Letzter Term
\frac{4\cdot(-m \cdot x)^2}{h^2} + \frac{4\cdot(-m \cdot x)\cdot(-m \cdot x_A + y_A - y_M) }{h^2} + \frac{4\cdot(-m \cdot x_A + y_A - y_M)^2}{h^2} - 1
Das alles führt bei mir zu den Faktoren:
x^2 : \frac{4}{b^2} + \frac{4\cdot(-m)^2}{b^2}
x : \frac{-4 \cdot x_M}{b^2} + \frac{4\cdot m \cdot (m \cdot x_A - y_A + y_M)}{h^2}
c : \frac{4 \cdot x_M^2}{b^2} + \frac{4\cdot(m \cdot x_A + y_A)^2}{h^2} - \frac{4\cdot y_M \cdot(y_A - m \cdot x_A)^2}{h^2} + \frac{4\cdot y_M^2}{h^2} -1
Freue mich über jede Hilfe und danke schonmal!