前面給大家講了常見的常規(guī)圖形,接下來這個圖形稍微有些復(fù)雜,但繪出的圖案更加五彩繽紛~,就是畫多邊形的函數(shù)polygon,這個函數(shù)不僅僅可以畫規(guī)則的多邊形,比如五邊形、六邊形、八邊形等等,還可以畫凹多邊形以及各種奇怪的多邊形,你都可以用它,先看看函數(shù)原型吧:
void polygon( const POINT *points, int num );
第二個參數(shù)很簡單,表示多邊形的頂點個數(shù)。第一個參數(shù)呢,別慌,它表示的是各個頂點的坐標(biāo)
你可能會好奇const POINT *points怎么表示多個頂點的坐標(biāo)呢?原因它是一個結(jié)構(gòu)體指針。我們可以找到它的定義來看看,完整定義如下:
typedef struct tagPOINT { LONG x; LONG y; } POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;
是一個結(jié)構(gòu)體指針,每個結(jié)構(gòu)體里你可以放兩個long型的x和y表示這個頂點的坐標(biāo)。
比如我定義:
POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}};
那么pints數(shù)組里這十個數(shù)字就分別表示5個頂點的坐標(biāo)。然后我們調(diào)用polygon函數(shù),polygon函數(shù)就會按照這五點的順序一次連線繪制。完整代碼如下:
//www.sztianhecheng.cn #include <graphics.h> // 引用圖形庫頭文件 #include <conio.h> int main() { POINT points[] ={{100,0},{41,181},{195,69},{5,69},{159,181}}; //POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}}; initgraph(640, 480); // 創(chuàng)建繪圖窗口,大小為 640x480 像素\ polygon(points,5); getch(); // 按任意鍵繼續(xù) closegraph(); // 關(guān)閉繪圖窗口 return 0; }
注意,如果改變五個點的順序,則會改變圖形的形狀,比如改為:
POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}};
則圖案效果就變?yōu)椋?/p>
等等,不是應(yīng)該有填充嗎?
噢對了,EasyX中圖形的繪制,都有三種,一種是畫線輪廓;第二種是有顏色填充有輪廓;第三種是有顏色填充沒有輪廓。
以圓形為例,三種函數(shù)的命名分別為:circle、fillcircle、solidcircle。注意三個函數(shù)的命名規(guī)則
那么類似的,畫多邊形的三個函數(shù)也分別為polygon、fillpolygon、solidpolygon。比如前面的例子就是polygon畫的,如果想加顏色,不帶外面的輪廓,則可以調(diào)用solidpolygon函數(shù),參數(shù)都不變,代碼如下:
//www.sztianhecheng.cn #include <graphics.h> // 引用圖形庫頭文件 #include <conio.h> int main() { //POINT points[] ={{100,0},{41,181},{195,69},{5,69},{159,181}}; POINT points[] ={{100,0},{195,69},{159,181},{41,181},{5,69}}; initgraph(640, 480); // 創(chuàng)建繪圖窗口,大小為 640x480 像素 setfillcolor(LIGHTRED); solidpolygon(points,5); getch(); // 按任意鍵繼續(xù) closegraph(); // 關(guān)閉繪圖窗口 return 0; }
兩種不同頂點順序的效果如下:
另一種:
請大家理解polygon的用法~多多嘗試
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程