当前位置:首页 » 编程语言 » C语言贝塞尔多项式
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言贝塞尔多项式

发布时间: 2022-09-25 22:39:19

1. 如何将论文中的数学(高数)问题,转化为c++代码

这个看上去是产生一个理想曲面。A 不同,结果不同。
你需要懂得 用 伯恩斯坦-贝塞尔多项式 离散化 表示曲面的 方法。
先定出循环计算的点,算出贝塞尔系数。
有了系数后,便可在定义域范围内 一点一点计算 -- 类似空间插值计算。
有了 可数值计算的 计算方法后,再用c/c++语言描述你的计算,这便叫代码。

有限单元法里常用的,三角形内一点的函数值,用 三角形3个顶点处的函数值表示,
可数值计算的 计算方法 就是 定出计算点,算出它的面积座标,用面积座标为权,
加权平均,得出。

这里 复杂些。但基本概念类似,约束边界是你的曲面边界。理想曲面,文里给了参数方程。

2. c语言实现多边形填充

楼主问的是图形学算法。。1楼给出的是??
有以前写了一个多边形种子填充算法用的是贝塞尔方法你拿去看下把。。
1 用Bresenham直线与圆组成的扇形
void CFill4Dlg::Bresenham(int x0,int y0,int x1,int y1,int color)
{
int x,y,dx,dy,e;
dx=y1-x0;
dy=y1-y0;
e=-dx;
x=x0;
y=y0;
CClientDC dc(this);
for(x=x0;x<x1;x++)
{
dc.SetPixel(x,(int)(y+0.5),color);
e=e+2*dy;
if(e>=0)
{
y++;
e=e-2*dx;
}
}
}
void CFill4Dlg::CirclePoints(int x,int y,int m,int n,int color)
{
CClientDC dc(this);
dc.SetPixel(x+m_cx,y+m_cy,color);
dc.SetPixel(y+m_cx,x+m_cy,color);
dc.SetPixel(-x+m_cx,y+m_cy,color);
dc.SetPixel(y+m_cx,-x+m_cy,color);
dc.SetPixel(x+m_cx,-y+m_cy,color);
dc.SetPixel(-y+m_cx,x+m_cy,color);
dc.SetPixel(-x+m_cx,-y+m_cy,color);
dc.SetPixel(-y+m_cx,-x+m_cy,color);
}
void CFill4Dlg::MidPointCircle(int r,int m,int n,int color)
{
int x,y;
float d;
x=0;
y=r;
d=float(1.25-r);
CirclePoints(x,y,m,n,color);
while(x<=y)
{
if(d<0)
d+=2*x+3;
else
{
d+=2*(x-y)+5;
y--;
}
x++;
CirclePoints(x,y,m,n,color);
}
}

2 填充:
种子设定 filled_color=getpixel(m_zx,m_zy);
typedef struct
{//记录种子点
int x;
int y;
}seed;
seed * seed_p;
#define STACKTOTAL 3000
void stack_init();
void setstackempty();
void stackpush(seed pt);
seed stackpop();
bool isstackempty();
int stack_number;
填充:
void CFill4Dlg::FloodFill4(int x,int y,int oldcolor,int newcolor)
{
CClientDC dc(this);
if((int)dc.GetPixel(x,y)==oldcolor)
{
drawpixel(x,y,newcolor);
FloodFill4(x,y+1,oldcolor,newcolor);
FloodFill4(x,y-1,oldcolor,newcolor);
FloodFill4(x-1,y,oldcolor,newcolor);
FloodFill4(x+1,y,oldcolor,newcolor);
}
}
void CFill4Dlg::drawpixel(int x, int y, int color)
{
CClientDC dc(this);
dc.SetPixel(x,y,color);
}

3. C++ 贝塞尔曲线 取点问题

sof上有人提过这个问题, 咕狗搜"Pixel by pixel Bézier Curve", 我没仔细看, 大致有把曲线每一段都分为恰好一个像素的算法
对于圆形之类简单的常用图形搜"曲线生成算法"有说明如何按像素来绘制一些曲线

4. C语言算法速查手册的目录

