導航:首頁 > 源碼編譯 > 程序實現中點畫圓演算法

程序實現中點畫圓演算法

發布時間:2024-01-07 23:12:06

㈠ 怎樣用利用Turbo C實現圓生成的中點畫圓演算法

#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <gl/GL.h>
#include <gl/GLU.h>
#include <gl/glaux.h>
#include <Windows.h>

#pragma comment(lib,"glaux.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glut32.lib")
#pragma comment(lib,"opengl32.lib")

class scrpt
{
public:
GLint x,y;
};

void myinit(void);
void display(void);
void setPixel(GLint x,GLint y);
void circlePlotPoint(scrpt circCtr,scrpt circpt);
void circleMidpoint(scrpt circCtr,GLint radius);

void setPixel(GLint x,GLint y)
{
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
}

void myinit(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0,800.0,0.0,600.0);
}

void circleMidpoint(scrpt circCtr,GLint radius)
{
scrpt circpt;
GLint p=1-radius;
circpt.x=0;
circpt.y=radius;
void circlePlotPoints(scrpt,scrpt);
circlePlotPoints(circCtr,circpt);
while(circpt.x<circpt.y)
{
circpt.x++;
if(p<0)
p+=2*circpt.x+1;
else
{
circpt.y--;
p+=2*(circpt.x-circpt.y)+1;
}
circlePlotPoints(circCtr,circpt);
}
}

void circlePlotPoints(scrpt circCtr,scrpt circpt)
{
setPixel(circCtr.x+circpt.x,circCtr.y+circpt.y);
setPixel(circCtr.x-circpt.x,circCtr.y-circpt.y);
setPixel(circCtr.x+circpt.x,circCtr.y-circpt.y);
setPixel(circCtr.x-circpt.x,circCtr.y+circpt.y);
setPixel(circCtr.x+circpt.y,circCtr.y+circpt.x);
setPixel(circCtr.x+circpt.y,circCtr.y-circpt.x);
setPixel(circCtr.x-circpt.y,circCtr.y+circpt.x);
setPixel(circCtr.x-circpt.y,circCtr.y-circpt.x);
}
void display(void)
{ scrpt point;
point.x=200;
point.y=210;
int radius=20;
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.5,0.6,1.0);
circleMidpoint(point,radius);
glFlush();
}
void main(int argc,char **argv)
{

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("pointcircle");
myinit();
glutDisplayFunc(display);
glutMainLoop();
}

㈡ C語言用Bresenham演算法畫圓,哪位高手教教,主要是演算法里的內容,謝謝!

的確哈,關鍵在於對delta的理解
可以看到,都是delta=2*(1-radius)這樣的,起作用應該是判斷要畫的點x、y坐標的變化趨勢,先把我注釋了的代碼貼下,加了getch();可以看到畫的過程
-----------------------------------------------------------------
#include<graphics.h>
#include<stdio.h>

void BresenhemCircle(int centerx, int centery, int radius, int color, int type);

void main()
{
int drive=DETECT,mode;
int i,j;
initgraph(&drive,&mode,"");
BresenhemCircle(300,200,100,15,0);
getch();
}

void BresenhemCircle(int centerx, int centery, int radius, int color, int type)
{
int x =type = 0;/*初始橫坐標為原點*/
int y = radius; /*初始縱坐標遠離原點*/
int delta = 2*(1-radius);
int direction;
while (y >= 0)
{
getch();
if (!type)/*執行*/
{
/*在上半圓畫兩點*/
putpixel(centerx+x, centery+y, color);
putpixel(centerx-x, centery+y, color);
/*在下半圓畫兩點*/
putpixel(centerx-x, centery-y, color);
putpixel(centerx+x, centery-y, color);
getch();
}
else/*不執行*/
{
line(centerx+x, centery+y, centerx+x, centery-y);
line(centerx-x, centery+y, centerx-x, centery-y);
getch();
}
/*以下代碼設置下次四點的位置,圓是對稱的,且此方法相當於同時畫四個圓弧
觀察右上方圓弧可知,前一半是x增的要快些,後一半是y減的快些*/
if (delta < 0)
{
if ((2*(delta+y)-1) < 0)
direction = 1; /*選擇橫向加*/
else
direction = 2;
}
else if(delta > 0)
{
if ((2*(delta-x)-1) > 0)
direction = 3; /*選擇縱向減*/
else
direction = 2;
}
else
direction=2;

switch(direction)
{
case 1:
x++;/*只橫坐標遠離原點*/
delta += (2*x+1); /*小執行到這,所以加*/
break;
case 2:
x++;
y--;/*橫向遠離,同時縱向靠近*/
delta += 2*(x-y+1); /*即(2*x+1)+(-2*y+1)*/
break;
case 3:
y--;/*只縱坐標靠近原點*/
delta += (-2*y+1); /*大執行到這,所以減*/
break;
}
}
}

python中點圓畫法

