c語言繪制線函數(shù) c語言畫線函數(shù)

怎樣用C語言繪制直線

【C語言的用MoveTo()和LineTo()】

成都創(chuàng)新互聯(lián)是一家專業(yè)提供沙河企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都網(wǎng)站制作、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為沙河眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

#includegraphics.h

#includemath.h

/*

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

功 能:本函數(shù)的作用是用逐點比較法來畫一條直線

格 式:void myline1(int x1,int y1,int x2,int y2,int color)

參數(shù)說明:x1,y1是起始點坐標(biāo),x2,y2是終止點,color是畫線的顏色

調(diào)用示例:myline1(10,20,500,440,4)

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

*/

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

{

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

int iTx; /*x軸終點的相對坐標(biāo)xa或臨時變量*/

int iTy; /*y軸終點的相對坐標(biāo)ya或臨時變量*/

int iDx; /*x軸方向的步長dx*/

int iDy; /*y軸方向的步長dy*/

int iFt; /*偏差Fm*/

int iSt; /*記數(shù)循環(huán)數(shù)(dx+dy)S*/

int iXt; /*x方向循環(huán)變量xm*/

int iYt; /*y方向循環(huán)變量ym*/

/*變量定義結(jié)束*/

/*變量初始化開始*/

/*如果是第三象限或第四象限則換成第一或第二象限*/

if(y2y1)

{

iTx=x1;

x1=x2;

x2=iTx;

iTy=y1;

y1=y2;

y2=iTy;

}

iTx=x2-x1; /*取x軸的相對坐標(biāo)*/

iTy=y2-y1; /*取y軸的相對坐標(biāo)*/

iDx=1;

iDy=1;

iFt=0;

iSt=iTx+iTy;

if(iTx0)iSt=-1*iTx+iTy /*如果在第二象限,則x軸方向步長取負(fù)值*/

iXt=0;

iYt=0;

/*變量初始化結(jié)束*/

/*數(shù)據(jù)處理開始*/

while(iSt0)

{

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

if(iTx=0) /*如果在第一象限*/

{

if(iFt0) /*如果偏差小于0*/

{

iYt+=iDy; /*y方向走一步*/

iFt+=iTx;

}

else /*如果偏差大于或等于0*/

{

iXt+=iDx; /*x方向走一步*/

iFt-=iTy;

}

}

else

{

if(iFt0) /*如果偏差小于0*/

{

iXt-=iDx; /*負(fù)x方向走一步*/

iFt+=iTy;

}

else /*如果偏差大于或等于0*/

{

iYt+=iDy; /*y方向走一步*/

iFt+=iTx;

}

}

iSt--;

}

}

/*

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

功 能:本函數(shù)的作用是用來畫一條直線

格 式:void myline2(int x1,int y1,int x2,int y2,int color)

參數(shù)說明:x1,y1是起始點坐標(biāo),x2,y2是終止點,color是畫線的顏色

調(diào)用示例:myline2(10,20,500,440,4)

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

*/

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

{

int iX; /*x方向的坐標(biāo)變量*/

int iY; /*y方向的坐標(biāo)變量*/

int iTx; /*x方向的步長變量*/

int iTy; /*y方向的步長變量*/

float fDx; /*x方向的差分變量*/

float fDy; /*y方向的差分變量*/

float fMinf; /*算法中的f*/

float fMaxF; /*算法中的F*/

float fS; /*終點判斷變量*/

fMinf=0.5; /*f=0.5*/

iX=x1;

iY=y1;

putpixel(x1,y1,color);

if(x1==x2y1==y2) /*如果終點和起始點相同*/

{

return(1);

}

iTx=1;

iTy=1;

fDx=(float)(x2-x1);

fDy=(float)(y2-y1);

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

if(fDx0)iTx=-1;

if(fDy0)iTy=-1;

fS=fDx0?fDx:(-fDx);

if(fMaxF==1) /*如果F=1*/

{

iX=x1;

iY=y1;

while(fS0)

{

iX+=iTx; /*x方向走一步*/

iY+=iTy; /*y方向走一步*/

putpixel(iX,iY,color);

fS--;

}

}

else if(fMaxF1) /*如果F1*/

{

fS+=fDy0?fDy:(-fDy);

while(fS0)

{

iY+=iTy; /*y方向走一步*/

putpixel(iX,iY,color);

fMinf+=1/fMaxF; /*f=f+1/F*/

fS--;

if(fMinf=1) /*如果f=1*/

{

iX+=iTx; /*x方向走一步*/

fMinf--; /*f=f-1*/

putpixel(iX,iY,color);

fS--;

}

}

}

else /*如果F1*/

{

fS+=fDy0?fDy:(-fDy);

while(fS0)

{

iX+=iTx; /*x方向走一步*/

putpixel(iX,iY,color);

fMinf+=fMaxF; /*f=f+F*/

fS--;

if(fMinf=1) /*如果f=1*/

{

iY+=iTy; /*y方向走一步*/

fMinf--; /*f=f-1*/

putpixel(iX,iY,color);

fS--;

}

}

}

}【能夠畫出任意斜率的直線算法程序】

int dx,dy,incrE,incrNE,d,x,y;

if ((point[1].x-point[0].x)==0){ //垂直的直線

x=point[0].x;

for(y=point[0].y;ypoint[1].y;y++)

pDC-SetPixel(x,y,50);

}