第1章绪论1
1.1程序设计语言概述1
1.1.1机器语言1
1.1.2汇编语言2
1.1.3高级语言2
1.1.4C语言3
1.2C语言的优点和缺点4
1.2.1C语言的优点4
1.2.2C语言的缺点6
1.3算法概述7
1.3.1算法的基本特征7
1.3.2算法的复杂度8
1.3.3算法的准确性10
1.3.4算法的稳定性14
第2章复数运算18
2.1复数的四则运算18
2.1.1[算法1]复数乘法18
2.1.2[算法2]复数除法20
2.1.3【实例5】 复数的四则运算22
2.2复数的常用函数运算23
2.2.1[算法3]复数的乘幂23
2.2.2[算法4]复数的n次方根25
2.2.3[算法5]复数指数27
2.2.4[算法6]复数对数29
2.2.5[算法7]复数正弦30
2.2.6[算法8]复数余弦32
2.2.7【实例6】 复数的函数运算34
第3章多项式计算37
3.1多项式的表示方法37
3.1.1系数表示法37
3.1.2点表示法38
3.1.3[算法9]系数表示转化为点表示38
3.1.4[算法10]点表示转化为系数表示42
3.1.5【实例7】系数表示法与点表示法的转化46
3.2多项式运算47
3.2.1[算法11]复系数多项式相乘47
3.2.2[算法12]实系数多项式相乘50
3.2.3[算法13]复系数多项式相除52
3.2.4[算法14]实系数多项式相除54
3.2.5【实例8】复系数多项式的乘除法56
3.2.6【实例9】实系数多项式的乘除法57
3.3多项式的求值59
3.3.1[算法15]一元多项式求值59
3.3.2[算法16]一元多项式多组求值60
3.3.3[算法17]二元多项式求值63
3.3.4【实例10】一元多项式求值65
3.3.5【实例11】二元多项式求值66
第4章矩阵计算68
4.1矩阵相乘68
4.1.1[算法18]实矩阵相乘68
4.1.2[算法19]复矩阵相乘70
4.1.3【实例12】 实矩阵与复矩阵的乘法72
4.2矩阵的秩与行列式值73
4.2.1[算法20]求矩阵的秩73
4.2.2[算法21]求一般矩阵的行列式值76
4.2.3[算法22]求对称正定矩阵的行列式值80
4.2.4【实例13】 求矩阵的秩和行列式值82
4.3矩阵求逆84
4.3.1[算法23]求一般复矩阵的逆84
4.3.2[算法24]求对称正定矩阵的逆90
4.3.3[算法25]求托伯利兹矩阵逆的Trench方法92
4.3.4【实例14】 验证矩阵求逆算法97
4.3.5【实例15】 验证T矩阵求逆算法99
4.4矩阵分解与相似变换102
4.4.1[算法26]实对称矩阵的LDL分解102
4.4.2[算法27]对称正定实矩阵的Cholesky分解104
4.4.3[算法28]一般实矩阵的全选主元LU分解107
4.4.4[算法29]一般实矩阵的QR分解112
4.4.5[算法30]对称实矩阵相似变换为对称三对角阵116
4.4.6[算法31]一般实矩阵相似变换为上Hessen-Burg矩阵121
4.4.7【实例16】 对一般实矩阵进行QR分解126
4.4.8【实例17】 对称矩阵的相似变换127
4.4.9【实例18】 一般实矩阵相似变换129
4.5矩阵特征值的计算130
4.5.1[算法32]求上Hessen-Burg矩阵全部特征值的QR方法130
4.5.2[算法33]求对称三对角阵的全部特征值137
4.5.3[算法34]求对称矩阵特征值的雅可比法143
4.5.4[算法35]求对称矩阵特征值的雅可比过关法147
4.5.5【实例19】 求上Hessen-Burg矩阵特征值151
4.5.6【实例20】 分别用两种雅克比法求对称矩阵特征值152
第5章线性代数方程组的求解154
5.1高斯消去法154
5.1.1[算法36]求解复系数方程组的全选主元高斯消去法155
5.1.2[算法37]求解实系数方程组的全选主元高斯消去法160
5.1.3[算法38]求解复系数方程组的全选主元高斯-约当消去法163
5.1.4[算法39]求解实系数方程组的全选主元高斯-约当消去法168
5.1.5[算法40]求解大型稀疏系数矩阵方程组的高斯-约当消去法171
5.1.6[算法41]求解三对角线方程组的追赶法174
5.1.7[算法42]求解带型方程组的方法176
5.1.8【实例21】 解线性实系数方程组179
5.1.9【实例22】 解线性复系数方程组180
5.1.10【实例23】 解三对角线方程组182
5.2矩阵分解法184
5.2.1[算法43]求解对称方程组的LDL分解法184
5.2.2[算法44]求解对称正定方程组的Cholesky分解法186
5.2.3[算法45]求解线性最小二乘问题的QR分解法188
5.2.4【实例24】 求解对称正定方程组191
5.2.5【实例25】 求解线性最小二乘问题192
5.3迭代方法193
5.3.1[算法46]病态方程组的求解193
5.3.2[算法47]雅克比迭代法197
5.3.3[算法48]高斯-塞德尔迭代法200
5.3.4[算法49]超松弛方法203
5.3.5[算法50]求解对称正定方程组的共轭梯度方法205
5.3.6[算法51]求解托伯利兹方程组的列文逊方法209
5.3.7【实例26】 解病态方程组214
5.3.8【实例27】 用迭代法解方程组215
5.3.9【实例28】 求解托伯利兹方程组217
第6章非线性方程与方程组的求解219
6.1非线性方程求根的基本过程219
6.1.1确定非线性方程实根的初始近似值或根的所在区间219
6.1.2求非线性方程根的精确解221
6.2求非线性方程一个实根的方法221
6.2.1[算法52]对分法221
6.2.2[算法53]牛顿法223
6.2.3[算法54]插值法226
6.2.4[算法55]埃特金迭代法229
6.2.5【实例29】 用对分法求非线性方程组的实根232
6.2.6【实例30】 用牛顿法求非线性方程组的实根233
6.2.7【实例31】 用插值法求非线性方程组的实根235
6.2.8【实例32】 用埃特金迭代法求非线性方程组的实根237
6.3求实系数多项式方程全部根的方法238
6.3.1[算法56]QR方法238
6.3.2【实例33】用QR方法求解多项式的全部根240
6.4求非线性方程组一组实根的方法241
6.4.1[算法57]梯度法241
6.4.2[算法58]拟牛顿法244
6.4.3【实例34】 用梯度法计算非线性方程组的一组实根250
6.4.4【实例35】 用拟牛顿法计算非线性方程组的一组实根252
第7章代数插值法254
7.1拉格朗日插值法254
7.1.1[算法59]线性插值255
7.1.2[算法60]二次抛物线插值256
7.1.3[算法61]全区间插值259
7.1.4【实例36】 拉格朗日插值262
7.2埃尔米特插值263
7.2.1[算法62]埃尔米特不等距插值263
7.2.2[算法63]埃尔米特等距插值267
7.2.3【实例37】 埃尔米特插值法270
7.3埃特金逐步插值271
7.3.1[算法64]埃特金不等距插值272
7.3.2[算法65]埃特金等距插值275
7.3.3【实例38】 埃特金插值278
7.4光滑插值279
7.4.1[算法66]光滑不等距插值279
7.4.2[算法67]光滑等距插值283
7.4.3【实例39】 光滑插值286
7.5三次样条插值287
7.5.1[算法68]第一类边界条件的三次样条函数插值287
7.5.2[算法69]第二类边界条件的三次样条函数插值292
7.5.3[算法70]第三类边界条件的三次样条函数插值296
7.5.4【实例40】 样条插值法301
7.6连分式插值303
7.6.1[算法71]连分式插值304
7.6.2【实例41】 验证连分式插值的函数308
第8章数值积分法309
8.1变步长求积法310
8.1.1[算法72]变步长梯形求积法310
8.1.2[算法73]自适应梯形求积法313
8.1.3[算法74]变步长辛卜生求积法316
8.1.4[算法75]变步长辛卜生二重积分方法318
8.1.5[算法76]龙贝格积分322
8.1.6【实例42】 变步长积分法进行一重积分325
8.1.7【实例43】 变步长辛卜生积分法进行二重积分326
8.2高斯求积法328
8.2.1[算法77]勒让德-高斯求积法328
8.2.2[算法78]切比雪夫求积法331
8.2.3[算法79]拉盖尔-高斯求积法334
8.2.4[算法80]埃尔米特-高斯求积法336
8.2.5[算法81]自适应高斯求积方法337
8.2.6【实例44】 有限区间高斯求积法342
8.2.7【实例45】 半无限区间内高斯求积法343
8.2.8【实例46】 无限区间内高斯求积法345
8.3连分式法346
8.3.1[算法82]计算一重积分的连分式方法346
8.3.2[算法83]计算二重积分的连分式方法350
8.3.3【实例47】 连分式法进行一重积分354
8.3.4【实例48】 连分式法进行二重积分355
8.4蒙特卡洛法356
8.4.1[算法84]蒙特卡洛法进行一重积分356
8.4.2[算法85]蒙特卡洛法进行二重积分358
8.4.3【实例49】 一重积分的蒙特卡洛法360
8.4.4【实例50】 二重积分的蒙特卡洛法361
第9章常微分方程(组)初值问题的求解363
9.1欧拉方法364
9.1.1[算法86]定步长欧拉方法364
9.1.2[算法87]变步长欧拉方法366
9.1.3[算法88]改进的欧拉方法370
9.1.4【实例51】 欧拉方法求常微分方程数值解372
9.2龙格-库塔方法376
9.2.1[算法89]定步长龙格-库塔方法376
9.2.2[算法90]变步长龙格-库塔方法379
9.2.3[算法91]变步长基尔方法383
9.2.4【实例52】 龙格-库塔方法求常微分方程的初值问题386
9.3线性多步法390
9.3.1[算法92]阿当姆斯预报校正法390
9.3.2[算法93]哈明方法394
9.3.3[算法94]全区间积分的双边法399
9.3.4【实例53】 线性多步法求常微分方程组初值问题401
第10章拟合与逼近405
10.1一元多项式拟合405
10.1.1[算法95]最小二乘拟合405
10.1.2[算法96]最佳一致逼近的里米兹方法412
10.1.3【实例54】 一元多项式拟合417
10.2矩形区域曲面拟合419
10.2.1[算法97]矩形区域最小二乘曲面拟合419
10.2.2【实例55】 二元多项式拟合428
第11章特殊函数430
11.1连分式级数和指数积分430
11.1.1[算法98]连分式级数求值430
11.1.2[算法99]指数积分433
11.1.3【实例56】 连分式级数求值436
11.1.4【实例57】 指数积分求值438
11.2伽马函数439
11.2.1[算法100]伽马函数439
11.2.2[算法101]贝塔函数441
11.2.3[算法102]阶乘442
11.2.4【实例58】伽马函数和贝塔函数求值443
11.2.5【实例59】阶乘求值444
11.3不完全伽马函数445
11.3.1[算法103]不完全伽马函数445
11.3.2[算法104]误差函数448
11.3.3[算法105]卡方分布函数450
11.3.4【实例60】不完全伽马函数求值451
11.3.5【实例61】误差函数求值452
11.3.6【实例62】卡方分布函数求值453
11.4不完全贝塔函数454
11.4.1[算法106]不完全贝塔函数454
11.4.2[算法107]学生分布函数457
11.4.3[算法108]累积二项式分布函数458
11.4.4【实例63】不完全贝塔函数求值459
11.5贝塞尔函数461
11.5.1[算法109]第一类整数阶贝塞尔函数461
11.5.2[算法110]第二类整数阶贝塞尔函数466
11.5.3[算法111]变型第一类整数阶贝塞尔函数469
11.5.4[算法112]变型第二类整数阶贝塞尔函数473
11.5.5【实例64】贝塞尔函数求值476
11.5.6【实例65】变型贝塞尔函数求值477
11.6Carlson椭圆积分479
11.6.1[算法113]第一类椭圆积分479
11.6.2[算法114]第一类椭圆积分的退化形式481
11.6.3[算法115]第二类椭圆积分483
11.6.4[算法116]第三类椭圆积分486
11.6.5【实例66】第一类勒让德椭圆函数积分求值490
11.6.6【实例67】第二类勒让德椭圆函数积分求值492
第12章极值问题494
12.1一维极值求解方法494
12.1.1[算法117]确定极小值点所在的区间494
12.1.2[算法118]一维黄金分割搜索499
12.1.3[算法119]一维Brent方法502
12.1.4[算法120]使用一阶导数的Brent方法506
12.1.5【实例68】使用黄金分割搜索法求极值511
12.1.6【实例69】使用Brent法求极值513
12.1.7【实例70】使用带导数的Brent法求极值515
12.2多元函数求极值517
12.2.1[算法121]不需要导数的一维搜索517
12.2.2[算法122]需要导数的一维搜索519
12.2.3[算法123]Powell方法522
12.2.4[算法124]共轭梯度法525
12.2.5[算法125]准牛顿法531
12.2.6【实例71】验证不使用导数的一维搜索536
12.2.7【实例72】用Powell算法求极值537
12.2.8【实例73】用共轭梯度法求极值539
12.2.9【实例74】用准牛顿法求极值540
12.3单纯形法542
12.3.1[算法126]求无约束条件下n维极值的单纯形法542
12.3.2[算法127]求有约束条件下n维极值的单纯形法548
12.3.3[算法128]解线性规划问题的单纯形法556
12.3.4【实例75】用单纯形法求无约束条件下N维的极值568
12.3.5【实例76】用单纯形法求有约束条件下N维的极值569
12.3.6【实例77】求解线性规划问题571
第13章随机数产生与统计描述574
13.1均匀分布随机序列574
13.1.1[算法129]产生0到1之间均匀分布的一个随机数574
13.1.2[算法130]产生0到1之间均匀分布的随机数序列576
13.1.3[算法131]产生任意区间内均匀分布的一个随机整数577
13.1.4[算法132]产生任意区间内均匀分布的随机整数序列578
13.1.5【实例78】产生0到1之间均匀分布的随机数序列580
13.1.6【实例79】产生任意区间内均匀分布的随机整数序列581
13.2正态分布随机序列582
13.2.1[算法133]产生任意均值与方差的正态分布的一个随机数582
13.2.2[算法134]产生任意均值与方差的正态分布的随机数序列585
13.2.3【实例80】产生任意均值与方差的正态分布的一个随机数587
13.2.4【实例81】产生任意均值与方差的正态分布的随机数序列588
13.3统计描述589
13.3.1[算法135]分布的矩589
13.3.2[算法136]方差相同时的t分布检验591
13.3.3[算法137]方差不同时的t分布检验594
13.3.4[算法138]方差的F检验596
13.3.5[算法139]卡方检验599
13.3.6【实例82】计算随机样本的矩601
13.3.7【实例83】t分布检验602
13.3.8【实例84】F分布检验605
13.3.9【实例85】检验卡方检验的算法607
第14章查找609
14.1基本查找609
14.1.1[算法140]有序数组的二分查找609
14.1.2[算法141]无序数组同时查找最大和最小的元素611
14.1.3[算法142]无序数组查找第M小的元素613
14.1.4【实例86】基本查找615
14.2结构体和磁盘文件的查找617
14.2.1[算法143]无序结构体数组的顺序查找617
14.2.2[算法144]磁盘文件中记录的顺序查找618
14.2.3【实例87】结构体数组和文件中的查找619
14.3哈希查找622
14.3.1[算法145]字符串哈希函数622
14.3.2[算法146]哈希函数626
14.3.3[算法147]向哈希表中插入元素628
14.3.4[算法148]在哈希表中查找元素629
14.3.5[算法149]在哈希表中删除元素631
14.3.6【实例88】构造哈希表并进行查找632
第15章排序636
15.1插入排序636
15.1.1[算法150]直接插入排序636
15.1.2[算法151]希尔排序637
15.1.3【实例89】插入排序639
15.2交换排序641
15.2.1[算法152]气泡排序641
15.2.2[算法153]快速排序642
15.2.3【实例90】交换排序644
15.3选择排序646
15.3.1[算法154]直接选择排序646
15.3.2[算法155]堆排序647
15.3.3【实例91】选择排序650
15.4线性时间排序651
15.4.1[算法156]计数排序651
15.4.2[算法157]基数排序653
15.4.3【实例92】线性时间排序656
15.5归并排序657
15.5.1[算法158]二路归并排序658
15.5.2【实例93】二路归并排序660
第16章数学变换与滤波662
16.1快速傅里叶变换662
16.1.1[算法159]复数据快速傅里叶变换662
16.1.2[算法160]复数据快速傅里叶逆变换666
16.1.3[算法161]实数据快速傅里叶变换669
16.1.4【实例94】验证傅里叶变换的函数671
16.2其他常用变换674
16.2.1[算法162]快速沃尔什变换674
16.2.2[算法163]快速哈达玛变换678
16.2.3[算法164]快速余弦变换682
16.2.4【实例95】验证沃尔什变换和哈达玛的函数684
16.2.5【实例96】验证离散余弦变换的函数687
16.3平滑和滤波688
16.3.1[算法165]五点三次平滑689
16.3.2[算法166]α-β-γ滤波690
16.3.3【实例97】验证五点三次平滑692
16.3.4【实例98】验证α-β-γ滤波算法693

