3

2 つの端点と「n」個の制御点を持つスプラインを作成する必要があります。
私が知る限り、ベジエ曲線では 1 つの制御点のみが許可され、ベジエ スプラインでは 2 つの制御点が許可されます。ただし、1 つまたは 2 つに限らず、適切と思われる数のコントロール ポイントを追加できる必要があります。

4 つのコントロール ポイントを使用して実現したい例を次に示し
ます。 us/img297/3706/bezierpath.png


<Polyline   Stroke="Green" Stretch="Uniform"
            Points="0,0 1,2 2,1 3,3 4,3 5,2 6,3 7,2 8,1.75 9,2.5" />

<Path Stroke="Red" Stretch="Uniform">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigureCollection>
          <PathFigure StartPoint="0,0">
            <PathFigure.Segments>
              <PathSegmentCollection>
                <BezierSegment Point1="1,2" Point2="2,1" Point3="3,3" />
                <BezierSegment Point1="4,3" Point2="5,2" Point3="6,3" />
                <BezierSegment Point1="7,2" Point2="8,1.75" Point3="9,2.5" />
              </PathSegmentCollection>
            </PathFigure.Segments>
          </PathFigure>
        </PathFigureCollection>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>
4

2 に答える 2

2

すぐに使用できるわけではありませんが、この前の質問を見てください。C# を使用して NURBS を描画する方法が示されます。コードを何かに変換し、 PathSegmentを実装して WPF で使用することができます。

于 2009-09-21T20:00:48.600 に答える
1

タイトルでは NURBS に言及していますが、接続点で滑らかな一連のベジェ スプライン セグメントを描画する方法を探しているようです。

これを実現するには、2 番目のセグメントに point1 を設定して、セグメント間の接続ポイント (1 番目のセグメントの point3) に対して 1 番目のセグメントの point2 をミラーリングする必要があります。

あなたの場合、接続ポイントは (3,3) で、最初のセグメントの point2 は (2,1) であるため、コードで (4,3) の代わりに 2 番目のセグメント (4,5) で point1 を作成する必要があります。

類似性により、3 番目のセグメントの point1 が (7,4) に変更されるため、(6,3) に対して (5,2) がミラーリングされ、問題を解決できる次のセグメントになります。

 BezierSegment Point1="1,2" Point2="2,1" Point3="3,3"

 BezierSegment Point1="4,5" Point2="5,2" Point3="6,3" 

 BezierSegment Point1="7,4" Point2="8,1.75" Point3="9,2.5" 

ここで、制御点を変更するのが気に入らず、(4,3) と (7,2) を制御点にしたい場合は、さらにセグメントを追加します。前のセグメントとのスムーズな接続が必要な場合は、point1 が何であるかを決定できないことを覚えておいてください。

ノート:

  1. このソリューションは、接続ポイントで 1 段階の滑らかさを提供します。2 番目の滑らかさ (C2) も必要な場合は、point2 を適切に設定することで実現できます。前のセグメントのポイント 1 を取得し、前のセグメントのポイント 2 に対してミラーリングし、現在のセグメントのポイント 1 に対して結果をミラーリングすると、現在のセグメントの目的のポイント 2 が得られます。次に、必要な任意のポイント 3 を選択するだけで完了です。詳細については、 http://ibiblio.org/e-notes/Splines/B-spline.htmを参照してください。

  2. あなたがウィキペディアから与えた例はNURBSです。NURBS はベジェ スプラインに似ていますが、ポイントに重みを追加します。ドキュメントからわかることから、 BezierSegment はそれをサポートしていません。

于 2010-12-17T18:15:51.927 に答える