C语言画圣诞树源码(树界降临)

逐梦编程,让中华屹立世界之巅。
简单的事情重复做,重复的事情用心做,用心的事情坚持做;

上一篇: C语言实现画爱心(两种方式画法)



前言

圣诞节了,别人都手绘圣诞树,本期用C语言画一个会跳动的圣诞树之树界降临;

做一个漂亮的圣诞树送给你的爱人哈,愿天下有情人终成眷属!


一、圣诞树介绍

圣诞树,是指用灯烛和装饰品把枞树或洋松装点起来的常青树。作为是圣诞节重要的组成元素之一,近代圣诞树起源于德国,后来逐步在世界范围内流行起来,成为圣诞节庆祝中最有名的传统之一。

据说圣诞树最早出现在古罗马12月中旬的所谓农神节。现在通常人们在圣诞前后把一棵常绿植物如松树弄进屋里或者在户外,并用圣诞灯和彩色的装饰物装饰。并把一个天使或星星放在树的顶上。

二、效果图欣赏

在这里插入图片描述

在这里插入图片描述

三、圣诞小故事赏析

以前德国的亚尔萨斯(现一般译为阿尔萨斯,属法国),是出产圣诞树的地方。根据传说,有一位名叫弗乐伦亭的隐修圣人,住在亚尔萨斯的一个树林当中,他非常喜欢小孩子。有一年的圣诞节,他希望附近的小孩子,都能在一起快乐的玩,但是他很贫穷,没有钱买孩子们喜爱的玩具和糖果,因此他为这件事很伤脑筋。

一天早上,弗乐伦亭在树林中散步的时候,忽然看见一棵小杉树,树上堆满了雪,枝上挂着许多小冰条,经过太阳一照射,闪闪发光,非常的漂亮。他就把那棵树弄回来,种在盆里面。又在树林中捡一些野果子,再和上面粉,做成一些十字架,或星星形状的小饼,挂在树枝上面。又用一些小蜡烛,插在树枝上,把那棵树装扮得五光十色,非常的美观。到了圣诞夜晚,弗乐伦亭打起钟来,孩子们听到了,都跑到他的茅屋里,大家围着那棵树,手舞足蹈的唱着圣诞歌曲,然后弗乐伦亭把糕饼分给孩子们吃,让大家过了一个快乐的圣诞节。以后,这个习俗流传起来。

四、最喜爱的圣诞老人

圣诞节人物形象主要指圣诞老人(SantaClaus),其原型是生活在公元4世纪米拉城(今土耳其境内)的主教圣尼古拉斯。他一生当中做了很多慈善工作,最喜欢在暗中帮助穷人。圣诞老人是他后来的别号,这个名字是出自他暗中送钱,帮助三个女孩子的故事。尼古拉斯死后被尊为圣徒。圣诞老人的形象是一位身穿红袍、头戴红帽的白胡子老头。每年圣诞节他驾着鹿拉的雪橇从北方而来,由烟囱进入各家,把圣诞礼物装在袜子里挂在孩子们的床头上或火炉前。

五、代码示例

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   圣诞树--树界降临(C语言)
* 			 代码所属:   枫之剑客
* 			     作者:   阿甘
* 		     开发时间:   2021/12/24
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx/article/details/128200056
#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("............................@y%u"[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("You are all the cutest.\n");
	Sleep(500);

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

	printf("2021/12/24, 献给每一位编程爱好者\n");

	system("pause");

}

总结

相信现在大家都有一颗圣诞树了,或许许多时候编程的乐趣就在这里,偶尔做一个小游戏可能使你兴趣大增,提高兴趣程度对学习帮助很大哈,文末了,写文不易,喜欢的友友们帮忙点个关注和赞。

新壁纸

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑶池酒剑仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值