我想知道如何将点连接在一起形成曲线。我在图表中有20点,并想知道如何加入他们。我试过用GeneralPath对象,但想知道是否有更好的方法?从几个点绘制曲线
从几个点绘制曲线
回答
要建立一个曲线,而不仅仅是行,你可以使用的GeneralPath
public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
它创建贝塞尔曲线的方法。但要计算控制点x1, y1, x2, y2
您需要放一些数学,或者下载一些插值库。
你也可以检查this question,它有一个链接到源代码实现一些插值算法。
没有解决通过点路由曲线的关键问题。此外,“下载一些插值库”意味着什么,控制点不能像这样生成。 “放一些数学”是可以的,但是模拟贝塞尔曲线的算法需要的算法是真正的弯曲。 – 2011-06-19 18:03:16
GeneralPath肯定是最直接的。创建您的路径,为您的第一个点调用moveTo,然后为每个后续点调用lineTo。然后将其绘制到Graphics2D对象。
GeneralPath
是一个很好的方法,应该很好地处理您的要求,除非您要离开别的东西。 Path2D
是一个新的类,可以更精确,但如果你不需要这种精度,那么GeneralPath
就没有优势了。
贝塞尔想象基于多项式元件上的曲线:
(a + b)^3 = a^3 + 3a^2*b + 3a*b^2 + b^3
(^
正“到电源”,而不是“异或”)。他实际上将a
由t
和b
替换为1-t
。所以公式应该是(t + (1 - t))^3
(是的,它等于1)。
在这一点上,我们有公式
t^3 + 3*t^2*(1-t) + 3*t*(1-t)^2 + (1-t)^3
有4个部分。选择4点。
(x1,y1), (x2,y2), (x3,y3), (x4,y4)
现在,创建参数方程,通过坐标式的每一个部分相乘,如下所示:
x(t) = t^3*x1 + 3*t^2*(1-t)*x2 + 3*t*(1-t)^2*x3 + (1-t)^3*x4
y(t) = t^3*y1 + 3*t^2*(1-t)*y2 + 3*t*(1-t)^2*y3 + (1-t)^3*y4
这是三次贝塞尔的参数方程。
你想要一个20次方的Bézier? “简单地”开发(t + (1-t))^20
。
Pascal Triangle应该可以帮到你。
这听起来像你需要一个Catmull-Rom曲线来代替。有关更多详细信息,请参阅http://www.mvps.org/directx/articles/catmull/,有关实施请参阅http://johnsogg.blogspot.com/2010/01/cardinal-splines-and-catmull-rom.html。
- 1. 如何通过几个点来绘制贝塞尔曲线?
- 2. 如何绘制经过QT中几个点的平滑曲线?
- 3. 绘制曲线
- 4. 绘制曲线点点滴滴
- 5. SceneKit绘制曲线
- 6. 龟绘制曲线
- 7. 绘制NURBS曲线?
- 8. 从用户绘制的栅格曲线制作矢量曲线
- 9. 如何绘制2点曲线(Android,Java)
- 10. 两点之间绘制曲线
- 11. 绘制曲线线android
- 12. Highcharts样条曲线不绘制前30个点的图线。
- 13. 绘制超过3个控制点的贝塞尔曲线
- 14. 从survreg预测绘制生存曲线
- 15. Matplotlib不绘制曲线
- 16. 在iPhone中绘制曲线?
- 17. 绘制折线图弯曲
- 18. 在AndEngine中绘制曲线
- 19. 使用libgdx绘制曲线
- 20. 如何绘制与曲线
- 21. 绘制二次曲线
- 22. 绘制平滑曲线
- 23. 绘制二次曲线
- 24. Ntlk&Python,绘制ROC曲线
- 25. AUC曲线绘制在python
- 26. 绘制法线到曲面
- 27. 使用Paraview绘制曲线
- 28. 从已知点绘制直线到MATLAB中拟合曲线中的点
- 29. 从点阵快速绘制平滑曲线
- 30. 绘制平均曲线个gnuplot的
定义'更好'。 – 2011-06-15 15:08:24