首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

mfc中用pen画图非常不平滑如何解决

2012-01-11 
mfc中用pen画图非常不平滑怎么解决?想画出函数y73.8555xx - 30.7270x+ 4.0363在区间(0,0.4)之间的曲线,

mfc中用pen画图非常不平滑怎么解决?
想画出函数y=73.8555 × x × x - 30.7270 × x+ 4.0363;在区间(0,0.4)之间的曲线,下面是部分程序:
for(int i = 10; i < width-10; i ++)
{

int x = i;
 int y = 73.8555*((i*0.4/width)*(i*0.4/width))-30.7270*(i*0.4/width)+4.0363;
 y=higth -y*higth/5;
if(y < 0) 
{
dc->MoveTo(x,y);
}
else dc->LineTo(x,y);
}
在listbox里画出图来,曲线的趋势倒是对了(先递减再递增),但是整个曲线由可数的几段组成,一节一节的完全没法看,我检查了一下width和higth至少都有260个点,为什么还出来这样的效果,等候达人指点……


[解决办法]
呵呵,260个点太少了。。。

你的循环间隔太大了,所以就会出现这样的现象。

最好在内存里画图,然后再一起“贴”到屏幕上,会比较快些。
[解决办法]
GDI不支持反走样,用GDI+或者自己实现反走样算法。
[解决办法]
1)正如楼上讲的:GDI不支持反走样, LZ可使用具有反走样的2D矢量库; 或自己处理, 如使用SuperSample的算法简单就可以处理了; 
GDI+提供Antialiasing功能:
myGraphics.SmoothingMode = SmoothingMode.AntiAlias;
myGraphics.DrawLine(myPen, 0, 0, 12, 8);
2)绘制线段过少, 楼上已经讲了;
3)不要使用直线逆合曲线, 在曲线跨度较大的时候, 产生的直线会很多; 可以使用2次/3次Bezier曲线进行逆合----一条或分段的Bezier曲线;

个人不大喜欢GDI+, 原因非常简单, 在非Windows的平台上有GDI+吗?

热点排行