5. 关于windows屏幕保护程序中贝塞尔曲线的问题

/*
产生三次方贝塞尔曲线的程序码
*/

typedef struct
{
float x;
float y;
}
Point2D;

/*
cp 在此是四个元素的阵列:
cp[0] 为起始点,或上图中的 P0
cp[1] 为第一个控制点,或上图中的 P1
cp[2] 为第二个控制点,或上图中的 P2
cp[3] 为结束点,或上图中的 P3
t 为参数值,0 <= t <= 1
*/

Point2D PointOnCubicBezier( Point2D* cp, float t )
{
float ax, bx, cx;
float ay, by, cy;
float tSquared, tCubed;
Point2D result;

/* 计算多项式系数 */

cx = 3.0 * (cp[1].x - cp[0].x);
bx = 3.0 * (cp[2].x - cp[1].x) - cx;
ax = cp[3].x - cp[0].x - cx - bx;

cy = 3.0 * (cp[1].y - cp[0].y);
by = 3.0 * (cp[2].y - cp[1].y) - cy;
ay = cp[3].y - cp[0].y - cy - by;

/* 计算位于参数值 t 的曲线点 */

tSquared = t * t;
tCubed = tSquared * t;

result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;

return result;
}

/*
ComputeBezier 以控制点 cp 所产生的曲线点,填入 Point2D 结构的阵列。
呼叫者必须分配足够的内存以供输出结果,其为 <sizeof(Point2D) numberOfPoints>
*/

