熱(re)線電話:0755-23712116
郵箱:contact@legoupos.cn
地址:深圳(zhen)市寶安區沙井街道后亭茅洲山工(gong)業園工(gong)業大(da)廈全至科(ke)技創(chuang)新(xin)園科(ke)創(chuang)大(da)廈2層2A
/****************************
還記得小時候玩(wan)的萬(wan)花尺么?好好玩(wan),各(ge)(ge)種不同的點(dian)距能(neng)畫(hua)出各(ge)(ge)種各(ge)(ge)樣形(xing)狀圖形(xing)。
C語言程序萬花尺模擬
函(han)數功能:每隔5秒隨機生(sheng)成(cheng)萬花圖(tu)(tu)形 并自動(dong)保存作圖(tu)(tu)參數以(yi)及圖(tu)(tu)形到當前(qian)目(mu)錄,圖(tu)(tu)像格式為jpg
提示:
相關參數范(fan)圍可以自(zi)行設(she)(she)置,用自(zi)定義mySetRand函數設(she)(she)置作圖尺寸范(fan)圍
注意:
內(nei)圓半徑不能(neng)大于外圓半徑,內(nei)圓作圖點(dian)不能(neng)大于內(nei)圓半徑
*****************************/
/*以(yi)下是完整(zheng)代(dai)碼,可自行個性化更改參數*/
#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; // 靜圓(yuan)半徑
int r; // 動圓半徑(jing)
int dr; // 動圓上的(de)作圖(tu)點(dian)到圓心的(de)距離
while (1)
{
//產生一(yi)個100-395之間的(de)隨(sui)機數
R = mySetRand(1, 100, 395);
r = R - mySetRand(1, 5, 95);
dr = r - mySetRand(1,2, r-5);
// 求執行次(ci)數(shu)(最(zui)小公倍數(shu)/靜(jing)圓(yuan)半(ban)徑)
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));
// 設置作圖原點(dian)坐標,使其(qi)在(zai)窗(chuang)口中心畫圖
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("作(zuo)圖參數:外圓半徑%.3d像(xiang)素(su)(su)\\內圓半徑%.3d像(xiang)素(su)(su)\\作(zuo)圖點到(dao)圓心距離%.3d像(xiang)素(su)(su)"), R, r, dr);
settextstyle(20, 0, _T("黑體"));
settextcolor(RED);
outtextxy(60, 587, s);
//保(bao)存圖形到當前目錄
k++;
_stprintf_s(s, _T("%.6d.jpg"), k);
saveimage(s);
//畫面(mian)停(ting)留(liu)5秒后,清屏重(zhong)新畫另一個(ge)圖
Sleep(5000);
closegraph();
}
return 0;
}
//指(zhi)定范圍隨機數產生
//num產生個數,產生范圍(wei)min到(dao)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("最大(da)值與最小值反過來(lai)了?\n元素個數(shu)為負數(shu)了?");
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("處理出(chu)錯!");
getchar();
return -2;
}
if (p2>*p_max || p2<*p_min)
{
printf("數(shu)據有誤!");
getchar();
}
}
return p2;
}
//部分代碼截圖(tu)以及效(xiao)果圖(tu)展現如下
熱(re)線電話:0755-23712116
郵箱:contact@legoupos.cn
地址:深圳(zhen)市寶安區沙井街道后亭茅洲山工(gong)業園工(gong)業大(da)廈全至科(ke)技創(chuang)新(xin)園科(ke)創(chuang)大(da)廈2層2A