Android アプリケーションの 1 つに 3 次ベジエ曲線ロジックを実装しています。
カスタム ビューの onDraw でキャンバスに 3 次ベジエ曲線コードを実装しました。
// Path to draw cubic bezier curve
Path cubePath = new Path();
// Move to startPoint(200,200) (P0)
cubePath.moveTo(200,200);
// Cubic to with ControlPoint1(200,100) (C1), ControlPoint2(300,100) (C2) , EndPoint(300,200) (P1)
cubePath.cubicTo(200,100,300,100,300,200);
// Draw on Canvas
canvas.drawPath(cubePath, paint);
上記のコードを次の画像に視覚化します。
[更新しました]
Logic for selecting first control points, I've taken ,
baseX = 200 , baseY = 200 and curve_size = X of Endpoint - X of Start Point
Start Point : x = baseX and y = baseY
Control Point 1 : x = baseX and y = baseY - curve_size
Control Point 2 : x = baseX + curve_size and y = baseY - curve_size
End Point : x = baseX + curve_size and y = baseY
ユーザーがカーブの上の EndPoint を変更できるようにしたいのですが、新しい End ポイントに基づいて、キャンバスを無効にします。
しかし、問題は、Curve が 2 つの制御点によって維持されることです。これは、EndPoint の変更時に再計算する必要があります。
同様に、EndPoint が (300,200) から (250,250) に変化したときに新しいコントロール ポイントを見つけたいだけです。
次の画像のように:
曲線の形状が以前の終点と同じに維持される新しい終点に基づいて、2 つの新しい制御点を計算するのを手伝ってください。
検索時に次の参照リンクを参照します。
http://pomax.github.io/bezierinfo/
http://jsfiddle.net/hitesh24by365/jHbVE/3/
http://en.wikipedia.org/wiki/B%C3%A9zier_curve
この質問への回答として、参照リンクも高く評価されています。