我在autocad中画了样条曲线,鼠标点击四次,其坐标分别为:
(103,111)、(217,153)、(344,103)、(407,195)(注:小数部分已舍去)
我从dxf文件中读出有关三次样条曲线的信息,如下:
控制点有六个,坐标如下:
(103,111)、(140,135)、(219,188)、(350,57)、(389,152)、(407,195)
拟和点有四个,坐标如下:
(103,111)、(217,153)、(344,103)、(407,195)请问:在vc中用什么函数画样条曲线?如果要自己编写函数来画,谁有这样的函数或相关资料?
(103,111)、(217,153)、(344,103)、(407,195)(注:小数部分已舍去)
我从dxf文件中读出有关三次样条曲线的信息,如下:
控制点有六个,坐标如下:
(103,111)、(140,135)、(219,188)、(350,57)、(389,152)、(407,195)
拟和点有四个,坐标如下:
(103,111)、(217,153)、(344,103)、(407,195)请问:在vc中用什么函数画样条曲线?如果要自己编写函数来画,谁有这样的函数或相关资料?
解决方案 »
- Edit能自绘么?
- 新手请教一个问题```关于按钮
- 请教一个关于图象文件的打印问题
- 晕倒,疯掉了,这段代码为什么运行起来总是提示“recordset is read_only”
- 急:图形文本的输出
- 编译问题(compile通过,build不行),为何?
- 关于怎样使用nmake的问题
- 请大家推荐一些好的关于系统底层技术的新闻组,论坛(网站)!谢谢!!!(中/英文不限)
- 哪有<<VC技术内幕>>第四版下载???有没有东莞地区的程序员???
- 只加了这一句,m_pMainWnd = &dlg;结果就不一样,
- 谁有“八女王”和“六匹马”问题的源代码,每个50分!!!!
- webbroswer控件怎么使新窗口不弹出,让他显示在原来的窗口里
PolyBezierTo这两个函数可以画,MFC和Win API都有
你可以试一试
所以,我设想由第一、三、四、六点来构造样条曲线,而PolyBezier刚好需要四个点......然而,按我的设想画出来的曲线和原曲线相比,曲度小很多(就是比较平),为什么?请高手指点!
用如下代码试试
int i,n;
n = 9;
double t,t2,t3,a0,a1,a2,a3,b0,b1,b2,b3,dt,xa,ya;
int x[4] = {103,140,219,350};//控制点x坐标
int y[4] = {111,135,188,57};//控制点y坐标
a0 = (x[0] + 4 * x[1] + x[2])/6;
a1 = -(x[0] - x[2])/2;
a2 = (x[2] - 2 * x[1] + x[0])/2;
a3 = -(x[0] - 3 * x[1] + 3 * x[2] - x[3])/6;
b0 = (y[0] + 4 * y[1] + y[2])/6;
b1 = -(y[0] - y[2])/2;
b2 = (y[2] - 2 * y[1] + y[0])/2;
b3 = -(y[0] - 3 * y[1] + 3 * y[2] - y[3])/6;
dt = 1.0/n; for (i = 0; i <= n; i ++)
{
t = i * dt;
t2 = t * t;
t3 = t2 * t;
xa = a0 + a1 * t + a2 * t2 + a3 * t3;
ya = (b0 + b1 * t + b2 * t2 + b3 * t3);
if (i == 0)
pDC->MoveTo(xa,ya);
else
pDC->LineTo(xa,ya);
}