欢迎光临散文网 会员登陆 & 注册

圣诞树

2022-12-08 15:57 作者:祎生是鞠  | 我要投稿

#include <windows.h>


#include <math.h>


#include <stdio.h>


#include <stdlib.h>


#define PI 3.14159265359


#define T px + scale * r * cosf(theta), py + scale * r * sin(theta)


float sx, sy;


float sdCircle(float px, float py, float r) {


    float dx = px - sx, dy = py - sy;


    return sqrtf(dx * dx + dy * dy) - r;


}


float opUnion(float d1, float d2) {


    return d1 < d2 ? d1 : d2;


}


float f(float px, float py, float theta, float scale, int n) {


    float d = 0.0f;


    for (float r = 0.0f; r < 0.8f; r += 0.02f)


        d = opUnion(d, sdCircle(T, 0.05f * scale * (0.95f - r)));


    if (n > 0)


        for (int t = -1; t <= 1; t += 2) {


            float tt = theta + t * 1.8f;


            float ss = scale * 0.9f;


            for (float r = 0.2f; r < 0.8f; r += 0.1f) {


                d = opUnion(d, f(T, tt, ss * 0.5f, n - 1));


                ss *= 0.8f;


            }


        }


    return d;


}


int ribbon() {


    float x = (fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f;


    return sx >= x - 0.05f && sx <= x + 0.05f;


}


int main(int argc, char* argv[]) {


    int n = argc > 1 ? atoi(argv[1]) : 3;


    float zoom = argc > 2 ? atof(argv[2]) : 1.0f;


    for (sy = 0.8f; sy > 0.0f; sy -= 0.02f / zoom, putchar('\n'))


        for (sx = -0.35f; sx < 0.35f; sx += 0.01f / zoom) {


            if (f(0, 0, PI * 0.5f, 1.0f, n) < 0.0f) {


                if (sy < 0.1f) {


                    putchar('.');


                } else {


                    if (ribbon()) {


                        putchar('=');


                    } else {


                        putchar("............................#j&o"[rand() % 32]);


                    }


                }


            } else {


                putchar(' ');


            }


        }


    Sleep(1000);


    printf("\n\n\n");


    for (size_t i = 0; i < 40; i++) {


        putchar(' ');


    }


    //_sleep(5000);


    printf("Merry Christmas, baby~!\n");


    Sleep(500);


    for (size_t i = 0; i < 40; i++) {


        putchar(' ');


    }


    printf("Never say die.\n");


    Sleep(500);


    for (size_t i = 0; i < 40; i++) {


        putchar(' ');


    }


    printf("2016/12/24, 最爱你的UP主\n");


    getchar();


} 作者:C语言编程__Plus https://www.bilibili.com/read/cv14461692?from=search&;spm_id_from=333.337.0.0 出处:bilibili


圣诞树的评论 (共 条)

分享到微博请遵守国家法律