hermite曲线[通俗易懂]

hermite曲线[通俗易懂]原理:http://www.cnblogs.com/jqm304775992/p/5044728.html//矩阵乘法voidmul(float*c,float*a,float*b,introw,intrc,intcol){for(inti=0;i

大家好,欢迎来到IT知识分享网。

原理:
http://www.cnblogs.com/jqm304775992/p/5044728.html

//矩阵乘法
void mul(float *c, float *a, float *b, int row, int rc, int col)
{
    for(int i=0; i<row; i++)
    {
        for(int j=0; j<col; j++)
        {
            float t = 0;
            for(int k=0; k<rc; k++)
                t += a[i*rc+k] * b[k*col+j];
            c[i*col+j] = t;
        }
    }
}

void hermite(CDC *pdc)
{ 
    int nctlPoints = 6;   //控制点数
    int nPoints = 100;    //每段曲线的点数

    //控制点
    float Px[] = {
  
  320, 400, 480, 560, 640, 700};
    float Py[] = {
  
  280, 120, 50,  120, 280, 300};

    //控制多边形
    pdc->MoveTo(Px[0], Py[0]);
    for(int i=0; i<nctlPoints; i++)
        pdc->LineTo(Px[i], Py[i]);

    //曲线
    CPen newPen(PS_SOLID, 2, RGB(255, 0, 0));
    pdc->SelectObject(&newPen);
    float M[4][4] = 
    {
        {
  
  2, -2,  1,  1},
        {-3, 3, -2, -1}, 
        {
  
  0,  0,  1,  0}, 
        {
  
  1,  0,  0,  0}
    };
    float delta = 1.0 / nPoints;
    for(i=0; i<nctlPoints-3; i+=2)  //完成整个曲线的连接
    {
        //设定矩阵G
        float G1[4][1] = {
  
  {Px[i]}, {Px[i+2]}, {Px[i+1]-Px[i]}, {Px[i+3]-Px[i+2]}};
        float G2[4][1] = {
  
  {Py[i]}, {Py[i+2]}, {Py[i+1]-Py[i]}, {Py[i+3]-Py[i+2]}};

        for(float t=0; t<=1; t+=delta)
        {
            //设定矩阵T
            float T[4];
            for(int k=0; k<=3; k++)    
                T[3-k] = pow(t, k);

            //计算
            float tmp[4][1], x[1], y[1];
            mul((float *)tmp, (float *)T, (float *)M, 1, 4, 4);
            mul((float *)x, (float *)tmp, (float *)G1, 1, 4, 1);
            mul((float *)y, (float *)tmp, (float *)G2, 1, 4, 1);
            if(t == 0)
                pdc->MoveTo(x[0], y[0]);
            else
                pdc->LineTo(x[0], y[0]);
        }
    }
}

这里写图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24477.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信