Kreuzung zwischen Bézier-Kurve und einem Liniensegment

Ich Schreibe ein Spiel in Python (mit pygame), die mich verpflichtet, generiert zufällige aber gut aussehende "Meer" für jedes neue Spiel. Nach langer Suche entschied ich mich auf einen Algorithmus beinhaltet, dass die Bezier-Kurven definiert, die in padlib.py. Ich jetzt brauchen, um herauszufinden, wenn die Kurven generiert padlib schneiden Sie eine Linie segment.

Brute-force-Methode wäre, nur die Menge der Liniensegmente approximiert produziert von padlib um die Antwort zu finden. Ich vermute aber, dass eine bessere Antwort gefunden werden kann, analytisch. Ich habe nur ein paar Dutzend spline-Segmente - Suche, Sie sollten schneller sein als tausend von Linien-Segmenten.

Ein wenig Suche hat mich auf diesem Weg sind: Bezier-Kurve -> Kochanek-Bartels-Spline -> Kubische Hermite-spline

Auf der letzten Seite, ich fand diese Funktion:

p(t) = h00(t)p0 + h10(t)m0 + h01(t)p1 + h11(t)m1

wo p(t) ist tatsächlich ein Punkt (2-dimensionaler Vektor), hij(t) - Funktionen sind kubische Polynome, p0, p1, m0 und m1 sind die Punkte, die ich bekommen kann von padlib code.

Nun, ich kann sehen, dass die Lösung zu meinem problem ist p(t) = u + v * t1, wobei u und v das Ende meiner Strecke.

Jedoch, die analytische Lösung ist mir schleierhaft. Hat jemand hier wissen von einer vorhandenen Lösung? Oder kann mir helfen bei der Lösung der Gleichungen?

  • wäre schön, wenn einer der beteiligten ein Teil Ihres Quellcodes, denn deine Frage ist zu unverständlich
  • Der entsprechende code ist meistens in padlib.py. Und die Mathematik in Wikipedia-Artikeln ist wichtiger als der code.
InformationsquelleAutor | 2009-11-28
Schreibe einen Kommentar