IE盒子

搜索
查看: 120|回复: 1

用C语言实现一个圣诞树!(超简单详细)全部源码分享

[复制链接]

3

主题

6

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2022-12-28 13:51:12 | 显示全部楼层 |阅读模式
2022年12月25号就是圣诞节了!圣诞节当然要有个圣诞树了,今天给你们用C语言编写一个雪夜圣诞树!
如果本人的代码能够帮到你的话,还请在文章下方点个赞支持一下哟~ 这个就是用单纯的C语言代码实现的,需要一点点数学知识
那么我们话不多说,先来看看具体的效果吧~
后面我会更新更加酷炫的圣诞树,大家可以期待哦~
效果展示:


别人都手绘圣诞树,身为程序猿的我们可以用C语言编写一个圣诞树出来,可能C语言的效果没那么炫酷,后面我在看看弄个带音乐或者带雪花的版本出来,大家先用这个小小的准备一些吧~
代码如下:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define PI 3.14159265359
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;
}
#define T px + scale * r* cosf(theta), py + scale * r * sin(theta)
int ribbon() {
        float x = (fmodf(sy, 0.1f) / 0.1f - 0.5f) * 0.5f;
        return sx >= x - 0.05f && sx <= x + 0.05f;
}
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 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(' ');
                }
}



希望对大家有帮助!快拿着代码去试试效果吧~有什么问题可以来我下方粉丝群哦!
此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上披荆斩棘!
C语言C++编程学习视频分享:




整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
C语言/C++/数据结构与算法学习群
回复

使用道具 举报

1

主题

4

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 3 天前 | 显示全部楼层
看起来好像不错的样子
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表