我正在我的一个 Android 应用程序中实现三次贝塞尔曲线逻辑。
我已经在自定义视图的 onDraw 的画布上实现了三次贝塞尔曲线代码。
// 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
我想允许用户更改上面曲线的端点,并根据新的端点,使画布无效。
但问题是,Curve 由两个控制点维护,需要根据 EndPoint 的变化重新计算。
就像,我只想在 EndPoint 从 (300,200) 变为 (250,250) 时找到新的控制点
如下图所示:
请帮助我根据新的端点计算两个新的控制点,曲线形状将保持与前一个端点相同。
我在搜索过程中参考以下参考链接:
http://pomax.github.io/bezierinfo/
http://jsfiddle.net/hitesh24by365/jHbVE/3/
http://en.wikipedia.org/wiki/B%C3%A9zier_curve
在回答这个问题时,也感谢任何参考链接。