當前位置:編程學習大全網 - 源碼下載 - 實現繪畫功能的C++程序刻不容緩!!!!!!!!!!!!!!

實現繪畫功能的C++程序刻不容緩!!!!!!!!!!!!!!

這是壹個圓。

# include & ltmath.h & gt

# include & ltgraphics.h & gt/*預定義的庫函數*/

Void circlePoint(int x,int y) /*用八個點畫圓的程序*/

{

圓形(320 x*20,240 y*20,3);

圓形(320 y*20,240 x*20,3);

圓形(320-y*20,240 x*20,3);

圓(320-x*20,240 y*20,3);

圓(320-x*20,240 y*20,3);

圓(320-x*20,240-y*20,3);

圓(320-y*20,240-x*20,3);

圓(320 y*20,240-x*20,3);

圓形(320 x*20,240-y*20,3);

}

Void MidBresenhamcircle(int r) /*在中點用Bresenham算法畫圓的程序*/

{

int x,y,d;

x = 0;y = r;d = 1-r;/*計算初始值*/

while(x & lt;y)

{ circlePoint(x,y);/*在八分圓中繪制點(x,y)及其其他七個對稱點*/

if(d & lt;0)d = 2 * x 3;/*根據對誤差項D的判斷,決定是否往非最大位移方向走*/

其他

{ d = 2 *(x-y)5;

y-;

}

x;

延時(900000);

} /*當*/

}

主()

