Python中如何用代码画一朵玫瑰

听说 python 还能画画?是的,今天亲手画一朵玫瑰给你。

turtle 是 python 中一个强大的绘制图像的库,可以用来绘制各种图像,使用起来很方便。

但是需要计算各种角度、距离等,所以要想完成一幅复杂的图像还是有一定的难度的。

今天我们来画一朵玫瑰试试,有兴趣的可以自己去调整下源码的参数,或者可以尝试画出你心中不一样的玫瑰花。

由于代码量比较多,而且大多数都是类似的功能,所以这里就不贴完整的源码了,挑一些主要的函数说明一下即可。

写这些文章主要目的还是为了说明 python 还是挺好玩的,希望能激发大家学习 python 的兴趣。

对了,想要完整源码的同学可以在公众号 [谭某人] 后台回复关键字 [玫瑰花] 即可。

turtle.speed(5) #画笔移动的速度

turtle.penup() #提起画笔,移动画笔但并不会绘制图形

turtle.pendown() #放下画笔,移动画笔即开始绘制 turtle.left(90) #逆时针转动画笔 90 度

turtle.right(90) #顺时针时针转动画笔 90 度

turtle.fd(25) #向前移动指定距离 fd=forward

turtle.bd(30) #向后移动指定距离 bd=backward

turtle.fillcolor(“red”) #填充颜色

turtle.begin_fill() #开始填充

turtle.end_fill() #结束填充

turtle.circle(200,50) #画一个圆 200 是半径,50 是弧度

#在程序的最后一行加一行 #不然画画结束后会自动退出 turtle.done()

一朵玫瑰花其实主要就是上面这几个函数来实现的,不过是参数不同罢了,在实现的过程中也可以调整参数然后看下具体的效果。

再提醒一个小问题,也是我自己在写这篇文章时遇到的问题,由于我把这个 python 脚本也命名为 turtle.py ,结果在运行程序的时候就报错找不到 turtle 对应模块之类的。

后来才发现这样写的话,import turtle 这个语句其实是会导入脚本自身的,并没有导入 turtle 这个库,所以把脚本重命名一下就好了。


Python中如何用代码画一朵玫瑰

1 回复

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import PathPatch
from matplotlib.path import Path

def draw_rose():
    fig, ax = plt.subplots(figsize=(8, 8))
    ax.set_aspect('equal')
    ax.axis('off')
    
    # 绘制花瓣
    theta = np.linspace(0, 2*np.pi, 1000)
    k = 5  # 花瓣数量参数
    r = np.sin(k * theta)  # 玫瑰线极坐标方程
    
    # 转换为笛卡尔坐标
    x = r * np.cos(theta)
    y = r * np.sin(theta)
    
    # 调整大小和位置
    scale = 3
    x = x * scale
    y = y * scale
    
    # 绘制玫瑰线
    ax.fill(x, y, color='#FF69B4', alpha=0.8, linewidth=2)
    
    # 添加花蕊
    circle = plt.Circle((0, 0), 0.5, color='#FFD700', zorder=2)
    ax.add_patch(circle)
    
    # 添加花茎
    stem_y = np.linspace(-8, -3, 100)
    stem_x = 0.2 * np.sin(10 * stem_y)
    ax.plot(stem_x, stem_y, color='#228B22', linewidth=3)
    
    # 添加叶子
    leaf_theta = np.linspace(0, np.pi, 50)
    leaf_r = 2 * np.sin(2 * leaf_theta)
    leaf_x = leaf_r * np.cos(leaf_theta)
    leaf_y = leaf_r * np.sin(leaf_theta) - 5
    
    # 旋转叶子
    from matplotlib.transforms import Affine2D
    import matplotlib.transforms as transforms
    
    # 左叶子
    t = Affine2D().rotate_deg(30).translate(-1.5, -4.5)
    left_leaf = PathPatch(Path(np.column_stack([leaf_x, leaf_y])), 
                         facecolor='#32CD32', 
                         transform=t + ax.transData)
    ax.add_patch(left_leaf)
    
    # 右叶子
    t = Affine2D().rotate_deg(-30).translate(1.5, -4.5)
    right_leaf = PathPatch(Path(np.column_stack([-leaf_x, leaf_y])), 
                          facecolor='#32CD32', 
                          transform=t + ax.transData)
    ax.add_patch(right_leaf)
    
    plt.xlim(-10, 10)
    plt.ylim(-10, 10)
    plt.title('Python Rose', fontsize=16, color='#8B0000')
    plt.show()

if __name__ == "__main__":
    draw_rose()

这段代码用matplotlib画了一朵数学玫瑰。核心是玫瑰线极坐标方程 r = sin(kθ),这里k=5控制花瓣数量。花蕊用金色圆点,花茎用绿色曲线,叶子通过坐标变换实现旋转。

运行需要安装matplotlib和numpy:pip install matplotlib numpy

建议:调整k值可以改变花瓣数量。

回到顶部