关于图形学里中心画圆算法的vc++的程序实现~急用~必须能运行得出来结果的!!
1个回答
展开全部
测试过了能用,MFC源码如下
void CTest1View:: roundMid(int x1,int y1,int R,CDC* pDC)
{
int x=0,y=R;
int d=1-R; //起点(0,R),下一点中点(1,R-0.5),d=1*1+(R-0.5)*(R-0.5)-R*R=1.25-R,d只参与整数运算,所以小数部分可省略
while(y>x) //y>x即第一象限的第2区八分圆
{
pDC->SetPixel(x+x1,y+y1,RGB(255,0,0)); //圆心(x1,y1),画点时直接相加平移,画2区
pDC->SetPixel(y+x1,x+y1,RGB(255,0,0)); //画1区
pDC->SetPixel(-x+x1,y+y1,RGB(255,0,0)); //画3区
pDC->SetPixel(-y+x1,x+y1,RGB(255,0,0)); //画4区
pDC->SetPixel(-x+x1,-y+y1,RGB(255,0,0)); //画5区
pDC->SetPixel(-y+x1,-x+y1,RGB(255,0,0)); //画6区
pDC->SetPixel(x+x1,-y+y1,RGB(255,0,0)); //画7区
pDC->SetPixel(y+x1,-x+y1,RGB(255,0,0)); //画8区
if(d<0)
d=d+2*x+3; //d的变化
else
{
d=d+2*(x-y)+5; //d<=0时,d的变化
y--; //y坐标减1
}
x++; //x坐标加1
}
}
void CTest1View:: roundMid(int x1,int y1,int R,CDC* pDC)
{
int x=0,y=R;
int d=1-R; //起点(0,R),下一点中点(1,R-0.5),d=1*1+(R-0.5)*(R-0.5)-R*R=1.25-R,d只参与整数运算,所以小数部分可省略
while(y>x) //y>x即第一象限的第2区八分圆
{
pDC->SetPixel(x+x1,y+y1,RGB(255,0,0)); //圆心(x1,y1),画点时直接相加平移,画2区
pDC->SetPixel(y+x1,x+y1,RGB(255,0,0)); //画1区
pDC->SetPixel(-x+x1,y+y1,RGB(255,0,0)); //画3区
pDC->SetPixel(-y+x1,x+y1,RGB(255,0,0)); //画4区
pDC->SetPixel(-x+x1,-y+y1,RGB(255,0,0)); //画5区
pDC->SetPixel(-y+x1,-x+y1,RGB(255,0,0)); //画6区
pDC->SetPixel(x+x1,-y+y1,RGB(255,0,0)); //画7区
pDC->SetPixel(y+x1,-x+y1,RGB(255,0,0)); //画8区
if(d<0)
d=d+2*x+3; //d的变化
else
{
d=d+2*(x-y)+5; //d<=0时,d的变化
y--; //y坐标减1
}
x++; //x坐标加1
}
}
追问
我试过了,总是这个错误= 。= 怎么搞啊~
error C2653: 'CTest1View' : is not a class or namespace name
追答
MFC用过吗?Test1是我新建的MFC单文档名称,所以生成了CTest1View类。如果你自己新建的MFC工程,只要在你相应的View类当中把函数代码COPY进去就行。
首先在XXView.h文件中声明函数
class CTest1View : public CView
{
。。。。。。。
。。。。。。
public:
void roundMid(int x1,int y1,int R,CDC* pDC);
。。。
}
然后在XXView.c中写这个函数就是上面的代码
最后在 XXView.c的OnDraw函数中调用这个函数
void CXX1View::OnDraw(CDC* pDC)
{
CTest1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
roundMid(200,200,50,pDC);
// TODO: add draw code for native data here
}
运行就可以了;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询