编程代码
新闻详情

万花模拟器(C/C++基础)

发布时间:2021-01-11 10:55:18 浏览次数:2030

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

还记得小时候玩的万花尺么?好好玩,各种不同的点距能画出各种各样形状图形。

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;

}


//部分代码截图以及效果图展现如下

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)

万花模拟器(C/C++基础)
在线客服 双翌客服
客服电话
  • 0755-23712116
  • 13822267203