目录
1. 抽象小蛋糕
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge, Circle, Rectangle, Polygon
def draw_layer_cake(ax, position, size):
"""绘制分层蛋糕"""
layers = 3
layer_height = size[1] / layers
colors = ['#FFD700', '#FFA07A', '#FF69B4']
for i in range(layers):
bottom = position[1] + i * layer_height
rect = Rectangle((position[0], bottom), size[0], layer_height,
facecolor=colors[i], edgecolor='black')
ax.add_patch(rect)
# 蜡烛
candle_x = position[0] + size[0] / 2
candle_top = position[1] + size[1]
ax.plot([candle_x, candle_x], [candle_top, candle_top + size[1]*0.2],
color='red', linewidth=3)
ax.add_patch(Circle((candle_x, candle_top + size[1]*0.2), 0.05,
color='yellow'))
# 装饰
for i in range(5):
x = position[0] + size[0] * (i+1)/6
y = position[1] + size[1] - 0.05
ax.add_patch(Circle((x, y), 0.03, color='white'))
# 创建画布
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_aspect('equal')
ax.axis('off')
ax.set_xlim(0, 12)
ax.set_ylim(0, 6)
# 绘制三种蛋糕
draw_layer_cake(ax, (1, 1), (2, 3))
# 添加标题
plt.title("Three Different Cakes", fontsize=16, pad=20)
plt.tight_layout()
plt.show()
1. 导入库
- 导入了NumPy(虽然代码中未直接使用)
- 导入了Matplotlib的pyplot模块
- 从matplotlib.patches导入了几种形状绘制工具:扇形(Wedge)、圆形(Circle)、矩形(Rectangle)和多边形(Polygon)
2. 定义绘制分层蛋糕的函数
def draw_layer_cake(ax, position, size):
"""绘制分层蛋糕"""
layers = 3
layer_height = size[1] / layers
colors = ['#FFD700', '#FFA07A', '#FF69B4']
- 定义了一个绘制分层蛋糕的函数,接收三个参数:
- `ax`:Matplotlib的坐标轴对象
- `position`:蛋糕的起始位置(左下角坐标)
- `size`:蛋糕的尺寸(宽度,高度)
- 设置蛋糕有3层(`layers = 3`)
- 计算每层的高度(`layer_height`)
- 定义每层的颜色(金色、浅橙红色、热粉色)
3. 绘制蛋糕层
for i in range(layers):
bottom = position[1] + i * layer_height
rect = Rectangle((position[0], bottom), size[0], layer_height,
facecolor=colors[i], edgecolor='black')
ax.add_patch(rect)
- 循环绘制每一层蛋糕
- 计算当前层的底部y坐标
- 创建矩形对象表示蛋糕层,设置颜色和边框
- 将矩形添加到坐标轴中
4. 绘制蜡烛
# 蜡烛
candle_x = position[0] + size[0] / 2
candle_top = position[1] + size[1]
ax.plot([candle_x, candle_x], [candle_top, candle_top + size[1]*0.2],
color='red', linewidth=3)
ax.add_patch(Circle((candle_x, candle_top + size[1]*0.2), 0.05,
color='yellow'))
- 计算蜡烛的x位置(蛋糕中央)
- 计算蜡烛顶部位置(蛋糕顶部)
- 用`plot`绘制蜡烛的线(红色)
- 用`Circle`绘制蜡烛火焰(黄色)
5. 绘制装饰
# 装饰
for i in range(5):
x = position[0] + size[0] * (i+1)/6
y = position[1] + size[1] - 0.05
ax.add_patch(Circle((x, y), 0.03, color='white'))
- 在蛋糕顶部均匀分布5个装饰点
- 每个装饰点是一个白色小圆
6. 创建画布和坐标轴
# 创建画布
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_aspect('equal')
ax.axis('off')
ax.set_xlim(0, 12)
ax.set_ylim(0, 6)
- 创建12x6英寸的画布
- 设置坐标轴比例为等比例(`equal`)
- 关闭坐标轴显示(`axis('off')`)
- 设置x和y轴的显示范围
7. 绘制蛋糕
- 调用`draw_layer_cake`函数绘制一个蛋糕
- 位置在(1,1),尺寸为宽2高3
8. 添加标题和显示
- 添加标题"Three Different Cakes"
- `tight_layout()`自动调整子图参数
- `show()`显示图形
2.极简花花
import numpy as np
import matplotlib.pyplot as plt
# 设置参数
theta = np.linspace(0, 12 * np.pi, 1000) # 角度范围
k = 5 # 花瓣数量参数
r = np.cos(k * theta) # 极坐标方程
# 转换为笛卡尔坐标
x = r * np.cos(theta)
y = r * np.sin(theta)
# 绘制图形
plt.figure(figsize=(8, 8))
plt.plot(x, y, color='red', linewidth=3)
plt.title('Mathematical Rose Curve', fontsize=16)
plt.axis('equal')
plt.axis('off')
plt.show()
1. 导入库
- `numpy`:用于数学计算和数组操作
- `matplotlib.pyplot`:用于数据可视化
2. 参数设置
theta = np.linspace(0, 12 * np.pi, 1000) # 角度范围
k = 5 # 花瓣数量参数
r = np.cos(k * theta) # 极坐标方程
- `theta`:创建一个从0到12π的等间距数组,共1000个点
- 12π大约等于6个完整的圆周(2π为一个圆周)
- 1000个点保证了曲线平滑
- `k = 5`:控制花瓣数量的参数
- `r = np.cos(k * theta)`:极坐标下的玫瑰曲线方程
- 当k为整数时,如果k为奇数,曲线有k个花瓣;如果k为偶数,有2k个花瓣
- 这里k=5,将产生5个花瓣
3. 转换为笛卡尔坐标
x = r * np.cos(theta)
y = r * np.sin(theta)
- 将极坐标(r, θ)转换为笛卡尔坐标(x, y)
- 转换公式:
- x = r * cos(θ)
- y = r * sin(θ)
4. 绘制图形
- 创建一个8×8英寸的图形
- 用红色线条绘制曲线,线宽为3
5. 图形美化
- 设置标题为"Mathematical Rose Curve",字体大小16
- `axis('equal')`:使x和y轴比例相同,保证图形不变形
- `axis('off')`:隐藏坐标轴
- `show()`:显示图形
数学原理
玫瑰曲线的极坐标方程为:
r = a * cos(kθ) 或 r = a * sin(kθ)
其中:
- a控制曲线的大小
- k控制花瓣的数量和形状
- 当k为有理数时,曲线是闭合的且有有限个花瓣
- 当k为无理数时,曲线永远不会闭合
3.抽象小恐龙
简单直接的一段代码嘿嘿
def ascii_dino():
print("""
__
/ _)
.-^^^-/ /
__/ /
/__.|_|-|_|
""")
ascii_dino()
4.一个小树帐篷
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge, Circle, Rectangle, Polygon
def draw_fancy_cake(ax, position, size):
"""绘制花式蛋糕"""
# 底部
bottom_points = [
(position[0], position[1]),
(position[0] + size[0]*0.3, position[1] - size[1]*0.1),
(position[0] + size[0]*0.7, position[1] - size[1]*0.1),
(position[0] + size[0], position[1]),
(position[0] + size[0]*0.7, position[1] + size[1]*0.1),
(position[0] + size[0]*0.3, position[1] + size[1]*0.1)
]
ax.add_patch(Polygon(bottom_points, facecolor='#D2B48C', edgecolor='black'))
# 中间层
middle_points = [
(position[0] + size[0]*0.1, position[1] + size[1]*0.1),
(position[0] + size[0]*0.4, position[1] + size[1]*0.4),
(position[0] + size[0]*0.6, position[1] + size[1]*0.4),
(position[0] + size[0]*0.9, position[1] + size[1]*0.1)
]
ax.add_patch(Polygon(middle_points + middle_points[-2::-1],
facecolor='#FFB6C1', edgecolor='black'))
# 顶层
top_points = [
(position[0] + size[0]*0.3, position[1] + size[1]*0.4),
(position[0] + size[0]*0.5, position[1] + size[1]*0.7),
(position[0] + size[0]*0.7, position[1] + size[1]*0.4)
]
ax.add_patch(Polygon(top_points, facecolor='#98FB98', edgecolor='black'))
# 装饰
ax.add_patch(Circle((position[0] + size[0]*0.5, position[1] + size[1]*0.7),
0.05*size[0], color='gold'))
for i in range(5):
x = position[0] + size[0] * (i+1)/6
ax.add_patch(Circle((x, position[1] + size[1]*0.1), 0.03*size[0],
color='white'))
# 创建画布
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_aspect('equal')
ax.axis('off')
ax.set_xlim(0, 12)
ax.set_ylim(0, 6)
# 绘制三种蛋糕
draw_fancy_cake(ax, (8, 1), (3, 3))
# 添加标题
plt.title("Three Different Cakes", fontsize=16, pad=20)
plt.tight_layout()
plt.show()
1. 代码结构分析
导入模块:
- `matplotlib.patches` 提供基本几何形状绘制能力
- 虽然导入了`Wedge`和`Rectangle`但未实际使用
def draw_fancy_cake(ax, position, size):
函数定义:
- 接收绘图轴对象`ax`、蛋糕位置`position`和尺寸`size`参数
- 采用模块化设计,便于复用
2. 绘图逻辑分析
(1) 蛋糕底部绘制
bottom_points = [...] # 6个顶点坐标
ax.add_patch(Polygon(bottom_points, facecolor='#D2B48C', edgecolor='black'))
- 形状设计:
- 使用六边形模拟波浪形蛋糕底
- 通过`size[0]*0.3`等比例计算确保缩放一致性
- 颜色`#D2B48C`是浅棕色(咖啡奶油色)
(2) 中间层绘制
middle_points = [...] # 4个顶点
ax.add_patch(Polygon(middle_points + middle_points[-2::-1], ...)
- `middle_points[-2::-1]`实现顶点逆序,形成闭合多边形
- 粉色(`#FFB6C1`)填充体现奶油层质感
(3) 顶层绘制
top_points = [...] # 三角形顶点
ax.add_patch(Polygon(top_points, facecolor='#98FB98'))
- 绿色(`#98FB98`)三角形模拟抹茶层
- 顶点计算采用`size[1]*0.7`等比例参数
3. 可视化效果分析
坐标系设置
ax.set_aspect('equal') # 保持纵横比
ax.axis('off') # 隐藏坐标轴
ax.set_xlim(0, 12) # 坐标系范围
ax.set_ylim(0, 6)
- 12x6的坐标系为多蛋糕排列预留空间
- 实际只绘制了1个位于(8,1)的蛋糕
4. 关键算法分析
顶点计算算法
position[0] + size[0]*0.3 # X坐标计算
position[1] + size[1]*0.1 # Y坐标计算
装饰物分布算法
position[0] + size[0] * (i+1)/6 # 等距分布
数学原理:
- 将蛋糕宽度6等分
- `(i+1)/6`实现5个装饰的均匀分布
5.另一个画法的高级花花
import numpy as np
import matplotlib.pyplot as plt
def fast_matplotlib_rose():
# 预计算所有点
theta = np.linspace(0, 12 * np.pi, 500) # 减少点数
k = 5
r = np.cos(k * theta)
x = r * np.cos(theta)
y = r * np.sin(theta)
# 创建颜色渐变
colors = np.linspace(0, 1, len(theta))
# 绘制
fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(x, y, c=colors, cmap='RdPu', s=10, alpha=0.8) # 使用散点代替线条
# 花茎
ax.plot([0, 0], [min(y)-0.5, min(y)-2], color='green', linewidth=3)
ax.axis('equal')
ax.axis('off')
plt.tight_layout()
plt.show()
fast_matplotlib_rose()
1. 核心数学原理
theta = np.linspace(0, 12*np.pi, 500) # 极角范围:6个完整圆周(12π)
k = 5 # 花瓣数量参数
r = np.cos(k*theta) # 极径方程:r = cos(5θ)
x = r * np.cos(theta) # 极坐标转笛卡尔坐标
y = r * np.sin(theta)
玫瑰曲线特性:当k为奇数时,曲线有k个花瓣;k为偶数时,有2k个花瓣。此处k=5生成5瓣玫瑰。
采样优化:`500`个点(原代码1000点)在平滑度和性能间取得平衡。
2. 可视化优化技巧
colors = np.linspace(0, 1, len(theta)) # 创建渐变颜色值
ax.scatter(x, y, c=colors, cmap='RdPu', s=10, alpha=0.8)
散点图替代线图:`scatter()`比`plot()`更适合:
颜色渐变(`cmap='RdPu'`)增强立体感
设置透明度(`alpha=0.8`)避免密集点重叠
点大小(`s=10`)控制花瓣粗细
颜色映射:`RdPu`(红-紫)色系模拟真实玫瑰色彩渐变。
3. 花茎绘制逻辑
ax.plot([0, 0], [min(y)-0.5, min(y)-2], color='green', linewidth=3)
4. 图形参数设置
ax.axis('equal') # 保持纵横比,防止图形变形
ax.axis('off') # 隐藏坐标轴,突出艺术效果
plt.tight_layout() # 自动调整边距
希望你玩的开心哦~之后还会更新一些好玩的代码(❁´◡`❁)