曲線(カーブ)

月曜日〜金曜日、日、時間の更新の午前7時北京時間 -

曲線(カーブ)

2点間の直線に沿ってすべてのものを移動すると、我々がやってみたかったすべてのであれば、これは十分だろう。しかし、現実の世界では、オブジェクトが滑らかな曲線に移動し、加速し、スムーズに減速します。曲線は、3つの以上の制御点によって表すことができます。ほとんどの曲線について、エンドポイントを形成するそのうちの2つ以上の3つの制御点があります。他のものは、曲線の形状を規定します。図4.14に示すシンプルな曲線を考えます

あなたが直線運動に沿って、すべての我々のニーズを満たすことができるようになります場合は、線形補間で十分である、しかし、実際には、曲線状の動きに沿って複数のオブジェクトは、ゆっくり加速し、減速します。曲線であってもよい三個の以上の3点が、三つ以上の曲線の制御点の大部分を発現しました。2つの点が曲線の形状を定義するために、その他の点の境界を定義するために使用される、請求項図4.14は、単純な曲線を示し
曲線(カーブ)
、図4.14に示す曲線は、三個の有し 、制御点をA、B、およびC A及びCはtheendpointsあります曲線のBは、形状規定する曲線のを私たちは別のラインと一緒に一列と点BとCと点AとBを結合した場合、我々は新たなペアを見つけるために、単純な線形補間を使用して、2本の線に沿って補間することができますポイントの、DおよびEは今、これらの二つの点を考えると、我々はまた別のラインでそれらを結合することができますし、我々は我々の補間パラメータを変えると新しい点、Pを見つけるために、それに沿って補間し、トン、点Pがスムーズに移動しますD.への湾曲した経路は、数学的に表すと 、これは

AとCは、エンドポイントである、図3の制御点で4.14の曲線は、Bは、曲線の形状を制御します。全て一緒AB及びBC場合、我々は、類似Dを見つけるために、線形補間に沿ってそのようなE.するための1つの点を、これら二つのセグメントを行うことができます 接続D、Eと2つの新しいセグメントであることができ、このライン補間は、新しい点Pを取得します。我々はtが変更できるようにする場合、以下のように計算され、D Pのスムーズな動きをポイントAから求めることができる
曲線(カーブ)
と共に、EとDと行うリトルクランチングのために代入以下:(我々はD、Eについても同様間思い付きます補間は、我々は次の式を持っている:)

曲線(カーブ)
あなたはトンで二次方程式としてこれを認識しなければならない。それは説明した曲線が二次ベジェ曲線として知られている(これが実際には二次補間ベジェ曲線であることがわかります)。私たちは、実際には非常に簡単で、これを実装することができます私たちがやっているすべては直線的に(内部のGLSL補間でこれを実現するのは簡単です)(混合)前の2つの補間の結果を補間されたとしてミックス機能を使用してGLSL、

vec4 quadratic_bezier(vec4 A, vec4 B, vec4 C, float t)
{
vec4 D = mix(A, B, t); // D = A + t(B - A)
vec4 E = mix(B, C, t); // E = B + t(C - B)
vec4 P = mix(D, E, t); // P = D + t(E - D)
return P;
}
By adding a fourth control point as shown in Figure 4.15, we can increase the order by 1 and produce a cubic Bézier curve.

当我们添加第四个控制点后,这个插值又变成了三次方的贝塞尔曲线了
曲線(カーブ)
We now have four control points, A, B, C, and D. The process for constructing the curve is similar to that for the quadratic Bézier curve. We form a first line from A to B, a second line from B to C, and a third line from C to D. Interpolating along each of the three lines gives rise to three new points, E, F, and G. Using these three points, we form two more lines, one from E to F and another from F to G, interpolating along which gives rise to points H and I, between which we can interpolate to find our final point, P. Therefore, we have

现在我们有四个控制点了,构建曲线的方法跟三个控制点构建曲线的方法类似。我们首先连接AB、BC、CD,然后分别对他们插值,得到新的点E、F、G。然后用这仨点做出新的两条线EF、FG, 然后继续对EF、FG插值得到H、I点,然后我们对HI进行插值,得到了p点,这样一来我们有下面的公式
曲線(カーブ)
If you think these equations look familiar, you’re right: Our points E, F, and G form a quadratic Bézier curve that we use to interpolate to our final point P. If we were to substitute the equations for E, F, and G into the equations for H and I, then substitute those into the equation for P, and crunch through the expansions, we would be left with a cubic equation with terms in t—hence the name cubic Bézier curve. Again, we can implement this simply and efficiently in terms of linear interpolations in GLSL using the mix function:

如果你觉得这个等式非常相似,那么你的直觉是正确的,我们E、F、G组成了的二次方的贝塞尔曲线去插值p点的时候,如果把E、F、G求得H、I,那么就可以得到P,如此这般,最后我们就会得到 由因子t影响的插值公式,下面给出了GLSL里面的插值实现算法

vec4 cubic_bezier(vec4 A, vec4 B, vec4 C, vec4 D, float t)
{
vec4 E = mix(A, B, t); // E = A + t(B - A)
vec4 F = mix(B, C, t); // F = B + t(C - B)
vec4 G = mix(C, D, t); // G = C + t(D – C)
vec4 H = mix(E, F, t); // H = E + t(F - E)
vec4 I = mix(F, G, t); // I = F + t(G - F)
vec4 P = mix(H, I, t); // P = H + t(I - H)
return P;
}
Just as the structure of the equations for a cubic Bézier curve “includes” the equations for a quadratic curve, so, too, does the code to implement them. In fact, we can layer these curves on top of each other, using the code for one to build the next

正如三次方与二次方的贝塞尔曲线的关系那样,是包含关系,实际上,咱们的代码也是这样的包含关系。如下所示:

vec4 cubic_bezier(vec4 A, vec4 B, vec4 C, vec4 D, float t)
{
vec4 E = mix(A, B, t); // E = A + t(B - A)
vec4 F = mix(B, C, t); // F = B + t(C - B)
vec4 G = mix(C, D, t); // G = C + t(D - C)
return quadratic_bezier(E, F, G, t);
}
Now that we see this pattern, we can take it further and produce even higher-order curves. For example, a quintic Bézier curve (one with five control points) can be implemented as

类似的,我们可以得到更高阶的曲线的推导公式,长相如下这般

vec4 quintic_bezier(E、フロートT vec4 vec4 A、vec4のB、C vec4、vec4のD)
{
vec4 F =ミックス(A、B、T)。// F = A + T(B - A)
vec4 G =ミックス(B、C、T)。// G = B + T(C - B)
vec4のH =(C、D、t)を混ぜます。// H = C + T(D - C)
vec4 I =ミックス(D、E、T)。// I = D + T(E - D)
戻りcubic_bezier(F、G、H、I、T)。
}
この階層化は、理論的には、制御点の任意の数のために何度も適用することができます。しかし、実際には、以上の4つの制御点を有する曲線は、一般的に使用されていません。むしろ、我々は、スプラインを使用しています。

この状況は、下にネストの層と、実際にカーブすることができますが、私たちが使用スプラインを使用している場合、現実には、我々はほとんどの制御点以上、4つの以上のベジェ曲線のコントロールポイントを使用しません

この日の翻訳は〜さようなら、明日お会いし、ここで取得します

最新のプロットを初めて取得し、東漢アカデミーと公共グラフィック番の心に注意を払ってください。

ハン・カレッジ、あなたはああをプレイするのを待ちます

おすすめ

転載: blog.51cto.com/battlefire/2429076