void ComputeBezier( Point2D* cp, int numberOfPoints, Point2D* curve )
{
float dt;
int i;

dt = 1.0 / ( numberOfPoints - 1 );

for( i = 0; i < numberOfPoints; i++)
curve[i] = PointOnCubicBezier( cp, i*dt );
}

6. C语言编程高手进——贝塞尔曲线程序

/* Subroutine to generate a Bezier curve.
Copyright (c) 2000 David F. Rogers. All rights reserved.

b[] = array containing the defining polygon vertices
b[1] contains the x-component of the vertex
b[2] contains the y-component of the vertex
b[3] contains the z-component of the vertex
Basis = function to calculate the Bernstein basis value (see MECG Eq 5-65)
cpts = number of points to be calculated on the curve
Fractrl = function to calculate the factorial of a number
j[] = array containing the basis functions for a single value of t
npts = number of defining polygon vertices
p[] = array containing the curve points
p[1] contains the x-component of the point
p[2] contains the y-component of the point
p[3] contains the z-component of the point
t = parameter value 0 <= t <= 1
*/

#include <math.h>

/* 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 */

bezier(npts,b,cpts,p)

int cpts;
int npts;

float b[];
float p[];

{
int i;
int j;
int i1;
int icount;
int jcount;
int n;

float step;
float t;

float factrl(int);
float Ni(int,int);
float Basis(int,int,float);

/* calculate the points on the Bezier curve */

icount = 0;
t = 0;
step = 1.0/((float)(cpts -1));

for (i1 = 1; i1<=cpts; i1++){ /* main loop */

if ((1.0 - t) < 5e-6) t = 1.0;

for (j = 1; j <= 3; j++){ /* generate a point on the curve */
jcount = j;
p[icount+j] = 0.;
for (i = 1; i <= npts; i++){ /* Do x,y,z components */
p[icount + j] = p[icount + j] + Basis(npts-1,i-1,t)*b[jcount];
jcount = jcount + 3;
}
}

icount = icount + 3;
t = t + step;
}
}

