2016-09-30 2 views
2

Ich habe derzeit eine Bezier-Kurve, die durch Hinzufügen bestimmter Bezier-Kurven Grad 4 zusammen erzeugt wird. Ich benutze GL_LINES. Ich muss an jedem der Bezier-Punkte eine Tangente, eine Normale und eine Binormale zeichnen.Zeichnen Tangenten und Normale zu jedem Punkt in Bezier-Kurve opengl

Soweit ich weiß, eine Tangente zu einem bestimmten Wert von t zu finden, ist die Gleichung

P'(t) = 4 * (1-t)^3 *(P1 - P0) + 12 *(1-t)^2*t*(P2-P1) + 12 * (1-t) * t^2 * (P3-P2) + 4 * t^3 * (P4-P3) 

ich zur Zeit der obige Gleichung in der folgenden Art und Weise verwenden.

temp = 1-t; 
tangentPoints[val].XYZW[j] = (4 * pow(temp, 3)*(V[k + 1].XYZW[j] - V[k].XYZW[j])) + (12 * pow(temp, 2)*t*(V[k + 2].XYZW[j] - V[k + 1].XYZW[j])) + (12 * (temp)*pow(t, 2)*(V[k + 3].XYZW[j] - V[k + 2].XYZW[j])) + (4 * pow(t, 3)*(V[k + 4].XYZW[j] - V[k + 3].XYZW[j])); 

wobei j entspricht x, y, z-Werte und tangentPoints ist eine Struktur, die von mir definiert für die Ecken. V ist eine Anordnung von Scheitelpunkten der Kontrollpunkte.

Ich zeichne einfach eine Linie zwischen dem Punkt auf der Bezier-Kurve (sagen x) für einen Wert t und den entsprechenden Tangens Wert (zB dx) Aber beim Zeichnen der Tangenten zwischen (x, dx), bekomme ich etwas so (Zeichnen einer Linie von (x, dx)). Tangent generated by drawing a line between (x,dx)

Aber wenn ich Hinzufügen des Bezier Punkt zu jedem der entsprechenden Tangentenpunkte, ich bin das richtige Bild bekommen, das heißt, ich bin das richtige Ergebnis zu erzielen, indem eine Linie zwischen Zeichnung (x, x + dx)

Drawing a line between (x,x+dx)

Kann mir jemand sagen, warum das so ist und auch einen Einblick von bietet eine Tangente und normal zu einem gegebenen Bezier-Punkt zeichnen.

Antwort

4

Obwohl P'(t) manchmal die Tangente genannt wird, ist es tatsächlich die Ableitung der Kurve, auch bekannt als die Geschwindigkeit. Wenn sich die Kurve im 2ten Raum befindet und ihre Punkte in Metern gemessen werden, dann werden die Einheiten P'(t) in Meter/Sekunde sein. Es macht keinen Sinn, eine Linie zwischen '5 Meter' und '6 Meter/Sekunde' zu zeichnen, da es sich um Punkte in verschiedenen Räumen handelt..

Was Sie tun sollten, ist eine Linie zwischen 'der Punkt auf der Kurve' und 'wo das Objekt wäre, wenn es von der Kurve gelöst wäre und sich mit seiner aktuellen Geschwindigkeit für 1 Sekunde fortbewegt'. Das ist zwischen P(t) und P(t) + dt * P'(t).

+0

Also muss das auch zum Zeichnen normal gemacht werden dann richtig? Ich meine eine Linie zwischen P (t) und P (t) + normal (t) – sss999

+0

@ sss999: Im Wesentlichen ja. Beachten Sie, dass Sie, anstatt den Tangens/normal/was auch immer proportional zu ihrer Geschwindigkeit/Krümmung/was auch immer zu machen, immer wählen können, sie von fester Größe zu zeichnen, indem Sie den Vektor normalisieren. Z.B. 'P (t) + P '(t)/| P' (t) |' für die Tangente. "normal" ist wahrscheinlich bereits normalisiert. – ybungalobill

+0

Beachten Sie, dass für 3D die Dinge ein bisschen mehr Arbeit sind, weil Sie die Ebene der Reise für Punkte auf der Kurve zuerst finden müssen, aber es ist nicht * super * kompliziert und in http://stackoverflow.com/a/ abgedeckt 25458216/740553 –

Verwandte Themen