萬花模擬器(C/C++基礎(chǔ))
作者:遺忘天國卍
還記得小時(shí)候玩的萬花尺么?好好玩,各種不同的點(diǎn)距能畫出各種各樣形狀圖形。C語言程序萬花尺模擬,函數(shù)功能:每隔5秒隨機(jī)生成萬花圖形 并自動保存作圖參數(shù)以及圖形到當(dāng)前目錄,圖像格式為jpg
還記得小時(shí)候玩的萬花尺么?好好玩,各種不同的點(diǎn)距能畫出各種各樣形狀圖形。
C語言程序萬花尺模擬
函數(shù)功能:每隔5秒隨機(jī)生成萬花圖形 并自動保存作圖參數(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; // 動圓半徑
- int dr; // 動圓上的作圖點(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),使其在窗口中心畫圖
- setorigin(400, 300);
- // 開始繪圖
- 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);
- //畫面停留5秒后,清屏重新畫另一個(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("最大值與最小值反過來了?\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("處理出錯!");
- getchar();
- return -2;
- }
- if (p2>*p_max || p2<*p_min)
- {
- printf("數(shù)據(jù)有誤!");
- getchar();
- }
- }
- return p2;
- }
//部分代碼截圖以及效果圖展現(xiàn)如下









責(zé)任編輯:未麗燕
來源:
今日頭條