使用python绘制几种数学曲线,代码为AI生成。
以下是绘制科赫雪花的Python代码,使用递归算法生成分形图案,并通过`matplotlib`进行可视化:
```python
import matplotlib.pyplot as plt
import math
def koch_curve(start, end, depth):
"""递归生成科赫曲线的点"""
if depth == 0:
return [start, end]
else:
# 将线段分为三等分
x1, y1 = start
x2, y2 = end
dx = x2 - x1
dy = y2 - y1
# 计算四个关键点
pA = (x1 + dx/3, y1 + dy/3)
pB = (x1 + 2*dx/3, y1 + 2*dy/3)
# 计算等边三角形顶点
length = math.hypot(dx, dy)
theta = math.atan2(dy, dx)
px = pA[0] + (length/3) * math.cos(theta - math.pi/3)
py = pA[1] + (length/3) * math.sin(theta - math.pi/3)
peak = (px, py)
# 递归处理四个子段
return (
koch_curve(start, pA, depth-1)[:-1] +
koch_curve(pA, peak, depth-1)[:-1] +
koch_curve(peak, pB, depth-1)[:-1] +
koch_curve(pB, end, depth-1)
)
def draw_koch_snowflake(depth=3):
"""绘制完整的科赫雪花"""
# 定义初始等边三角形顶点
size = 1000
h = size * math.sqrt(3) / 2
vertices = [
(0, 0),
(size, 0),
(size/2, h)
]
# 生成三条边的点
points = []
for i in range(3):
edge = koch_curve(vertices[i], vertices[(i+1)%3], depth)
points += edge[:-1] # 避免重复添加端点
# 闭合曲线
points.append(points[0])
# 提取坐标并绘图
x, y = zip(*points)
plt.figure(figsize=(8, 8))
plt.axis('equal')
plt.axis('off')
plt.plot(x, y, 'b')
plt.show()
# 调用函数绘制科赫雪花(默认递归深度3)
draw_koch_snowflake()
```
**代码说明:**
1. **koch_curve函数**:
- 使用递归算法生成科赫曲线的坐标点
- 每次递归将线段分为三等分,并在中间段生成等边三角形顶点
- 通过三角函数计算顶点位置,确保正确的几何关系
2. **draw_koch_snowflake函数**:
- 创建初始等边三角形
- 对每条边应用科赫曲线生成算法
- 使用matplotlib绘制最终图形
**使用说明:**
1. 确保已安装matplotlib库:
```bash
pip install matplotlib
```
2. 将代码保存为`D:\MyPythonProject\koch\koch_snowflake.py`
3. 运行脚本,默认生成递归深度为3的科赫雪花:
```bash
python koch_snowflake.py
```
**效果调整:**
- 修改`draw_koch_snowflake()`参数调整递归深度(如`depth=4`更复杂)
- 修改`size`值改变雪花大小
- 修改`plt.plot()`参数调整线条颜色/粗细
该代码将生成一个对称的科赫雪花分形图案,递归深度越大细节越丰富,但计算时间也会增加。
以下是使用Python海龟绘图库绘制谢尔平斯基三角形的代码实现,包含递归算法和图形化绘制过程:
```python
import turtle
def draw_sierpinski(t, points, depth):
"""递归绘制谢尔平斯基三角形
:param t: 海龟对象
:param points: 三角形顶点坐标 (三元组)
:param depth: 递归深度
"""
# 定义三种不同颜色区分层级
colors = ["#4B0082", "#6A5ACD", "#9370DB", "#BA55D3"]
t.color(