我有一个大约50个点(x,y)的数据集,我想绘制一条平滑的曲线,可以在这些点上尽可能接近。
我听说过Casteljau的样条算法,但是在谷歌上搜索了几个小时后,我无法找到一条我可以使用的代码。
据我所知,要使用这个算法,我必须将我的数据集分成4个点,对吧? 1234 5678等。据我所知,我唯一的问题是找到每组中间的点数。我的意思是,如果我计算点1234的曲线,我已经有了第1点和第4点,我需要计算2和3,对吗?但是如何做到这一点对我来说是一个谜。
我想问你们,如果你们知道C,C ++或Objective-C中的一些代码,它们会根据任意数量的数据集来计算曲线。
我需要的是:我发送代码一个带有数据集的数组,然后我收到一个带有绘图点的数组。
我的数学生锈了。那么,请给我一些实际的例子。不要把我发给有数学理论和方程的页面。看着这些页面让我的大脑受伤......
告诉我如何处理我必须计算bezier的点。
回答你会问一个10岁的孩子......:D
感谢。
答案 0 :(得分:14)
在C#中怎么样?
private void drawCasteljau(List<point> points) {
Point tmp;
for (double t = 0; t <= 1; t += 0.001) {
tmp = getCasteljauPoint(points.Count-1, 0, t);
image.SetPixel(tmp.X, tmp.Y, color);
}
}
private Point getCasteljauPoint(int r, int i, double t) {
if(r == 0) return points[i];
Point p1 = getCasteljauPoint(r - 1, i, t);
Point p2 = getCasteljauPoint(r - 1, i + 1, t);
return new Point((int) ((1 - t) * p1.X + t * p2.X), (int) ((1 - t) * p1.Y + t * p2.Y));
}
从这里开始: