计算机图形学设计线宽代码,计算机图形学画圆并改变线宽.pdf

这篇博客介绍了如何使用Bresenham算法和中点画圆法来改变圆的线宽。通过修改BresenhamCircle函数,增加了额外的像素设置以增加线宽,并展示了RasterScanFillCircle函数用于填充圆的内部,从而达到改变线宽的效果。同时,代码示例在CCircleView的OnDraw方法中调用了这两个函数,分别绘制了不同线宽的圆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bresenham 画圆法改变线宽

(红色为添加代码部分)

void BresenhamCircle(int R,CDC *pDC)

{

int x0,y0,x,y,p;

x0=100;

y0=100;

x = x0;

y=y0 + R;

p=3-2*R;

for(;x<=y;x++)

{

pDC->SetPixel(x,y,RGB(255,0,0));

pDC->SetPixel(x,2*y0-y,RGB(255,0,0));

pDC->SetPixel(y,x,RGB(255,0,0));

pDC->SetPixel(2*y0-y,x,RGB(255,0,0));

pDC->SetPixel(2*x0-x,y,RGB(255,0,0));

pDC->SetPixel(y,2*x0-x,RGB(255,0,0));

pDC->SetPixel(2*x0-x,2*y0-y,RGB(255,0,0));

pDC->SetPixel(2*y0-y,2*x0-x,RGB(255,0,0));

if(p>=0)

{

p+=4*(x-y)+10;

y--;

}

else

{

p+=4*(x-x0)+6;

}

}

}

void RasterScanFillCircle(CDC *pDC, int x0, int y0, int r, int

width, int color)

{

int x, y;

for(x=0;x<=r+width;x++)

{

for(y=r+width;y>=0;y--)

{

if((x)*(x)+(y)*(y)>=r*r &&

(x)*(x)+(y)*(y)<=(r+width)*(r+width))

{

pDC->SetPixel(x+x0,y+y0,color);

pDC->SetPixel(x0-x,y+y0,color);

pDC->SetPixel(x0-x,y0-y,color);

pDC->SetPixel(x+x0,y0-y,color);

}

}

}

}

void CCircleView::OnDraw(CDC* pDC)

{

CCircleDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

BresenhamCircle(50,pDC);

RasterScanFillCircle(pDC,300,100,50,5,RGB(255,0,0));

}

中点画圆法改变线宽

void MidpointCircle(CDC *pdc,int x0,int y0,int r,int color)

{

int x,y;

float d;

x=0;

y=r;

d=1.25-r;

pdc->SetPixel(x0+x,y0-y,color);

while(x<=y)

{

x++;

if(d<0)

{

d+=2*x+3;

}

else

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值