首頁>技術>

/****************************

還記得小時候玩的萬花尺麼?好好玩,各種不同的點距能畫出各種各樣形狀圖形。

C語言程式萬花尺模擬

函式功能:每隔5秒隨機生成萬花圖形 並自動儲存作圖引數以及圖形到當前目錄,影象格式為jpg

提示:

相關引數範圍可以自行設定,用自定義mySetRand函式設定作圖尺寸範圍

注意:

內圓半徑不能大於外圓半徑,內圓作圖點不能大於內圓半徑

*****************************/

/*以下是完整程式碼,可自行個性化更改引數*/

#include<time.h>

#include<stdio.h>

#include<math.h>

#include<conio.h>

#include<graphics.h>

#include<wchar.h>

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; // 動圓上的作圖點到圓心的距離

while (1)

{

//產生一個100-395之間的隨機數

R = mySetRand(1, 100, 395);

r = R - mySetRand(1, 5, 95);

dr = r - mySetRand(1,2, r-5);

// 求執行次數(最小公倍數/靜圓半徑)

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));

// 設定作圖原點座標,使其在視窗中心畫圖

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));

}

//歸位原點座標

setorigin(0, 0);

_stprintf_s(s, _T("作圖引數:外圓半徑%.3d畫素\\內圓半徑%.3d畫素\\作圖點到圓心距離%.3d畫素"), R, r, dr);

settextstyle(20, 0, _T("黑體"));

settextcolor(RED);

outtextxy(60, 587, s);

//儲存圖形到當前目錄

k++;

_stprintf_s(s, _T("%.6d.jpg"), k);

saveimage(s);

//畫面停留5秒後,清屏重新畫另一個圖

Sleep(5000);

closegraph();

}

return 0;

}

//指定範圍隨機數產生

//num產生個數,產生範圍min到max(包括min和max)

int mySetRand(int num, int min, int max)

{

int *p_num = &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元素個數為負數了?");

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("資料有誤!");

getchar();

}

}

return p2;

}

//部分程式碼截圖以及效果圖展現如下

19
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 資料倉庫元件:HBase叢集環境搭建和應用案例