计算机图形学!!!(高手请进)
我自己写了一个画圆的函数,但是速率不能满足要求。不知道那位图形学高手能解决之。(不是调系统的函数啊,只能用描点一个个的描)。
还有就是画圆弧(条件是给出起点,半径,圆心,旋转角度)。也只能是一个点一个点的描。
大家给个算法思路也行!!!
问题点数:100、回复次数:11Top
1 楼yb_yb(我来学习)回复于 2002-04-02 18:10:15 得分 0
对了还有一点对圆的填充问题!!!Top
2 楼Hyena_lei(hyena_lei)回复于 2002-04-02 18:34:25 得分 5
用bresenham算法。
或者用浮点分8段画,x或y轴增减1的算法Top
3 楼yb_yb(我来学习)回复于 2002-04-02 19:02:01 得分 0
能不能讲一讲bresenham方法。最好是有算法。我这方面没有什么接触。Top
4 楼cris919(lovean)回复于 2002-04-02 19:39:54 得分 5
www.google.com搜索一下Top
5 楼casobug(虫虫)回复于 2002-04-02 21:30:18 得分 70
给你个函数,是画椭圆的,看看有无参考价值:
void Draw_Ellipse(CDC *pDC,int x, int y, int a, int b)
{
int x1,y1,xt,yt;
int p,pb,pa,temp;
float dab;
int ab=0;
if(a<b)
{
temp=a;
a=b;
b=temp;
ab=1;
}
if(b==0) b=1;
x1=0;y1=b;
pa=a*a;
pb=b*b;
p=2*pb+pa-2*pa*b;
dab=float(pa/pb);
while (x1<dab*y1)
{
if(ab)
{
xt=y1;
yt=x1;
}
else
{
xt=x1;
yt=y1;
}
pDC->SetPixel(x+xt,y+yt,RGB(255,0,0));
pDC->SetPixel(x+xt,y-yt,RGB(255,0,0));
pDC->SetPixel(x-xt,y+yt,RGB(255,0,0));
pDC->SetPixel(x-xt,y-yt,RGB(255,0,0));
x1++;
if(p<0)
{
p=p+4*pb*x1+6*pb;
}
else
{
p=p+4*pb*x1+6*pb+2*pa*(2-2*y1);
y1--;
}
}
x1=a;y1=0;
p=2*pa+pb-2*pb*a;
while (x1>dab*y1)
{
if(ab)
{
xt=y1;
yt=x1;
}
else
{
xt=x1;
yt=y1;
}
pDC->SetPixel(x+xt,y+yt,RGB(255,0,0));
pDC->SetPixel(x+xt,y-yt,RGB(255,0,0));
pDC->SetPixel(x-xt,y+yt,RGB(255,0,0));
pDC->SetPixel(x-xt,y-yt,RGB(255,0,0));
y1++;
if(p<0)
{
p=p+4*pa*y1+6*pa;
}
else
{
p=p+4*pa*y1+6*pa+2*pb*(2-2*x1);
x1--;
}
}
}Top
6 楼killideadd()回复于 2002-04-03 11:13:27 得分 5
找一下win api,里边有你要的东西Top
7 楼wangqiqi(polymath)回复于 2002-04-03 12:19:25 得分 5
SetPixel 怎么都快不起来,还是用 CreateDIBSection,然后自己一个一个点的添吧。Top
8 楼yb_yb(我来学习)回复于 2002-04-05 12:52:53 得分 0
这个问题我解决了,用的bresenham算法,但是我不知道其公式的推导过程。有没有会的。Top
9 楼Hyena_lei(hyena_lei)回复于 2002-04-07 17:28:09 得分 5
我这里有一本图形学的书里有,是以前浙大的金廷赞写的《计算机图形学》,你可以去找一下。Top
10 楼Rox_Tu()回复于 2002-04-07 18:28:14 得分 5
你可以看看,清华出的 计算机图形学 ,里面有多种画法。
还有你要的圆填充问题!Top
11 楼yb_yb(我来学习)回复于 2002-04-10 19:10:46 得分 0
有没有知道那里有下载这些书的地方?Top




