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

开发 后端
还记得小时候玩的万花尺么?好好玩,各种不同的点距能画出各种各样形状图形。C语言程序万花尺模拟,函数功能:每隔5秒随机生成万花图形 并自动保存作图参数以及图形到当前目录,图像格式为jpg

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

C语言程序万花尺模拟

函数功能:每隔5秒随机生成万花图形 并自动保存作图参数以及图形到当前目录,图像格式为jpg

提示:

  • 相关参数范围可以自行设置,用自定义mySetRand函数设置作图尺寸范围

注意:

  • 内圆半径不能大于外圆半径,内圆作图点不能大于内圆半径

/*以下是完整代码,可自行个性化更改参数*/

 

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. int mySetRand(int num, int minint max);  
  8. #define PI 3.1415926536  
  9. int main()  
  10.  
  11. int k = 0;  
  12. wchar_t s[255] = { NULL };  
  13. int R; // 静圆半径  
  14. int r; // 动圆半径  
  15. int dr; // 动圆上的作图点到圆心的距离  
  16. while (1)  
  17.  
  18. //产生一个100-395之间的随机数  
  19. R = mySetRand(1, 100, 395);  
  20. r = R - mySetRand(1, 5, 95);  
  21. dr = r - mySetRand(1,2, r-5);  
  22. // 求执行次数(最小公倍数/静圆半径)  
  23. int m = R, n = r;  
  24. int tmp;  
  25. while (n != 0)  
  26.  tmp = m % n;  
  27. m = n;  
  28. n = tmp;  
  29.  
  30. double maxdegree = r / m * 2 * PI;  
  31. //清屏  
  32. //cleardevice();  
  33. system("cls");  
  34. initgraph(800, 610);  
  35. setbkcolor(RGB(200, 200, 200));  
  36. // 设置作图原点坐标,使其在窗口中心画图  
  37. setorigin(400, 300);  
  38. // 开始绘图  
  39. int x, y;  
  40. for (double degree = 0; degree < maxdegree; degree += 0.01)  
  41.  
  42. x = (int)(dr * cos(degree*(double(R) / r - 1)) + (R - r) * cos(degree));  
  43. y = (int)(dr * sin(degree*(double(R) / r - 1)) - (R - r) * sin(degree));  
  44. putpixel(x, y, RGB(255,255,0));  
  45.  
  46. //归位原点坐标  
  47. setorigin(0, 0);  
  48. _stprintf_s(s, _T("作图参数:外圆半径%.3d像素\\内圆半径%.3d像素\\作图点到圆心距离%.3d像素"), R, r, dr);  
  49. settextstyle(20, 0, _T("黑体")); 
  50.  settextcolor(RED);  
  51. outtextxy(60, 587, s);  
  52. //保存图形到当前目录  
  53. k++;  
  54. _stprintf_s(s, _T("%.6d.jpg"), k);  
  55. saveimage(s);  
  56. //画面停留5秒后,清屏重新画另一个图  
  57. Sleep(5000);  
  58. closegraph();  
  59.  
  60. return 0;  
  61.  
  62. //指定范围随机数产生  
  63. //num产生个数,产生范围minmax(包括minmax 
  64. int mySetRand(int num, int minint max 
  65.  
  66. int *p_num = &num;  
  67. int *p_min = &min 
  68. int *p_max = &max 
  69. int a = 0;  
  70. int p1 = 0, p2 = 0;  
  71. if ((*p_num)<0 || (*p_min>*p_max))  
  72.  
  73. printf("最大值与最小值反过来了?\n元素个数为负数了?");  
  74. getchar();  
  75. return -1;  
  76.  
  77. srand((unsigned int)time(0));  
  78. for (size_t i = 0; i < *p_num; i++)  
  79.  
  80. a = rand(); 
  81.  if (*p_min == 0) 
  82.  
  83.  
  84. p2 = a % (*p_max + 1);  
  85.  
  86. else if (*p_min>0)  
  87.  
  88. p1 = a / (*p_max - *p_min + 1);  
  89. p2 = a - p1*(*p_max - *p_min + 1) + *p_min; 
  90.   
  91. else  
  92.  printf("处理出错!");  
  93. getchar(); 
  94.  return -2;  
  95.  
  96. if (p2>*p_max || p2<*p_min)  
  97.  printf("数据有误!");  
  98. getchar();  
  99.  
  100.  return p2;  

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2011-07-14 17:45:06

CC++

2011-07-15 00:47:13

C++多态

2011-07-13 18:24:18

C++

2020-07-30 12:40:35

CC++编程语言

2011-06-21 10:00:21

预处理指令

2009-09-14 09:59:19

CCNA模拟器介绍CCNA

2009-04-11 15:12:24

.Net MicroI2C总线模拟器

2010-02-06 09:53:26

C++ void

2010-02-01 16:13:15

C++继承

2010-01-28 13:57:19

C++指针基础

2011-07-05 13:24:03

C++

2022-02-14 10:29:40

AndroidLinux模拟器

2021-12-10 12:20:06

LinuxCC++

2022-04-01 13:10:20

C++服务器代码

2009-09-04 16:05:08

2010-01-19 14:45:35

C++语言

2023-12-06 13:48:00

C++代码

2010-01-19 10:16:40

C++程序

2010-02-02 09:43:27

C++存储区域

2011-07-15 01:38:56

C++this指针
点赞
收藏

51CTO技术栈公众号