使用C语言和Python画圣诞树


C语言自动画圣诞树源码(单色):

#include
#include
#include
#include
#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,test!\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("2020/12/20, From test\n");
getchar();
}

Python自动画圣诞树 彩色(只能在编译器中运行):

from turtle import * import time
setup(500, 500, startx=None, starty=None) speed(0) pencolor("pink") pensize(10) penup() hideturtle() goto(0, 150) showturtle() pendown() shape(name="classic") # 1 seth(-120) for i in range(10):     fd(12)     right(2) penup() goto(0, 150) seth(-60) pendown() for i in range(10):     fd(12)     left(2) seth(-150) penup() fd(10) pendown() for i in range(5):     fd(10)     right(15) seth(-150) penup() fd(8) pendown() for i in range(5):     fd(10)     right(15) seth(-155) penup() fd(5) pendown() for i in range(5):     fd(7)     right(15) # 2 penup() goto(-55, 34) pendown() seth(-120) for i in range(10):     fd(8)     right(5)
penup() goto(50, 35) seth(-60) pendown() for i in range(10):     fd(8)     left(5) seth(-120) penup() fd(10) seth(-145) pendown() for i in range(5):     fd(10)     right(15) penup() fd(10) seth(-145) pendown() for i in range(5):     fd(12)     right(15) penup() fd(8) seth(-145) pendown() for i in range(5):     fd(10)     right(15) penup() seth(-155) fd(8) pendown() for i in range(5):     fd(11)     right(15) # 3 penup() goto(-100, -40) seth(-120) pendown() for i in range(10):     fd(6)     right(3) penup() goto(80, -39) seth(-50) pendown() for i in range(10):     fd(6)     left(3) seth(-155) penup() fd(10) pendown() for i in range(5):     fd(8)     right(10) penup() fd(8) seth(-145) pendown() for i in range(7):     fd(8)     right(10) penup() fd(8) seth(-145) pendown() for i in range(7):     fd(7)     right(10) penup() fd(8) seth(-145) pendown() for i in range(7):     fd(7)     right(10) penup() fd(8) seth(-140) pendown() for i in range(7):     fd(6)     right(10)
# 4 penup() goto(-120, -95) seth(-130) pendown() for i in range(7):     fd(10)     right(5) penup() goto(100, -95) seth(-50) pendown() for i in range(7):     fd(10)     left(5) penup() seth(-120) fd(10) seth(-155) pendown() for i in range(6):     fd(8)     right(10) penup() seth(-160) fd(10) seth(-155) pendown() for i in range(6):     fd(8)     right(10) penup() seth(-160) fd(10) seth(-155) pendown() for i in range(6):     fd(8)     right(10) penup() seth(-160) fd(10) seth(-160) pendown() for i in range(6):     fd(8)     right(10) penup() seth(-160) fd(10) seth(-160) pendown() for i in range(6):     fd(8)     right(10) penup() seth(-160) fd(10) seth(-165) pendown() for i in range(5):     fd(10)     right(11) # 5 penup() goto(-70, -165) seth(-85) pendown() for i in range(3):     fd(5)     left(3) penup() goto(70, -165) seth(-95) pendown() for i in range(3):     fd(5)     right(3) seth(-170) penup() fd(10) pendown() pendown() for i in range(10):     fd(12)     right(2) # 6 penup() goto(70, -165) pendown() seth(-90) pensize(8) pencolor("#de8891") circle(-20, 90)
penup() goto(30, -185) pendown() seth(-180) pensize(8) pencolor("#de8891") fd(40)
penup() goto(-5, -170) pendown() seth(-180) pensize(8) pencolor("#de8891") fd(35)

def guest(x, y, z):     penup()     goto(x, y)     seth(-z)     pendown()     for angel in range(5):         fd(10)         right(10)

def guet(x, y, z):     penup()     goto(x, y)     seth(-z)     pendown()     for angel in range(5):         fd(10)         left(10)

def qu(x, y, z):     penup()     goto(x, y)     seth(-z)     pendown()     for angel in range(5):         fd(6)         right(10)     seth(-150)     fd(20)

# 树枝 guest(-70, -150, 160) guest(100, -150, 160) guet(110, -110, 50) guest(160, -140, 150) qu(80, -120, 180) guest(70, -85, 165) guest(-40, -85, 165) guet(90, -50, 50) guest(130, -80, 150) pencolor("pink") qu(-40, -60, 180) pencolor('#de8891') qu(80, -30, 180) pencolor("pink") qu(40, 10, 180) pencolor("#de8891") guest(-60, 30, 120) guest(-20, -20, 150) guet(45, 40, 60) guest(-30, 40, 170) guest(-30, 110, 115) guet(40, 90, 60) guest(80, 50, 160) pencolor("#de8891")