else if(abs((point[1].y-point[0].y)/(point[1].x-point[0].x))=1){ //斜率 -1到 1 之間

dx=point[1].x-point[0].x;

dy=point[0].y-point[1].y;

d=dx-2*dy; incrE=-2*dy;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

if(point[0].ypoint[1].y){

while(xpoint[1].x)

{

if(d=0){

d+=incrE;

x++;

}

else

{d+=incrNE;br x++;br y--;br }

pDC-SetPixel(x,y,50);

}

}

else if(point[0].y=point[1].y){

dy=point[1].y-point[0].y;

incrE=-2*dy;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(xpoint[1].x)

{

if(d=0){

d+=incrE;

x++;

}

else

{d+=incrNE;br x++;br y++;br }

pDC-SetPixel(x,y,50);

}

}

}

else { //斜率 -1 和 1的直線

if(point[1].x=point[0].x){

dx=point[1].x-point[0].x;

dy=point[1].y-point[0].y;

d=2*dx-dy;

incrE=2*dx;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(xpoint[1].x)

{

if(d0){

d+=incrE;

y++;

}

else

{d+=incrNE;br pDC-SetPixel(x,y,50);br x++;br y++;br }

pDC-SetPixel(x,y,50);

}

}

else if((point[1].y-point[0].y)/(point[1].x-point[0].x)-1){

dx=point[1].x-point[0].x;

dy=point[0].y-point[1].y;

d=2*dx-dy;

incrE=2*dx;

incrNE=2*(dx-dy);

x=point[0].x,y=point[0].y;

pDC-SetPixel(x,y,50);

while(ypoint[1].y)

{

if(d0){

d+=incrE;

y++;

}

else

{d+=incrNE;br x--;br y++;br }

pDC-SetPixel(x,y,50);

} }

}

c語言的圖形函數(shù)庫有哪些

圖形和圖像函數(shù)包含在graphics.h里面(一) 像素函數(shù)56. putpiel() 畫像素點函數(shù)57. getpixel()返回像素色函數(shù)(二) 直線和線型函數(shù)58. line() 畫線函數(shù)59. lineto() 畫線函數(shù)60. linerel() 相對畫線函數(shù)61. setlinestyle() 設(shè)置線型函數(shù)62. getlinesettings() 獲取線型設(shè)置函數(shù)63. setwritemode() 設(shè)置畫線模式函數(shù)(三)、多邊形函數(shù)64. rectangle() 畫矩形函數(shù)65. bar() 畫條函數(shù)66. bar3d() 畫條塊函數(shù)67. drawpoly() 畫多邊形函數(shù)(四)、 圓、弧和曲線函數(shù)68. getaspectratio()獲取縱橫比函數(shù)69. circle()畫圓函數(shù)70. arc() 畫圓弧函數(shù)71. ellipse()畫橢圓弧函數(shù)72. fillellipse() 畫橢圓區(qū)函數(shù)73. pieslice() 畫扇區(qū)函數(shù)74. sector() 畫橢圓扇區(qū)函數(shù)75. getarccoords()獲取圓弧坐標(biāo)函數(shù)(五)、 填充函數(shù)76. setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)77. setfillpattern() 設(shè)置用戶圖樣函數(shù)78. floodfill() 填充閉域函數(shù)79. fillpoly() 填充多邊形函數(shù)80. getfillsettings() 獲取填充設(shè)置函數(shù)81. getfillpattern() 獲取用戶圖樣設(shè)置函數(shù)(六)、圖像函數(shù)82. imagesize() 圖像存儲大小函數(shù)83. getimage() 保存圖像函數(shù)84. putimage() 輸出圖像函數(shù)四、圖形和圖像函數(shù)對許多圖形應(yīng)用程序,直線和曲線是非常有用的。但對有些圖形只能靠操作單個像素才能畫出。當(dāng)然如果沒有畫像素的功能,就無法操作直線和曲線的函數(shù)。而且通過大規(guī)模使用像素功能,整個圖形就可以保存、寫、擦除和與屏幕上的原有圖形進(jìn)行疊加。(一) 像素函數(shù)56. putpixel() 畫像素點函數(shù)功能: 函數(shù)putpixel() 在圖形模式下屏幕上畫一個像素點。用法: 函數(shù)調(diào)用方式為void putpixel(int x,int y,int color);說明: 參數(shù)x,y為像素點的坐標(biāo),color是該像素點的顏色,它可以是顏色符號名,也可以是整型色彩值。此函數(shù)相應(yīng)的頭文件是graphics.h返回值: 無例: 在屏幕上(6,8)處畫一個紅色像素點:putpixel(6,8,RED);57. getpixel()返回像素色函數(shù)功能: 函數(shù)getpixel()返回像素點顏色值。用法: 該函數(shù)調(diào)用方式為int getpixel(int x,int y);說明: 參數(shù)x,y為像素點坐標(biāo)。函數(shù)的返回值可以不反映實際彩色值,這取決于調(diào)色板的設(shè)置情況(參見setpalette()函數(shù))。這個函數(shù)相應(yīng)的頭文件為graphics.h返回值: 返回一個像素點色彩值。例: 把屏幕上(8,6)點的像素顏色值賦給變量color。color=getpixel(8,6);

c語言怎么把數(shù)據(jù)擬合成函數(shù)并畫線

1、通過一些點擬合出一條直線。

2、參數(shù):pt_input指向傳入的點的指針。

3、ptNumbers傳入的點數(shù)量。

4、k指向擬合直線參數(shù)k的指針。

5、b指向擬合直線參數(shù)b的指針。

文章標(biāo)題:c語言繪制線函數(shù) c語言畫線函數(shù)
網(wǎng)站URL:http://muchs.cn/article34/ddiidse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站改版微信公眾號、全網(wǎng)營銷推廣、移動網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)