加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Casteljau算法 – 实例

发布时间:2020-12-16 03:11:27 所属栏目:百科 来源:网络整理
导读:我有一个大约50点(x,y)的数据集,我想绘制一个平滑的曲线,尽可能靠近这些点. 我听说过Casteljau的样条算法,但是在谷歌搜索几个小时后,我无法找到我可以使用的一个代码. 据我所知,为了使用这个算法,我必须将数据集分成4个点,对吗? 1234 5678等.据我注意到,我
我有一个大约50点(x,y)的数据集,我想绘制一个平滑的曲线,尽可能靠近这些点.

我听说过Casteljau的样条算法,但是在谷歌搜索几个小时后,我无法找到我可以使用的一个代码.

据我所知,为了使用这个算法,我必须将数据集分成4个点,对吗? 1234 5678等.据我注意到,我唯一的问题是找到每个组中间的分数.我的意思是说,如果我正在计算一个点数为1234的曲线,我已经有了点1和4,我需要计算2和3,对吗?但是对我来说这是一个谜.

我想问你们,如果你知道C,C或Objective-C中的一些代码,可以使用任意数量的数据集来计算曲线.

我需要的是:我发送代码一个数组与数据集,我收到一个数组与点绘制.

我的数学生锈所以,请给我实际的例子.不要把我发给具有数学理论和方程的页面.看着这些页面让我的大脑受伤了

告诉我该怎么做,我必须计算bezier的点数.

回答,你会问一个10岁的孩子…:D

谢谢.

解决方法

C#中怎么样?
private void drawCasteljau(List<point> points) {
            Point tmp;
            for (double t = 0; t <= 1; t += 0.001) { 
                tmp = getCasteljauPoint(points.Count-1,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));
    }

从这里:

http://protein.ektf.hu/book/export/html/51

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读