2008-09-24 3 views
5

Ich arbeite an einem Geometrieproblem, das die Suche nach dem Schnittpunkt zweier Parabelbögen in jeder Drehung erfordert. Ich konnte eine Linie und einen Parabolbogen inte- grieren, indem ich die Ebene rotierte, um den Bogen mit einer Achse auszurichten, aber zwei Parabeln können nicht beide mit einer Achse ausgerichtet sein. Ich arbeite daran, die Formeln abzuleiten, aber ich würde gerne wissen, ob es dafür bereits eine Ressource gibt.Code oder Formel für den Schnittpunkt zweier Parabeln in einer beliebigen Drehung

Antwort

6

Ich würde zuerst die Gleichung für die parabolische Bogen in 2D ohne Drehungen definieren:

x(t) = ax² + bx + c 
    y(t) = t; 

Sie jetzt die Rotation durch den Aufbau einer Rotationsmatrix anwenden können:

s = sin(angle) 
    c = cos(angle) 

    matrix = | c -s | 
      | s c | 

diese Matrix Nehmen und Sie erhalten die gedrehte parametrische Gleichung:

x' (t) = x(t) * c - s*t; 
y' (t) = x(t) * s + c*t; 

Dies wird Ihnen zwei Gleichungen geben (für x und y) Ihrer parabolischen Bögen.

Tun Sie dies für beide gedrehten Bögen und subtrahieren Sie sie. Dies gibt Ihnen eine Gleichung wie folgt:

xa'(t) = rotated equation of arc1 in x 
    ya'(t) = rotated equation of arc1 in y. 
    xb'(t) = rotated equation of arc2 in x 
    yb'(t) = rotated equation of arc2 in y. 
    t1 = parametric value of arc1 
    t2 = parametric value of arc2 

    0 = xa'(t1) - xb'(t2) 
    0 = ya'(t1) - yb'(t2) 

Jede dieser Gleichung ist nur eine Ordnung 2-Polynom. Diese sind einfach zu lösen.

Um die Schnittpunkte zu finden, lösen Sie die obige Gleichung (z. B. die Wurzeln finden).

Sie erhalten bis zu zwei Wurzeln für jede Achse. Jede Wurzel, die auf x und y gleich ist, ist ein Schnittpunkt zwischen den Kurven.

Die Position ist jetzt einfach: Einfach die Wurzel in Ihre parametrische Gleichung einklinken und Sie können direkt x und y erhalten.

+0

Wie lösen Sie dieses Gleichungssystem in C++ (also nicht mit den eingebauten Matlab-Funktionen) http://math.stackexchange.com/questions/1894043/solve-squared-non-linear-system-with-two -eqations –

+0

@ Mr.Sheep Tut mir leid, ich werde Sie nicht durch die Lösung gehen. Ich habe Matlab auch nie benutzt, also kann ich auch hier helfen. –

+0

Ich werde es herausfinden, aber ich schätze wirklich Ihre Lösung hier - danke. –

1

Leider erfordert die allgemeine Antwort die Lösung eines Polynoms vierter Ordnung. Wenn wir Koordinaten so transformieren, dass eine der beiden Parabeln in der Standardform y = x^2 ist, dann erfüllt die zweite Parabel (ax + by)^2 + cx + dy + e == 0. Um die Kreuzung zu finden, lösen Sie beide gleichzeitig. Durch Einsetzen von y = x^2 sehen wir, dass das Ergebnis ein Polynom vierter Ordnung ist: (ax + bx^2)^2 + cx + dx^2 + e == 0. Nils Lösung wird daher nicht funktionieren (sein Fehler: jeder ist ein Polynom 2. Ordnung in jeder Variablen getrennt, aber zusammen sind sie nicht).

1

Es ist einfach, wenn Sie ein CAS zur Hand haben.

Siehe die Lösung in Mathematica.

Wählen Sie eine Parabel und ändern Sie die Koordinaten, so dass ihre Gleichung y (x) = a x^2 (Normalform) wird.

A x^2 + B x y + CC y^2 + DD x + EE y + F == 0 

where B^2-4 A C ==0 (so it's a parabola) 

Werfen wir einen Fall numerisch lösen:

Die andere Parabel wird die allgemeine Form haben

p = {a -> 1, A -> 1, B -> 2, CC -> 1, DD -> 1, EE -> -1, F -> 1}; 
p1 = {[email protected]@Reduce[ 
     (A x^2 + B x y + CC y^2 + DD x + EE y +F /. {y -> a x^2 } /. p) == 0, x]} 

{{x -> -2,11769}, {x -> -,641445}, {x -> 0,379567 - 0,76948 I}, {x -> 0,379567+ 0.76.948 I}}

Lassen Sie uns Grundstück es:

Show[{ 
    Plot[a x^2 /. p, {x, -10, 10}, PlotRange -> {{-10, 10}, {-5, 5}}], 
    ContourPlot[(A x^2 + B x y + CC y^2 + DD x + EE y + F /. p) == 
    0, {x, -10, 10}, {y, -10, 10}], 
    Graphics[{ 
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[1]]], 
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[2]]] 
    }]}] 

enter image description here

Die allgemeine Lösung beinhaltet die Wurzeln der Berechnung:

4 A F + 4 A DD x + (4 A^2 + 4 a A EE) x^2 + 4 a A B x^3 + a^2 B^2 x^4 == 0 

, die leicht in jedem CAS getan.

Verwandte Themen