• 大小: 334KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: C/C++
  • 标签: Bezier  Curve  贝塞尔  

资源简介

本项目为vs2013工程项目,贝塞尔曲线计算,控制点可以多个,支持二维数据,三维数据,使用c++语言编写,直接打开即可运行。

资源截图

代码片段和文件信息

#include “BezierCurve.h“


namespace CBezierCurve{

// function to calculate the factorial
float Factrl(int n)
{
static int ntop = 6;
static float a[33] = { 1.0 1.0 2.0 6.0 24.0 120.0 720.0 }; /* fill in the first few values */
int j1;

if (n < 0) printf(“\nNegative factorial in routine FACTRL\n“);
if (n > 32) printf(“\nFactorial value too large in routine FACTRL\n“);

while (ntop < n) { /* use the precalulated value for n = 0....6 */
j1 = ntop++;
a[n] = a[j1] * ntop;
}
return a[n]; /* returns the value n! as a floating point number */
}

// function to calculate the factorial function for Bernstein basis
float Ni(int n int i)
{
float ni;
ni = Factrl(n) / (Factrl(i)*Factrl(n - i));
return ni;
}

// function to calculate the Bernstein basis
float Basis(int n int i float t)
{
float basis;
float ti; /* this is t^i */
float tni; /* this is (1 - t)^i */

/* handle the special cases to avoid domain problem with pow */

if (t == 0. && i == 0)
ti = 1.0;
else
ti = pow(t i);

if (n == i && t == 1.)
tni = 1.0;
else
tni = pow((1 - t) (n - i));
basis = Ni(n i)*ti*tni; /* calculate Bernstein basis function */
return basis;
}

// Bezier curve subroutine
int Bezier(SPoint *sPoint int inPointNum SPoint *sOutPoint int outPointNum)
{

float step;
float t;

/*    calculate the points on the Bezier curve */

t = 0;
step = 1.0f / ((float)(outPointNum - 1));

for (int i1 = 0; i1 < outPointNum; i1++) /* main loop */
{
if ((1.0 - t) < 5e-6)
{
t = 1.0;
}

sOutPoint[i1].x = 0.0;
sOutPoint[i1].y = 0.0;
sOutPoint[i1].z = 0.0;
for (int posi = 0; posi < inPointNum; posi++) /* Do xyz components */
{
sOutPoint[i1].x = sOutPoint[i1].x + Basis(inPointNum - 1 posi t)*sPoint[posi].x;
sOutPoint[i1].y = sOutPoint[i1].y + Basis(inPointNum - 1 posi t)*sPoint[posi].y;
sOutPoint[i1].z = sOutPoint[i1].z + Basis(inPointNum - 1 posi t)*sPoint[posi].z;
}
t = t + step;
}

return 0;
}

};

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2121  2017-04-29 14:15  BezierCurve\BezierCurve\BezierCurve.cpp

     文件       1413  2017-04-29 14:15  BezierCurve\BezierCurve\BezierCurve.h

     文件       4207  2017-04-29 14:13  BezierCurve\BezierCurve\BezierCurve.vcxproj

     文件       1164  2017-04-29 14:13  BezierCurve\BezierCurve\BezierCurve.vcxproj.filters

     文件       1124  2017-05-02 08:45  BezierCurve\BezierCurve\main.cpp

     文件    2097152  2018-05-18 16:10  BezierCurve\BezierCurve.sdf

     文件        979  2017-04-28 22:59  BezierCurve\BezierCurve.sln

    ..A..H.     25088  2018-05-18 16:10  BezierCurve\BezierCurve.v12.suo

     目录          0  2017-11-07 10:58  BezierCurve\BezierCurve

     目录          0  2018-05-18 16:10  BezierCurve

----------- ---------  ---------- -----  ----

              2133248                    10


评论

共有 条评论