1、我們的電腦上要安裝有Python,我們找到安裝的Python並打開。
2、在打開的Python窗口中執行文件菜單的新建命令,新建一個idle的文件項目。
3、在新建的idle項目中輸入下面代碼:importturtle、turtle.color("blue")turtle.circle(100)繪制出第一個大圓出來。
4、下面執行第一個帶蔽大圓的填充命令,執行下面代碼:importturtle、褲行配turtle.color("blue")、turtle.begin_fill()、turtle.circle(100)、turtle.end_fill()、通過turtle.begin_fill()與turtle.endfill()。
5、下面來畫第二個小圓,需要先跳轉畫筆,並更改畫筆顏色,畫出第胡指二個小圓。跳轉畫筆使用goto命令。
6、最後畫中間的小圓操作和大圓一樣,執行填充命令即可。這樣一個圓中圓的效果就完成了。

㈣ 用C實現Bresenham演算法生成直線和圓的程序(要求具體步驟有必要解述)

Bresenham演算法生成直線
假定直線從(x1,y1)到(x2,y2),
令dx=x2-x1,dy=y2-y1
不妨設(dx,dy)在第一象限,並且直線的斜率不大於1

畫線過程中有三個循環變數
x,y,d
初值
x=x1,y=y1,d=2*dy-dx

循環,直到x==x2為止
{
如果d>=0,y++,d+=2*(dy-dx)
如果d<0 ,x++,d+=2*dy
}

如果(dx,dy)不在第一象限,要做變換,即先把第一象限的畫出來
如果斜率大於1,x,y交換

非常簡單的,很容易實現
圓的演算法:

int Bres(int x0,int y0,double r,int color)

{
int x,y,d;
x=0;
y=(int)r;
d=(int)(3-2*r);
while(x<y)
{
cirpot(x0,y0,x,y,color);
if(d<0)
d+=4*x+6;
else
{
d+=4*(x-y)+10;
y--;
}
x++;
}
if(x==y)
cirpot(x0,y0,x,y,color);
return(0);
}
int cirpot(int x0,int y0,int x,int y,int color)
{
setcolor(color);
putxicl((x0+x),(y0+y));
putxicl((x0+y),(y0+x));
putxicl((x0+y),(y0-x));
putxicl((x0+x),(y0-y));
putxicl((x0-x),(y0-y));
putxicl((x0-y),(y0-x));
putxicl((x0-y),(y0+x));
putxicl((x0-x),(y0+y));
setcolor(color);
return(0);
}

這是圓的演算法,你若要整個程序,把你的電郵給我,我給你發過去、
運行環境是Turboc 2.0
int Bresline(int x1,inty1,int x2,int y2,int color)
{
int color,itag;
int dx,dy,tx,ty,inc1,inc2,d,curx,cury;
setcolor(color);
putxicl(x1,y1);
if(x1==x2&&y1==y2)
{
setcolor(color);
return(1);
}
itag=0;
dx=abs(x2-x1);
dy=abs(y2-y1);
if(dx<dy)
{
itag=1;]
iswap(&x1,&y1);
iswap(&x2,&y2);
iswap(&dx,&dy);
}
tx=(x2-x1)>0? 1:-1;
ty=(y2-y1)>0? 1:-1;
curx=x1;
cury=y1;
inc1=2*dy;
inc2=2*(dy-dx);
d=inc1-dx;
while(curx!x2)
{
if(d<0)
{
d+=inc1;
}
else
{
cury+=ty;
d+=inc2;
}
if(itag)
setpixel(cury,curx);
else
setpixel(curx,cury);
curxd+=tx;
}
setcolor(color);
return(0);
}
iswap(int*a,int*b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}

這是直線的演算法:和圓的差不多,你可以參考一下:)

閱讀全文

與程序實現中點畫圓演算法相關的資料

熱點內容
要塞1地圖放哪個文件夾 瀏覽:846
凡科建站怎麼弄伺服器 瀏覽:939
蘋果手機怎麼設置app播放 瀏覽:202
下載網站源碼用什麼瀏覽器 瀏覽:241
六線譜pdf 瀏覽:156
linuxmysqlsock 瀏覽:239
人教版數學pdf下載 瀏覽:460
文檔安全加密系統 瀏覽:491
數控銑床編程簡單數字 瀏覽:788
編程電纜如何重啟 瀏覽:121
myqq命令行發消息 瀏覽:365
日產逍客怎麼使用app升窗 瀏覽:503
安卓系統怎麼快速刪除微信內容 瀏覽:653
csharppython 瀏覽:409
程序員脖子按摩儀 瀏覽:562
小米桌面文件夾亂碼怎麼回事 瀏覽:858
點歌台app怎麼連接 瀏覽:318
大學電腦編程學什麼好 瀏覽:348
上哪裡取消應用加密 瀏覽:172
電氣控制與可編程式控制制器pdf 瀏覽:87