{

int i,j,r,graphmode,graphdriver

檢測圖(& ampgraph driver & amp;graph mode);

init graph(& amp;graph driver & amp;graphmode,“”;

Printf("用Bresenhamcircle算法畫圓的程序\ n ");/*提示信息*/

Printf ("Note | r |

printf(" \ n輸入半徑值r:");

scanf("%d ",& ampr);

Printf("按任意鍵顯示圖形...");

getch();

clear device();

setbkcolor(黑色);

for(I = 20;我& lt=620;I =20) /*使用雙循環虛線函數在表格中繪制縱坐標*/

for(j = 20;j & lt=460;j)

putpixel(i,j,2);

for(j = 20;j & lt=460;J =20) /*使用雙循環虛線函數*/繪制表格中的橫坐標

for(I = 20;我& lt=620;我)

putpixel(i,j,2);

outtextxy(320,245," 0 ");/*原點坐標*/

outtextxy(320-5*20,245,“-5”);圓(320-5*20,240,2);/*橫坐標值*/

outtextxy(320 5*20,245," 5 ");圓(320 5*20,240,2);

outtextxy(320-10*20,245,"-10 ");圓(320-10*20,240,2);

outtextxy(320 10*20,245," 10 ");圓(320 10*20,240,2);

outtextxy(320-15*20,245,"-15 ");圓(320-15*20,240,2);

outtextxy(320 15*20,245," 15 ");圓(320 15*20,240,2);

outtextxy(320,240-5*20,“-5”);圓(320,240-5*20,2);/*縱坐標值*/

outtextxy(320,240 5*20," 5 ");圓(320,240 5*20,2);

outtextxy(320,240-10*20,"-10 ");圓(320,240-10*20,2);

outtextxy(320,240 10*20," 10 ");圓(320,240 10*20,2);

outtextxy(20,10,“圓心在(0,0)”);/*提示信息顯示在坐標軸的左上角*/

setcolor(紅色);/*標記軸*/

線(20,240,620,240);outtextxy(320 15*20,230," X ");

線(320,20,320,460);outtextxy(330,20," Y ");

setcolor(黃色);

MidBresenhamcircle(r);

setcolor(藍色);/*畫壹個圓*/

圓(320,240,r * 20);

set color(2);

getch();

closegraph();

}

下面這條是直線。

# include & ltgraphics.h & gt

# include & ltmath.h & gt

/*

###############################################################################

功和能:這個函數的作用是通過逐點比較畫壹條直線。

網格:void my line 1 (int x 1,int y 1,int x2,int y2,int color)。

參數說明:x1,y1為起點坐標,x2,y2為終點,color為繪制線條的顏色。

調用示例:myline 1 (10,20,500,440,4)

###############################################################################

*/

void myline1(int x1,int y1,int x2,int y2,int color)

{

/*變量定義開始(添加於2007/10/16) */

int iTx/* X軸或臨時變量終點的相對坐標xa */

int iTy/* Y軸終點的相對坐標ya或臨時變量*/

int iDx/*步長dx*/

int iDy/*步長dy*/

int iFt/*偏差Fm*/

int iSt/*計數周期數(dx+dy)S*/

int iXt/*x方向循環變量xm*/

int iYt/*y方向循環變量ym*/

/*變量定義結束*/

/*變量初始化開始*/

/*如果是第三象限或第四象限,則改為第壹象限或第二象限*/

如果(y2 & lty1)

{

iTx = x 1;

x 1 = x2;

x2 = iTx

iTy = y 1;

y 1 = y2;

y2 = iTy

}

iTx = x2-x 1;/*取X軸的相對坐標*/

iTy = y2-y 1;/*取Y軸的相對坐標*/

iDx = 1;

iDy = 1;

iFt = 0;

iSt = iTx+iTy;

if(iTx & lt;0)iSt =-1 * iTx+iTy;;/*如果在第二象限,X軸方向的步長為負*/

iXt = 0;

iYt = 0;

/*變量初始化結束*/

/*數據處理開始*/

while(iSt & gt;0)

{

putpixel(x1+iXt,y1+iYt,color);

if(iTx & gt;=0) /*如果在第壹象限*/

{

if(iFt & lt;0) /*如果偏差小於0*/

{

iYt+= iDy;/*向Y方向移動壹步*/

iFt+= iTx;

}

否則/*如果偏差大於或等於0*/

{

iXt+= iDx;/*向X方向移動壹步*/

iFt-= iTy;

}

}

其他

{

if(iFt & lt;0) /*如果偏差小於0*/

{

iXt-= iDx;/*向負X方向移動壹步*/

iFt+= iTy;

}

否則/*如果偏差大於或等於0*/

{

iYt+= iDy;/*向Y方向移動壹步*/

iFt+= iTx;

}

}

iSt-;

}

}

/*

###############################################################################

工作能量:這個函數的作用是畫壹條直線。

網格:void myline2 (int x 1,int y 1,int x2,int y2,int color)。

參數說明:x1,y1為起點坐標,x2,y2為終點,color為繪制線條的顏色。

致電示例:myline2(10,20,500,440,4)

###############################################################################

*/

int myline2(int x1,int y1,int x2,int y2,int color)

{

int iX/* x方向的坐標變量*/

int iY/* Y方向的坐標變量*/

int iTx/* X方向的步長變量*/

int iTy/* Y方向的步長變量*/

float fDx/* X方向的差異變量*/

浮動fDy/* Y方向的差異變量*/

float fMinfF*/

float fMaxFF*/

float fS/*端點判斷變量*/

fMinf = 0.5/*f=0.5*/

iX = x 1;

iY = y 1;

putpixel(x1,y1,顏色);

if(x 1 = = x2 & amp;& ampY1==y2) /*如果終點和起點相同*/

{

返回(1);

}

iTx = 1;

iTy = 1;

fDx =(float)(x2-x 1);

fDy =(float)(y2-y 1);

fMaxF = fDy/fDx & gt;0?fDy/fDx:(-fDy/fDx);/*F=|dy/dx|*/

if(fDx & lt;0)iTx =-1;

if(fDy & lt;0)iTy =-1;

fS = fDx & gt0?fDx:(-fDx);

If(fMaxF = = 1)/* If F = 1 */

{

iX = x 1;

iY = y 1;

while(fS & gt;0)

{

iX+= iTx;/*向X方向移動壹步*/

iY+= iTy;/*向Y方向移動壹步*/

putpixel(iX,iY,color);

fS-;

}

}

else if(fMaxF & gt;1)/* If f >;1*/

{

fS+= fDy & gt;0?fDy:(-fDy);

while(fS & gt;0)

{

iY+= iTy;/*向Y方向移動壹步*/

putpixel(iX,iY,color);

FM INF+= 1/fMaxF;/*f=f+1/F*/

fS-;

if(FM INF & gt;= 1)/* If f >;=1*/

{

iX+= iTx;/*向X方向移動壹步*/

FM INF-;/*f=f-1*/

putpixel(iX,iY,color);

fS-;

}

}

}

Else /* If f

{

fS+= fDy & gt;0?fDy:(-fDy);

while(fS & gt;0)

{

iX+= iTx;/*向X方向移動壹步*/

putpixel(iX,iY,color);

FM INF+= fmax f;/*f=f+F*/

fS-;

if(FM INF & gt;= 1)/* If f >;=1*/

{

iY+= iTy;/*向Y方向移動壹步*/

FM INF-;/*f=f-1*/

putpixel(iX,iY,color);

fS-;

}

}

}

}

不懂的可以繼續探討。謝謝妳

  • 上一篇:成都有哪些好的IT公司?
  • 下一篇:有什麽軟件可以自動生成海報?制作海報的軟件
  • copyright 2024編程學習大全網