您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“怎么用C++實(shí)現(xiàn)萬(wàn)花模擬器”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
還記得小時(shí)候玩的萬(wàn)花尺么?好好玩,各種不同的點(diǎn)距能畫(huà)出各種各樣形狀圖形。
C語(yǔ)言程序萬(wàn)花尺模擬
函數(shù)功能:每隔5秒隨機(jī)生成萬(wàn)花圖形 并自動(dòng)保存作圖參數(shù)以及圖形到當(dāng)前目錄,圖像格式為jpg
提示:
相關(guān)參數(shù)范圍可以自行設(shè)置,用自定義mySetRand函數(shù)設(shè)置作圖尺寸范圍
注意:
內(nèi)圓半徑不能大于外圓半徑,內(nèi)圓作圖點(diǎn)不能大于內(nèi)圓半徑
/*以下是完整代碼,可自行個(gè)性化更改參數(shù)*/
#include #include #include #include #include #include int mySetRand(int num, int min, int max); #define PI 3.1415926536 int main() { int k = 0; wchar_t s[255] = { NULL }; int R; // 靜圓半徑 int r; // 動(dòng)圓半徑 int dr; // 動(dòng)圓上的作圖點(diǎn)到圓心的距離 while (1) { //產(chǎn)生一個(gè)100-395之間的隨機(jī)數(shù) R = mySetRand(1, 100, 395); r = R - mySetRand(1, 5, 95); dr = r - mySetRand(1,2, r-5); // 求執(zhí)行次數(shù)(最小公倍數(shù)/靜圓半徑) int m = R, n = r; int tmp; while (n != 0) { tmp = m % n; m = n; n = tmp; } double maxdegree = r / m * 2 * PI; //清屏 //cleardevice(); system("cls"); initgraph(800, 610); setbkcolor(RGB(200, 200, 200)); // 設(shè)置作圖原點(diǎn)坐標(biāo),使其在窗口中心畫(huà)圖 setorigin(400, 300); // 開(kāi)始繪圖 int x, y; for (double degree = 0; degree < maxdegree; degree += 0.01) { x = (int)(dr * cos(degree*(double(R) / r - 1)) + (R - r) * cos(degree)); y = (int)(dr * sin(degree*(double(R) / r - 1)) - (R - r) * sin(degree)); putpixel(x, y, RGB(255,255,0)); } //歸位原點(diǎn)坐標(biāo) setorigin(0, 0); _stprintf_s(s, _T("作圖參數(shù):外圓半徑%.3d像素\\內(nèi)圓半徑%.3d像素\\作圖點(diǎn)到圓心距離%.3d像素"), R, r, dr); settextstyle(20, 0, _T("黑體")); settextcolor(RED); outtextxy(60, 587, s); //保存圖形到當(dāng)前目錄 k++; _stprintf_s(s, _T("%.6d.jpg"), k); saveimage(s); //畫(huà)面停留5秒后,清屏重新畫(huà)另一個(gè)圖 Sleep(5000); closegraph(); } return 0; } //指定范圍隨機(jī)數(shù)產(chǎn)生 //num產(chǎn)生個(gè)數(shù),產(chǎn)生范圍min到max(包括min和max) int mySetRand(int num, int min, int max) { int *p_num = # int *p_min = &min; int *p_max = &max; int a = 0; int p1 = 0, p2 = 0; if ((*p_num)<0 || (*p_min>*p_max)) { printf("最大值與最小值反過(guò)來(lái)了?\n元素個(gè)數(shù)為負(fù)數(shù)了?"); getchar(); return -1; } srand((unsigned int)time(0)); for (size_t i = 0; i < *p_num; i++) { a = rand(); if (*p_min == 0) { p2 = a % (*p_max + 1); } else if (*p_min>0) { p1 = a / (*p_max - *p_min + 1); p2 = a - p1*(*p_max - *p_min + 1) + *p_min; } else { printf("處理出錯(cuò)!"); getchar(); return -2; } if (p2>*p_max || p2<*p_min) { printf("數(shù)據(jù)有誤!"); getchar(); } } return p2; }
//部分代碼截圖以及效果圖展現(xiàn)如下
“怎么用C++實(shí)現(xiàn)萬(wàn)花模擬器”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。