| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2273 人关注过本帖
标题:求助! bresenham画椭圆
只看楼主 加入收藏
孤行的浪子
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-8-12
收藏
 问题点数:0 回复次数:2 
求助! bresenham画椭圆

我编了一个用bresenham算法画椭圆的小程序,结果发现不太好使 那位高手指点一下 谢谢!
程序如下:

#include "stdio.h"
#include <graphics.h>
#define closegr closegraph
#include <conio.h>
void circlepoint(int j,int k,int pointX,int pointY)
{
putpixel(pointX,pointY,WHITE);
putpixel(j+pointX,k+pointY,RED);
putpixel(-j+pointX,k+pointY,YELLOW);
putpixel(-j+pointX,-k+pointY,GREEN);
putpixel(j+pointX,-k+pointY,BLUE);
}
void Midbresenhamellipse(int a,int b,int aR,int bR )
{
if(aR<bR)
{
int x,y;
float d1,d2;
x=0;
y=bR;
d1=bR*bR+aR*aR*(-bR+0.25);
circlepoint(x,y,a,b);
while(bR*bR*(x+1)<aR*aR*(y-0.5))
{
if(d1<=0)
{
d1+=bR*bR*(2*x+3);
x++;
}
else
{
d1+=bR*bR*(2*x+3)+aR*aR*(-2*y+2);
x++;
y--;
}
circlepoint(x,y,a,b);
}
d2=bR*bR*(x+0.5)*(x+0.5)+aR*aR*(y-1)*(y-1)-aR*aR*bR*bR;
while(y>0)
{
if(d2<=0)
{
d2+=bR*bR*(2*x+2)+aR*aR*(-2*y+3);
x++;
y--;
}
else
{
d2+=aR*aR*(-2*y+3);
y--;
}
circlepoint(x,y,a,b);
}
}
else /*横向放置圆*/
{
int X,Y;
float d3,d4;
X=0;
Y=bR;
d3=0.25*bR*bR+aR*aR*(-2*bR+1);
circlepoint(X,Y,a,b);
while(bR*bR*(X+0.5)>aR*aR*(Y-1))
{
if(d3>=0)
{
d3+=aR*aR*(-2*Y+3);
Y--;
}
else {
d3+=aR*aR*(-2*Y+3)+bR*bR*(2*X+2);
X++;
Y--;
}
circlepoint(X,Y,a,b);
}
d4=bR*bR*(X+1)*(X+1)+aR*aR*(Y-0.5)*(Y-0.5)-aR*aR*bR*bR;
while(Y>=0)
{
if(d4<0)
{
d4+=bR*bR*(2*X+3);
X++;
}
else
{
d4+=bR*bR(2*X+3)+aR*aR(2-2*Y);
X++;
Y--;
}
circlepoint(X,Y,a,b);
}
}
}
int main(void)
{ int j,k,longR,shortR;
int gdriver,gmode;
detectgraph(&gdriver,&gmode);
initgraph(&gdriver,&gmode,"");
printf("\nEnter the center of circle :");
scanf("%d,%d",&j,&k);
printf("Enter long and short radius:");
scanf("%d,%d",&longR,&shortR);
Midbresenhamellipse(j,k,longR,shortR);
getch();
closegr();
return 0;
}




搜索更多相关主题的帖子: 画椭圆 bresenham int putpixel include 
2007-10-22 20:08
jig
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
帖 子:530
专家分:242
注 册:2005-12-27
收藏
得分:0 
是不能画圆,还是嫌圆的效果不好?

要是只是效果不好,那没办法此法的优点就是画圆快速,一般在嵌入式直接使用此法,不过画出的圆的确不够圆滑

[此贴子已经被作者于2007-11-2 12:52:44编辑过]


个人网站 -  http://.h001.
2007-11-02 12:48
eakcon
Rank: 1
等 级:新手上路
帖 子:754
专家分:0
注 册:2007-11-7
收藏
得分:0 
太有味了
2007-11-14 10:04
快速回复:求助! bresenham画椭圆
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016573 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved