C語言利用EasyX實現(xiàn)繪制足球圖案
思路
如何使用 C 語言配置EasyX繪圖庫繪制一個足球呢,今天我嘗試了一下,難度還算可以,但是過程比較繁瑣,代碼寫的有些復(fù)雜,后期有興趣的,可以在我的代碼的基礎(chǔ)上進(jìn)行優(yōu)化,用更短的代碼將這個圖形繪制出來。
簡單描述一下這個程序的思路和實現(xiàn)過程。足球是一個由五邊形和六邊形組成的球體。這里我使用一個旋轉(zhuǎn)算法,首先確定一個足球的圓心。然后確定半徑,通過等間距旋轉(zhuǎn),先獲得一個五邊形的坐標(biāo),使用多邊形填充的方式,得到一個填充的五邊形。然后通過同樣的方式,獲取一個十邊形以及二十邊形的坐標(biāo)。然后按照一定規(guī)律連接這些坐標(biāo)點(diǎn)。
以上只是我個人的思路,當(dāng)然有更好的思路可以進(jìn)行計算和繪制,例如足球是個球體,可以使用 EasyX 繪圖庫,通過計算每一個多邊形角點(diǎn)在三維空間中的位置,就可以繪制出一個三維的足球。當(dāng)然這個就需要有一定的數(shù)學(xué)邏輯能力和計算機(jī)圖形學(xué)的知識了。
截圖
源碼
/// // 程序名稱:繪制足球 // 編譯環(huán)境:Mictosoft Visual Studio 2013, EasyX_20200315(beta) // #include<graphics.h> #include<math.h> #include<conio.h> #define PI acos(-1.0) int main() { initgraph(640, 480); setbkcolor(GREEN); setlinecolor(BLACK); cleardevice(); setlinestyle(PS_SOLID, 4); setfillcolor(WHITE); fillcircle(320, 240, 150); // 繪制一個球形狀 setlinestyle(PS_SOLID, 2); POINT pts[5]; POINT Fpts[5]; POINT Zpts[5]; // 計算五邊形的五個頂點(diǎn)坐標(biāo) double a = PI / 2; for (int i = 0; i < 5; i++) { pts[i].x = int(320 + cos(a) * 60); pts[i].y = int(240 - sin(a) * 60); Zpts[i].x = int(320 + cos(a) * 100); Zpts[i].y = int(240 - sin(a) * 100); Fpts[i].x = int(320 + cos(a) * 110); Fpts[i].y = int(240 - sin(a) * 110); a += PI * 2 / 5; } setlinecolor(BLACK); setfillcolor(BLACK); solidpolygon(pts, 5); for (int i = 0; i < 5; i++) { line(pts[i].x, pts[i].y, Zpts[i].x, Zpts[i].y); } POINT Spts[10]; POINT Wpts[20]; a = PI / 2 + PI / 20; for (int i = 0; i < 20; i++) { Wpts[i].x = int(320 + cos(a) * 150); Wpts[i].y = int(240 - sin(a) * 150); a += PI * 1 / 10; } a = PI / 2 + PI / 10; for (int i = 0; i < 10; i++) { Spts[i].x = int(320 + cos(a) * 128); Spts[i].y = int(240 - sin(a) * 128); a += PI * 1 / 5; } int P = 9; for (int i = 0; i < 5; i++) { line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y); P++; if (P == 10) { P = 0; } line(Zpts[i].x, Zpts[i].y, Spts[P].x, Spts[P].y); P++; } for (int i = 0; i < 9; i++) { line(Spts[i].x, Spts[i].y, Spts[i + 1].x, Spts[i + 1].y); i++; } int PS = 0; for (int i = 0; i < 20; i++) { if (i % 2 == 0) { if (PS % 2 == 0) { line(Wpts[i].x, Wpts[i].y, Spts[i / 2].x, Spts[i / 2].y); } else { line(Wpts[i + 1].x, Wpts[i + 1].y, Spts[i / 2].x, Spts[i / 2].y); } PS++; } } polygon(Wpts, 20); setlinestyle(PS_SOLID, 3); circle(320, 240, 150); setfillcolor(BLACK); for (int i = 0; i < 5; i++) { floodfill(Fpts[i].x, Fpts[i].y, BLACK); } _getch(); return 0; }
到此這篇關(guān)于C語言利用EasyX實現(xiàn)繪制足球圖案的文章就介紹到這了,更多相關(guān)C語言EasyX繪制足球內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言函數(shù)傳遞數(shù)組和傳遞地址的區(qū)別你知道嗎
這篇文章主要介紹了C語言中數(shù)組作為函數(shù)的參數(shù)以及返回值的使用簡單入門,這里以一維數(shù)組作為基本條件進(jìn)行例子講解,需要的朋友可以參考下2021-09-09C++構(gòu)造函數(shù)+復(fù)制構(gòu)造函數(shù)+重載等號運(yùn)算符調(diào)用
這篇文章主要介紹了C++構(gòu)造函數(shù)+復(fù)制構(gòu)造函數(shù)+重載等號運(yùn)算符調(diào)用,文章敘述詳細(xì),具有一定的的參考價值,需要的小伙伴可以參考一下2022-03-03c++基礎(chǔ)語法:構(gòu)造函數(shù)與析構(gòu)函數(shù)
構(gòu)造函數(shù)用來構(gòu)造一個對象,主要完成一些初始化工作,如果類中不提供構(gòu)造函數(shù),編譯器會默認(rèn)的提供一個默認(rèn)構(gòu)造函數(shù)(參數(shù)為空的構(gòu)造函數(shù)就是默認(rèn)構(gòu)造函數(shù)) ;析構(gòu)函數(shù)是隱式調(diào)用的,delete對象時候會自動調(diào)用完成對象的清理工作2013-09-09c++之time_t和struct tm及時間戳的正確使用方式
C++中處理時間的常用數(shù)據(jù)類型有time_t和struct tm,time_t通常用來表示時間戳,即從1970年1月1日至今的秒數(shù),struct tm是一個結(jié)構(gòu)體,用來存儲年、月、日、時、分、秒等信息,時間戳可以通過gmtime()轉(zhuǎn)換為struct tm類型,反之亦然2024-10-10