7. 求二次贝塞尔曲线 算法实现

typedefstruct

{

floatx;

floaty;

}Point2D;

/*cp在此是四个元素的数组:

cp[0]为起点,或上图中的P0

cp[1]为第一控制点,或上图中的P1

cp[2]为第二控制点,或上图中的P2

cp[3]为结束点,或上图中的P3

t为参数值,0<=t<=1*/

Point2DPointOnCubicBezier(Point2D*cp,floatt)

{

floatax,bx,cx;floatay,by,cy;

floattSquared,tCubed;Point2Dresult;

/*计算多项式系数*/

cx=3.0*(cp[1].x-cp[0].x);

bx=3.0*(cp[2].x-cp[1].x)-cx;

ax=cp[3].x-cp[0].x-cx-bx;

cy=3.0*(cp[1].y-cp[0].y);

by=3.0*(cp[2].y-cp[1].y)-cy;

ay=cp[3].y-cp[0].y-cy-by;

/*计算t位置的点值*/

tSquared=t*t;

tCubed=tSquared*t;

result.x=(ax*tCubed)+(bx*tSquared)+(cx*t)+cp[0].x;

result.y=(ay*tCubed)+(by*tSquared)+(cy*t)+cp[0].y;

returnresult;

}

/*ComputeBezier以控制点cp所产生的曲线点,填入Point2D结构数组。

调用方必须分配足够的空间以供输出,<sizeof(Point2D)numberOfPoints>*/

