首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭Bezier曲线

闭Bezier曲线
EN

Stack Overflow用户
提问于 2015-11-14 23:59:34
回答 1查看 2K关注 0票数 0

我实现了Bezier曲线绘制函数,如下所示:

代码语言:javascript
复制
Vector Bezier(float t)
{
    Vector rt(0,0);
    int n = length-1;
    for(int i=0;i<length;i++)
    {
        float Bi = 1;
        for(int j = 1;j<=i;j++)
        {
            Bi *= (float) (n-j+1)/j;
        }
        Bi *= pow(t,i) * pow(1-t, n-i);
        rt = rt + (Cpoints[i] * Bi);
    }
    return rt;
}

void drawBezier()
{
    int segments = 100;
    glBegin( GL_LINE_STRIP );
        for(int i=0;i<segments;i++)
        {
            float t = (float) i / segments;
            Vector p = Bezier(t);
            glVertex2f(p.x, p.y);
        }
    glEnd( );
}

CPoints是一个包含控制点坐标的数组,长度是控制点的数目。问题是,如何使它成为一个封闭的Bezier曲线,就像这样:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-15 00:19:09

只需使用连接最后一个端点到第一个端点的附加段(例如:复制第一个控制点)。

单个bezier样条段,无论是三次的,二次的,还是四次的,都不能表示这种封闭的形状。但是多个片段可以。

因此,您通常不想修改您的多段曲线绘制功能,就其本身而言,而是您输入的控制点。尽管您可以修改绘图函数以接受标志来绘制结束段,但可能更容易将其视为与作为输入的控制点/曲线段相关联的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33714839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档