Wu反走样算法绘制圆(C++/MFC实现)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Wu反走样算法绘制圆(C++/MFC实现),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1550字,纯文字阅读大概需要3分钟。
内容图文
![Wu反走样算法绘制圆(C++/MFC实现)](/upload/InfoBanner/zyjiaocheng/857/dc7301a169f24099b6d63fde22e4703c.jpg)
Wu反走样圆
原理:参考Bresenham算法,在主位移过程中计算出离理想圆最近的两个点,赋予不同的亮度值,绘制像素点即可!
MFC 中CXXXView类中添加函数:
//Wu算法画反走样圆
void CMy3_4View::OnwuCir()
{
// TODO: Add your command handler code here
yoci5 dlg;//这是一个对话框,也可以不用对话框输入参数直接在下面赋值即可
if(IDOK==dlg.DoModal())
{
int y=dlg.m_R;//圆半径
double d1, d2;//两点到圆距离
double d=1.25-dlg.m_R;//初始值
for(int x=0; x<=(dlg.m_R/sqrt(2)); x++)
{
//算上下两点到理想圆的距离,作为亮度参数
d1=(double)sqrt((x-dlg.m_x)*(x-dlg.m_x) + (y-1-dlg.m_y)*(y-1-dlg.m_y))-dlg.m_R;
d2=(double)sqrt((x-dlg.m_x)*(x-dlg.m_x) + (y-1-dlg.m_y)*(y-1-dlg.m_y))-dlg.m_R;
if(d1>0)
{
//8分法画圆
div_8(x, y, fabs(d1));
div_8(x, y-1, 1-fabs(d1));//调用8分画圆函数
}
else
{
div_8(x, y, fabs(d1));
div_8(x, y-1, 1+d1);
}
if(d<0)
{
d+=2*x+3;
}
else
{
d+=2*(x-y)+5;
y--;
}
}
}
}
//8分法画圆
void CMy3_4View::div_8(int x, int y, double d)
{
CDC *pDC = GetDC();
//定义二维坐标系
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(rect.Width(), rect.Height());
pDC->SetViewportExt(rect.Width(), -rect.Height());
pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);
rect.OffsetRect(-rect.Width()/2, -rect.Height()/2);
COLORREF clr = RGB(d*255, d*255, d*255);
pDC->SetPixelV(x, y, clr);
pDC->SetPixelV(y, x, clr); //关于y=x对称
pDC->SetPixelV(y, -x, clr);
pDC->SetPixelV(x, -y, clr); //关于x=0对称
pDC->SetPixelV(-x, -y, clr);//关于原点对称
pDC->SetPixelV(-y, -x, clr);
pDC->SetPixelV(-y, x, clr);
pDC->SetPixelV(-x, y, clr); //关于y=0对称
pDC->DeleteDC();
}
VC++ 6.0编译通过!如有问题,请留言。
内容总结
以上是互联网集市为您收集整理的Wu反走样算法绘制圆(C++/MFC实现)全部内容,希望文章能够帮你解决Wu反走样算法绘制圆(C++/MFC实现)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。