voidComputeBezier(Point2D*cp,intnumberOfPoints,Point2D*curve)

{

floatdt;inti;

dt=1.0/(numberOfPoints-1);

for(i=0;i<numberOfPoints;i++)

curve[i]=PointOnCubicBezier(cp,i*dt);

}

8. C语言画图模式下如何将当前坐标赋给一个变量方面下面引用该坐标值。

楼主您好,你这个分值已经吸引了我
在下不才,也是自己写过一些c语言画图模式下的程序。所以我认为我在这一方面具有一定的权威.
(文本模式下)
我对于您的问题理解的不是很透彻,但是看字面意思来说,您是想当前坐标赋值给变量,我假设变量为(x、y)分别为x轴、y轴坐标变量。则将坐标赋值,为x=getx();y=gety();
(画图模式下)
在这里,我一般是直接对寄存器进行中断取得 鼠标 的值。在对他进行操作。
c语言只有以上2种模式,通过你的提问,我觉得你问的是文本模式下的。如果你觉得我回答不够详细,可以直接加QQ:942690451 询问。

9. 如何用C语言实现hankel函数

MATLAB提供了计算贝塞尔函数的函数,具体包括:

besselj - 第一类贝塞尔函数,或简称贝塞尔函数;
bessely - 第二类贝塞尔函数,又称诺伊曼函数(Neumann function);
besseli - 第一类修正贝塞尔函数;
besselk - 第二类修正贝塞尔函数;
besselh - 第三类贝塞尔函数,又称汉克尔函数(Hankel function).

这几个函数的调用语法基本相同,例如

J = besselj(nu,Z)

J = besselj(nu,Z,1)

[J,ierr] = besselj(nu,Z)

其中,nu为贝塞尔函数的阶数,Z为函数自变量.阶数必须为实数,但Z可以是复数.

值得一提的是,上述函数是MATLAB基本模块(也就是说不需要任何附加的工具箱)提供的特殊函数,采用数值方法计算;而符号数学工具箱则提供了第一和第二类的4个贝塞尔函数,名称和调用方式都与MATLAB基本系统的4个函数完全一致,但支持微分、积分等符号运算.