zoukankan      html  css  js  c++  java
  • 七夕情人节

    转载请标明地址:http://www.cnblogs.com/wangmengmeng/

    效果图:

     

    源代码:

    自己调试了老半天......orz

      1 #include <graphics.h>
      2 #include <conio.h>
      3 #include <math.h>
      4 
      5 //定义全局变量
      6 int rosesize=500;
      7 int h=-250;
      8 
      9 //定义结构体
     10 struct DOT
     11 {
     12     double x;
     13     double y;
     14     double z;
     15     double r;//hong
     16     double g;//liu
     17     //b  (蓝)  通过r计算
     18 };
     19 
     20 //计算点
     21 bool calc(double a,double b,double c,DOT &d)
     22 {
     23     double j,n,o,w,z;
     24 
     25     if(c>60){
     26         d.x=sin(a*7)*(13+5/(0.2+pow(b*4,4)))-sin(b)*50;
     27         d.y=b*rosesize+50;
     28         d.z=625+cos(a*7)*(13+5/(0.2+pow(b*4,4)))+b*400;
     29         d.r=a*1-b/2;
     30         d.g=a;
     31         return true;
     32     }//花柄
     33 
     34     double A=a*2-1;
     35     double B=b*2-1;
     36     if(A*A+B*B<1){
     37 
     38         if(c>37){
     39             j=(int(c)&1);
     40             n=j?6:4;
     41             o=0.5/(a+0.01)+cos(b*125)*3-a*300;
     42             w=b*h;
     43 
     44             d.x=o*cos(n)+w*sin(n)+j*610-390;
     45             d.y=o*sin(n)-w*cos(n)+550-j*350;
     46             d.z=1180+cos(B+A)*99-j*300;
     47             d.r=0.4-a*0.1+pow(1-B*B,-h*6)*0.15-a*b*0.4+cos(a+b)/5+pow(cos((o*(a+1)+(B>0?w:-w))/25),30)*0.1*(1-B*B);
     48             d.g=o/1000+0.7-o*w*0.000003;
     49             return true;
     50         }//
     51 
     52         if(c>32){
     53             c=c*1.16-0.15;
     54             o=a*45-20;
     55             w=b*b*h;
     56             z=o*sin(c)+w*cos(c)+620;
     57 
     58             d.x=o*cos(c)-w*sin(c);
     59             d.y=28+cos(B*0.5)*99-b*b*b*60-z/2-h;
     60             d.z = z;
     61             d.r=(b*b*0.3+pow((1-(A*A)),7)*0.15+0.3)*b;
     62             d.g=b*0.7;
     63             return true;
     64         }//花萼
     65 
     66         //flower
     67         o=A*(2-b)*(80-c*2);
     68         w=99-cos(A)*120-cos(b)*(-h-c*4.9)+cos(pow(1-b,7))*50+c*2;
     69         z=o*sin(c)+w*cos(c)+700;
     70 
     71         d.x=o*cos(c)-w*sin(c);
     72         d.y=B*99-cos(pow(b,7))*50-c/3-z/1.35+450;
     73         d.z=z;
     74         d.r=(1-b/1.2)*0.9+a*0.1;
     75         d.g=pow((1-b),20)/4+0.05;
     76         return true;
     77     }
     78     return false;
     79 }
     80 
     81 //主函数
     82 void main()
     83 {
     84     //定义变量
     85     short *zBuffer;
     86     int x,y,z,zBufferIndex;
     87     DOT dot;
     88 
     89     //初始化
     90     initgraph(640,480);
     91     setbkcolor(WHITE);
     92     cleardevice();
     93 
     94     //初始化 zbuffer
     95     zBuffer = new short[rosesize*rosesize];
     96     memset(zBuffer,0,sizeof(short)*rosesize*rosesize);
     97 
     98     for(int j=0;j<2000 && !_kbhit();j++){
     99         for(int i=0;i<10000;i++)//减少是否有按键的判断
    100             if(calc(double(rand()) / RAND_MAX, double(rand()) / RAND_MAX, rand() % 46 / 0.74, dot)){
    101                 z=int(dot.z+0.5);
    102                 x=int(dot.x*rosesize/z-h+0.5);
    103                 y=int(dot.y*rosesize/z-h+0.5);
    104                 if (y >= rosesize) continue;
    105 
    106                 zBufferIndex=y*rosesize+x;
    107 
    108                 if(!zBuffer[zBufferIndex]||zBuffer[zBufferIndex]>z){
    109                     zBuffer[zBufferIndex]=z;
    110 
    111                     //画点
    112                     int r=~int ((dot.r*h));
    113                     if(r<0)  r=0;
    114                     if(r>255)  r=255;
    115                     int g=~int ((dot.g*h));
    116                     if(g<0)  g=0;
    117                     if(g>255)  g=255;
    118                     int b=~int ((dot.r*dot.r*-80));
    119                     if(b<0)  b=0;
    120                     if(b>255)  b=255;
    121                     putpixel(x+50,y-20,RGB(r,g,b));
    122                 }
    123             }
    124             Sleep(1);
    125     }//按任意键退出
    126     //退出
    127     delete[]zBuffer;
    128     _getch();
    129     closegraph();
    130 }

    来自:C语言程序设计经典236例

  • 相关阅读:
    脉络清晰的BP神经网络讲解,赞
    Git工作流指南:Gitflow工作流 Comparing Workflows
    局部敏感哈希Locality Sensitive Hashing(LSH)之随机投影法
    CMake入门指南-编译教程
    LaTeX新人教程,30分钟从完全陌生到基本入门
    Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
    JSON 数组
    JSON 对象
    JSON语法
    JSON
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/4716124.html
Copyright © 2011-2022 走看看