WPFは、放物線を描きます

WPF自体が直接曲線をプロットした点の集合の関数ではありません。ベジェ曲線は、関数によって描画することができます。

ベジエ曲線セグメント及びノード、ノードがドラッグ支点であり、リトラクタブルラバーバンドラインように、我々はこれを行うには、描画ツールに表示ペンツールベクトル曲線です。もちろん、より成熟したビットマップ・ソフトウェア・ツールのいくつかは、Photoshopなどのベジェ曲線は、も好きです。

ベジェクラスがある:BezierSegment、立方ベジェ曲線は、2つの制御点によって開始及び終了方向を制御します。

QuadraticBezierSegmentは、二次ベジェは、制御点によって曲げ方向を制御します。

アイデアは、点別の後、ポイントの後、現在の点、前のポイントに基づいて、大きな値になります。4点の合計は、立方ベジェ曲線を生成します。

曲線(開始点、終了点、制御点、制御点2)のために、図中の2つの赤い点は、制御点で同定しました。

赤いコードは、主に2つの制御点を算出します。

最初の隣接点[オレンジ]の中点を計算します。

次いで、点線、破線取得[赤]、エンドポイントを取得するために、ポイント[青]に隣接して接続フラット位置の中点に移動。

レッドは、制御点です。

3.キーコード

///

///ベジェ曲線を取得

///

///

現在のポイント

///

ワンポイント

///

次の1ポイント

///

次のポイント2

///

プライベートBezierSegment GetBezierSegment(ポイント
currentPt、ポイントlastPt、ポイントnextPt1、ポイントnextPt2)

{

//中間点を計算します

VAR
lastC = GetCenterPoint(lastPt、currentPt)。

VAR
nextC1 = getCenterPoint(currentPt、nextPt1); //ベジエ制御点


nextC2 = GetCenterPoint(nextPt1、nextPt2)は、

//宛先ポイントと隣接ペダルの中点を計算します

//効果は、ライン又はラインの延長線上の2点があるため、計算誤差が存在することになる、非常に良好ではありません

//中間点法を用いたので、直接翻訳します。

// VARのC1 = GetFootPoint(lastC、nextC1、currentPt)。

//ここで、C2 = GetFootPoint(nextC1、nextC2、nextPt1)。

//の中点「隣接する中間点」を計算

ここで、
C1 = GetCenterPoint(lastC、nextC1)。

ここで、
C2 = GetCenterPoint(nextC1、nextC2)。

//計算[中間点の変位の「中間点」は必要としました]

VAR
controlPtOffset1 = currentPt - C1。

VAR
controlPtOffset2 = nextPt1 - C2。

//コントロールポイントを移動

VAR
controlPt1 = nextC1 + controlPtOffset1。

VAR
controlPt2 = nextC1 + controlPtOffset2。

あなたはカーブの大きさは大きすぎると考えられる場合は、//、あなたは現在のポイントに一定の係数に近いポイントを制御することができます。

controlPt1 = controlPt1 + 0 *(currentPt - controlPt1)。

controlPt2 = controlPt2 + 0 *(nextPt1 - controlPt2)。

VaRの
BZS =新しいBezierSegment(controlPt1、controlPt2、nextPt1、真の);

BZSを返します。

}

レンダリング

おすすめ

転載: blog.csdn.net/weixin_44589117/article/details/93327069