如何绘制出光滑曲线 定义了一个数组POINT CollectPoints[21000];然后采集得到每个点的数据;请问如何根据这些采集到的点,绘制出平滑的曲线,一定要平滑哦,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要平滑就需要反走样,GDI函数不支持,可以使用GDI+函数Graphics::DrawCurve或者Graphics::DrawLines。另外你的数组这么大,绘制的时候一般一个屏幕容不下,需要截取部分,正确设置函数参数。 那你最好用gdi+=====================另外你需要把你的数组映射到屏幕上,否则按照时间点的话你显示不下 可以使用GDI+函数Graphics::DrawCurve或者Graphics::DrawLines。比较好用,我的采集点没有这没多,平滑的非常漂亮. 你的问题事实上是一个曲线拟合的问题.处理方法:1.采集原始数据集,即point点集;2.对这些点进行曲线拟合处理后,产生新的曲线点集;3.用新点集进行绘制,保证是连续光滑的曲线. Curve样式:http://img.ddvip.com/2008_11_13/1226541510_ddvip_1374.gif一个简单的画Curve代码: Pen greenPen(Color(255, 0, 255, 0), 10); PointF points[] = { PointF( 20.0f , 20.0f ), PointF( 160.0f, 100.0f ), PointF( 140.0f, 60.0f ), PointF( 60.0f , 100.0f ), PointF( 40.0f , 180.0f ), PointF( 160.0f , 150.0f ), PointF( 200.0f , 200.0f ),}; GraphicsPath path; path.AddCurve(points, 7); graphics.DrawPath(&bluePen, &path); LZ可以去搜Cardinal B-Spline,应该就是LZ想要的。 1)使用Bezier曲线或G光滑曲线 如可以使用2次Bezier曲线:以两个点作为第一锚点和控制点,以控制点到另顶点如第三个顶点的1/2作为第二锚点;同时以该锚点作为下一个曲线的第一锚点,第四点作为第二曲线的控制点。如此,得到一系列的点,分别依照这些点绘制2次Bezier曲线,及所有曲线是光滑的,且在连接点是光滑的;所有2次Bezier曲线连成的曲线一定是光滑的; 当然,效果要好些可以使用3次或更高次的Bezier曲线,这个看您对算法复杂度的要求2)单纯线的局部光滑使用抗锯齿就可以了,最简单的是使用SuperSample就可以了;以上两点在OpenVG都有支持,我有完整的库提供,有兴趣可以去我的Blog下载 参考我的文章:抛物样条曲线的原理说明及画抛物曲线的一个类http://blog.csdn.net/clever101/archive/2006/06/03/771160.aspx VC2010做连连看的问题 局域网中机器打开网页整个发包流程? 如何实现类似模式对话框的窗口 简单问题!大家来看下啊! 如何在程序内部控制自身的卸载 求教:怎样在一个CListCtrl控件中设定单元格的高度? 请问,如何让我的程序支持XP的主题 WindowProc问题? 反正切用什么函数? 如何得到选择的目录? 如何在一个static上面放置一个树形的控件(我不知道叫什么控件)? Ascii码显示问题
=====================
另外你需要把你的数组映射到屏幕上,否则按照时间点的话你显示不下
1.采集原始数据集,即point点集;
2.对这些点进行曲线拟合处理后,产生新的曲线点集;
3.用新点集进行绘制,保证是连续光滑的曲线.
http://img.ddvip.com/2008_11_13/1226541510_ddvip_1374.gif一个简单的画Curve代码:
Pen greenPen(Color(255, 0, 255, 0), 10);
PointF points[] = {
PointF( 20.0f , 20.0f ),
PointF( 160.0f, 100.0f ),
PointF( 140.0f, 60.0f ),
PointF( 60.0f , 100.0f ),
PointF( 40.0f , 180.0f ),
PointF( 160.0f , 150.0f ),
PointF( 200.0f , 200.0f ),};
GraphicsPath path;
path.AddCurve(points, 7);
graphics.DrawPath(&bluePen, &path);
如可以使用2次Bezier曲线:以两个点作为第一锚点和控制点,以控制点到另顶点如第三个顶点的1/2作为第二锚点;同时以该锚点作为下一个曲线的第一锚点,第四点作为第二曲线的控制点。如此,得到一系列的点,分别依照这些点绘制2次Bezier曲线,及所有曲线是光滑的,且在连接点是光滑的;所有2次Bezier曲线连成的曲线一定是光滑的;
当然,效果要好些可以使用3次或更高次的Bezier曲线,这个看您对算法复杂度的要求
2)单纯线的局部光滑使用抗锯齿就可以了,最简单的是使用SuperSample就可以了;以上两点在OpenVG都有支持,我有完整的库提供,有兴趣可以去我的Blog下载
抛物样条曲线的原理说明及画抛物曲线的一个类http://blog.csdn.net/clever101/archive/2006/06/03/771160.aspx