def hdj(x, y):     penup()     goto(x, y)     seth(80)     pendown()     pensize(2)     circle(5)     seth(10)     fd(15)     seth(120)     fd(20)     seth(240)     fd(20)     seth(180)     fd(20)     seth(-60)     fd(20)     seth(50)     fd(20)     seth(-40)     fd(30)     seth(-130)     fd(5)     seth(135)     fd(30)     seth(-60)     fd(30)     seth(-150)     fd(6)     seth(110)     fd(30)

def uit(x, y):     penup()     goto(x, y)     pendown()     pensize(2)     circle(5)     seth(-10)     fd(15)     seth(90)     fd(15)     seth(200)     fd(15)     seth(160)     fd(15)     seth(-90)     fd(15)     seth(10)     fd(15)     seth(-60)     fd(20)     seth(-180)     fd(5)     seth(110)     fd(20)     seth(-90)     fd(20)     seth(-180)     fd(6)     seth(70)     fd(15)     hideturtle()

def yut(x, y, z):     penup()     goto(x, y)     pendown()     seth(z)     for po in range(5):         fd(4)         left(36)

def ytu(x, y, z):     penup()     goto(x, y)     pendown()     seth(z)     for kk in range(5):         fd(4)         left(36)

# 小蝴蝶结 seth(0) uit(40, -160) hdj(-80, -120) yut(-67, -115, 120) yut(-86, -123, 150) hdj(40, -50) yut(52, -45, 130) yut(34, -55, 160) seth(0) uit(-20, -60) ytu(-4, -60, 100) ytu(-20, -60, 120) hdj(-30, 20) yut(-15, 25, 130) yut(-40, 20, 180) uit(30, 70) ytu(45, 70, 100) ytu(30, 70, 120)
# 大蝴蝶结 pencolor("#f799e6") pensize(5) penup() seth(0) goto(0, 150) pendown() circle(10) seth(-15) fd(40) seth(90) fd(40) seth(200) fd(40) seth(160) fd(40) seth(-90) fd(40) seth(15) fd(40) seth(-70) pencolor("#f799e6") pensize(4) fd(40) seth(-180) fd(10) seth(100) fd(40) seth(-100) fd(40) seth(-180) fd(10) seth(70) fd(40) penup() seth(0) goto(0, 130) pencolor("pink") pendown()

def iou(x, y, z):     penup()     goto(x, y)     pencolor("#f799e6")     pendown()     seth(z)     for po in range(10):         fd(4)         left(18)

seth(0) iou(35, 145, 100) iou(-7, 145, 110) pencolor("red") pensize(7) penup() goto(-35, 135) pendown()
# 圣诞帽 seth(-20) pensize(2) penup() goto(-30, -120) pencolor("black") pendown() fillcolor("red") fd(30) circle(4, 180) fd(30) circle(4, 180) penup() goto(-25, -115) seth(75) pendown() begin_fill() for i in range(5):     fd(6)     right(20) seth(-10) for i in range(5):     fd(8)     right(15) seth(145) for i in range(5):     fd(5)     left(2) seth(90) for i in range(5):     fd(1)     left(2) seth(-90) for i in range(4):     fd(4)     right(6) seth(161) fd(30) end_fill() pensize(1) pencolor("black")

def koc(x, y, size):     pensize(2)     pencolor("black")     penup()     goto(x, y)     pendown()     begin_fill()     fillcolor("yellow")     for i in range(5):         left(72)         fd(size)         right(144)         fd(size)     end_fill()

# 星星 seth(-15) koc(-120, -70, 10) seth(10) koc(100, -20, 10) seth(-10) koc(10, 40, 10) seth(30) koc(-80, 60, 10) koc(100, -150, 10) koc(-140, -150, 10) koc(20, 120, 10)
# 袜子 seth(-20) pensize(2) penup() goto(-20, 80) pencolor("black") pendown() fillcolor("red") fd(25) circle(4, 180) fd(25) circle(4, 180) penup() goto(-15, 80) pendown() begin_fill() fillcolor("red") seth(-120) fd(20) seth(150) fd(5) circle(7, 180) fd(15) circle(5, 90) fd(30) seth(160) fd(18) end_fill() penup() seth(0) goto(100, -230) pendown() write("Merry Christmas", align="right", font=("方正黄草简体", 24, "bold")) done()