2016-09-30 39 views
2

私は現在、次数4のベジェ曲線を組み合わせてベジェ曲線を生成しています。私はGL_LINESを使用しています。私は、ベジェの各点で接線、標準、およびバイノーマルを描く必要があります。ベジェ曲線の各点に接線を描くopengl

は、私の知る限りでは、Tの任意の値で接線を見つけるために、方程式は、私は現在、以下のように上記の式を使用しています

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) 

です。 jはX、Y、Z値及びtangentPointsに対応

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])); 

頂点を掲載することによって定義された構造です。 Vは制御点の頂点の配列です。

私は単純に、値tとそれに対応する接線の値(例えばdx)のベジェ曲線(xと言う)の点と線の間に線を引いています。しかし、(x、dx)このように((x、dx)から線を引く)。 Tangent generated by drawing a line between (x,dx)

しかし、私はつまり、私は右の画像を取得しています、対応する接線の点の各々にベジェ点を追加していたときに、私は(X、X + DX)の間に線を描くことによって、正しい結果を取得してい

Drawing a line between (x,x+dx)

誰が、なぜこれがそうとも与えられたベジェポイントに接線と、通常の描画の洞察を提供している教えてもらえます。

答えて

4

P'(t)は、正接と呼ばれることもありますが、実際にはカーブの派生物、つまり速度です。カーブが2次元空間にあり、その点がメートルで測定されているとすると、P'(t)の単位はメートル/秒のになります。 の異なる場所にある点であるため、 '5メートル'と '6メートル/秒'の間に線を引くのは意味がありません

「カーブのポイント」と「カーブから切り離されたオブジェクトがどこにあり、現在のベロシティで1秒間移動し続けたか」の間に線を描くことです。それはP(t)P(t) + dt * P'(t)の間です。

+0

普通の方法でも同じことをする必要がありますか?私はP(t)とP(t)+ normal(t)の間に線を描くことを意味します。 – sss999

+0

@ sss999:本質的にはyesです。接線/法線/何をそれらの速度/曲率/に比例させるのではなく、ベクトルを正規化することによって常に固定サイズのものを描くことができます。例えば。 P(t)+ P '(t)/ | P'(t)| 'は正接である。 'normal'はおそらくすでに正規化されています。 – ybungalobill

+0

3Dの場合、カーブ上の点の移動平面を最初に見つけ出す必要があるため、物事はもう少し作業になりますが、* super *複雑ではなく、http://stackoverflow.com/a/でカバーされています。 25458216/740553 –

関連する問題