二次または3次Bスプラインの配列にN進Bスプラインを回し
質問
私は(すべてのC#のオペレーティングシステム間の相関体)MOSAのためのいくつかのTTFの仕事をしています。私とコリンが現在取り組んでいくつかのTTFコードを得る上で作業しているバーン(これらの日:)あまり私 - 彼は進歩の多くを作った)
。いずれの場合においても、TTF仕様は、「ハンドル」との間の制御点の任意の量を可能にし、のGASP のNOが全くハンドル(TTFは、それを示す円の例を有する - よくやっ馬鹿 - 。あなたは10のバイトを保存)
誰も私にこれを行うことができる方法についての指針を与えることができますか?私は、ウィキペディア上のベジェの記事を見て、それは本当に多くの助けではなかった - 彼らはそれが起こって示しているが、任意の数学を与えることはありません。助けになる準備ができて何か「プログラム」(私の微積分が、それがどうあるべきかではありません) - いくつかの擬似コードか何か
。みんなありがとうます。
解決
私はいくつかの掘削を行なったし、いくつかのアルゴリズムを見つけましたA> TTFはこちら上、このサイトでOVER SPECするます。
他のヒント
いくつかの実用的な微積分の知識を持つウィキペディアで
ベジェ記事に、あなたは翻訳することができます以下の擬似C#のコードリストのようなコンピュータプログラムに式。私は次スプラインでそれをやっているが、別のものに変換するために簡単です。
// Quadratic spline, with three given points
// B(t) = (1-t)^2P(0) + 2*tP(1) + t^2P(2)
// where T is a real number in the interval [0, 1]
public void DrawQuadSpline(Point p0, Point p1, Point p2, int steps)
{
Point next = p0;
Point previous = p0;
double tStep = 1 / ((float) steps);
double t = 0;
for (int i = 0; i < steps; i++)
{
float x = CalculateQuadSpline(P0.x, P1.x, P2.x, t);
float y = CalculateQuadSpline(P0.y, P1.y, P2.y, t);
Point next = new Point(x, y);
drawLine(previous, next);
previous = next;
t = t + tStep;
}
}
private void CalculateQuadSpline(float z0, float z1, float z2, float t)
{
return (1.0-t)*(1.0-t)*z0 + 2.0*t*z1 + t*t*z2;
}
私は前にJavaでこれをしなかっただけでてきたようにそれはいくつかの調整を必要とするかもしれないが、それは基本的にはこれだけです。
所属していません StackOverflow