C语言的玫瑰花

这是网上一段大神写的代码,水平足以让我膜拜,分享给大家学习!这段代码有个动听的名字,叫做“情人节的玫瑰花”!

代码的运行过程是个动态的,很优美,好好欣赏!

#include <graphics.h>

#include <conio.h>

#include <math.h>

// 定义全局变量

int rosesize=500;

int h=-250;

// 定义结构体

structDOT

{

    doublex;

    doubley;

    doublez;

    doubler;  // 红色

    doubleg;  // 绿色

    // b(蓝色) 通过 r 计算

};

// 计算点

boolcalc(doublea,doubleb,doublec,DOT&d)

{

    doublej,n,o,w,z;

    if(c>60)            // 花柄

    {

        d.x=sin(a*7)*(13+5/(0.2+pow(b*4,4)))-sin(b)*50;

        d.y=b*rosesize+50;

        d.z=625+cos(a*7)*(13+5/(0.2+pow(b*4,4)))+b*400;

        d.r=a*1-b/2;

        d.g=a;

        returntrue;

    }

    doubleA=a*2-1;

    doubleB=b*2-1;

    if(A*A+B*B<1)

    {

        if(c>37)        // 叶

        {

            j=(int(c)&1);

            n=j?6:4;

            o=0.5/(a+0.01)+cos(b*125)*3-a*300;

            w=b*h;

            d.x=o*cos(n)+w*sin(n)+j*610-390;

            d.y=o*sin(n)-w*cos(n)+550-j*350;

            d.z=1180+cos(B+A)*99-j*300;

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

            d.g=o/1000+0.7-o*w*0.000003;

            returntrue;

        }

        if(c>32)        // 花萼

        {

            c=c*1.16-0.15;

            o=a*45-20;

            w=b*b*h;

            z=o*sin(c)+w*cos(c)+620;

            d.x=o*cos(c)-w*sin(c);

            d.y=28+cos(B*0.5)*99-b*b*b*60-z/2-h;

            d.z=z;

            d.r=(b*b*0.3+pow((1-(A*A)),7)*0.15+0.3)*b;

            d.g=b*0.7;

            returntrue;

        }

        // 花

        o=A*(2-b)*(80-c*2);

        w=99-cos(A)*120-cos(b)*(-h-c*4.9)+cos(pow(1-b,7))*50+c*2;

        z=o*sin(c)+w*cos(c)+700;

        d.x=o*cos(c)-w*sin(c);

        d.y=B*99-cos(pow(b,7))*50-c/3-z/1.35+450;

        d.z=z;

        d.r=(1-b/1.2)*0.9+a*0.1;

        d.g=pow((1-b),20)/4+0.05;

        returntrue;

    }

    returnfalse;

}

// 主函数

voidmain()

{

    // 定义变量

    short  *zBuffer;

    int    x,y,z,zBufferIndex;

    DOT    dot;

    // 初始化

    initgraph(640,480);                // 创建绘图窗口

    setbkcolor(WHITE);                  // 设置背景色为白色

    cleardevice();                      // 清屏

    // 初始化 z-buffer

    zBuffer=newshort[rosesize*rosesize];

    memset(zBuffer,0,sizeof(short)*rosesize*rosesize);

    for(intj=0;j<2000&&!_kbhit();j++) // 按任意键退出

    {

        for(inti=0;i<10000;i++)        // 减少是否有按键的判断

            if(calc(double(rand())/RAND_MAX,double(rand())/RAND_MAX,rand()%46/0.74,dot))

            {

                z=int(dot.z+0.5);

                x=int(dot.x*rosesize/z-h+0.5);

                y=int(dot.y*rosesize/z-h+0.5);

                if(y>=rosesize)continue;

                zBufferIndex=y*rosesize+x;

                if(!zBuffer[zBufferIndex]||zBuffer[zBufferIndex]>z)

                {

                    zBuffer[zBufferIndex]=z;

                    // 画点

                    intr=~int((dot.r*h));              if(r<0)r=0;  if(r>255)r=255;

                    intg=~int((dot.g*h));              if(g<0)g=0;  if(g>255)g=255;

                    intb=~int((dot.r*dot.r*-80));    if(b<0)b=0;  if(b>255)b=255;

                    putpixel(x+50,y-20,RGB(r,g,b));

                }

            }

        Sleep(1);

    }

    // 退出

    delete[]zBuffer;

    _getch();

    closegraph();

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容