2

私はMOSA(すべてのC#オペレーティングシステム間の相関機関)のためにいくつかのTTF作業を行っています。私とColinBurnは現在、いくつかのTTFコードを機能させることに取り組んでいます(最近は私が少なくなっています:)-彼は多くの進歩を遂げました)。

いずれにせよ、TTF仕様では、「ハンドル」とあえぎNOハンドルの間に任意の量のコントロールポイントが許可されています(TTFには、それを示す円の例があります-よくできたばか-10バイト節約できました)。

誰かが私にこれがどのように行われることができるかについての指針を与えることができますか?ウィキペディアのベジェの記事を見ましたが、それほど役に立ちませんでした。彼らはそれが起こっていることを示していますが、数学を与えていません。何か「プログラム」の準備ができていると役に立ちます(私の計算は本来あるべきものではありません)-いくつかの擬似コードか何か。

みんなありがとう。

4

3 に答える 3

3

ウィキペディアのベジエの記事から、実用的な微積分の知識があれば、次の疑似 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でしかこれをやったことがないので、微調整が必​​要かもしれませんが、基本的にはそれだけです。

于 2008-12-10T06:29:45.253 に答える
1

私は掘り下げて、このサイトのこちらの TTF 仕様のアルゴリズムをいくつか見つけました。

于 2008-12-10T07:25:48.417 に答える
1

わかりました、TTF アウトラインは 2 次 b スプラインとして定義されているようです。

よく知っておきたいアルゴリズムが 2 つあります。

1 つ目は、ノット挿入によるベジエ抽出です。これにより、二次ベジエ セグメントが得られます。次に、各ベジエ セグメントの次数を上げて立方体を取得します。

私が使用する主な参考資料は、オンラインの CAGD クラスの教科書です。ベジエ抽出については、セクション 6.3で説明されています。ベジエ曲線の次数上昇については、セクション 2.4で説明されています。何か問題がありましたらお知らせください..

于 2008-12-10T20:47:15.957 に答える