前言
既然是学习数学,肯定会离不开各种图形,之前的文章中很多我都尽可能的不使用图来表示了,但是觉得不好,毕竟数学离开了图就会很抽象,所以我们这里单独的学习一下Python的各类图形绘制,包含绘制切线什么的,这样在数学学习的图像处理上就会好很多。
基础图形列表
编号 | 中文名称 | 英文名称 | 图形说明 |
---|---|---|---|
1 | 点 | Point | 几何中最基本元素,无大小、长度、宽度、高度,仅表示位置,二维平面用坐标 (x, y) 确定位置 |
2 | 线段 | Line Segment | 直线上两点间的有限部分,有两个端点,可确定长度,由两端点坐标确定位置和长度 |
3 | 射线 | Ray | 由线段一端无限延长形成,有一个端点,另一端无限延伸,不可测量长度 |
4 | 直线 | Line | 没有端点,可向两端无限延伸,不可度量长度,平面直角坐标系中可用线性方程表示 |
5 | 角 | Angle | 由两条有公共端点的射线组成,公共端点是顶点,两条射线是边,用度数衡量大小 |
6 | 三角形 | Triangle | 同一平面内不在同一直线上的三条线段首尾顺次连接组成的封闭图形。按边分有等边(三边相等)、等腰(至少两边相等)、不等边三角形;按角分有锐角(三角皆锐角)、直角(一角为直角)、钝角(一角为钝角)三角形 |
7 | 四边形 | Quadrilateral | 由不在同一直线上的四条线段依次首尾相接围成的封闭的平面图形或立体图形。常见的有平行四边形(两组对边分别平行)、矩形(四个角为直角的平行四边形)、菱形(四条边相等的平行四边形)、正方形(四个角为直角且四条边相等的平行四边形)、梯形(一组对边平行,另一组对边不平行)等 |
8 | 五边形 | Pentagon | 由五条线段首尾相连组成的封闭图形,内角和为 540 度,正五边形五条边相等,五个角也相等 |
9 | 六边形 | Hexagon | 由六条线段首尾相连围成的封闭图形,内角和为 720 度,正六边形六条边相等,六个内角也相等,每个内角为 120 度 |
10 | 圆形 | Circle | 平面上到定点的距离等于定长的所有点组成的图形,定点称为圆心,定长称为半径。圆是轴对称图形,也是中心对称图形 |
11 | 椭圆 | Ellipse | 平面内到两个定点的距离之和等于常数(大于两定点间距离)的点的轨迹,这两个定点叫做椭圆的焦点,两焦点间的距离叫做焦距 |
12 | 扇形 | Sector | 一条圆弧和经过这条圆弧两端的两条半径所围成的图形,扇形面积与圆心角(顶角)、圆半径相关 |
13 | 弓形 | Segment of a circle | 由弦及其所对的弧组成的图形,可分为劣弧弓形(小于半圆)和优弧弓形(大于半圆) |
开发环境
系统:win11
开发语言:Python
使用工具:Jupyter Notebook
使用库:turtle与Matplotlib
基础点线绘制
turtle 通过控制虚拟海龟移动逐点逐线绘制,适合简单几何,代码直观;Matplotlib 用函数批量处理数据绘制点线,用于复杂数据可视化,代码稍复杂。
turtle库绘制法
代码:
import turtle
# 创建一个turtle对象
t = turtle.Turtle()
# 设置画笔的速度
t.speed(1)
# 设置画笔的颜色
t.color("black")
# 绘制线段示例
def draw_line():
"""绘制一条线段"""
t.penup() # 抬起画笔
t.goto(-100, 0) # 将画笔移动到起始点
t.pendown() # 放下画笔
t.forward(200) # 向前移动200个单位
# 绘制双绞线示例
def draw_twisted_pair():
"""绘制双绞线"""
t.penup() # 抬起画笔
t.goto(-100, 50) # 将画笔移动到起始点
t.pendown() # 放下画笔
for _ in range(20): # 重复20次
t.forward(10) # 向前移动10个单位
t.right(90) # 右转90度
t.forward(10) # 向前移动10个单位
t.left(90) # 左转90度
# 调用函数绘制线段和双绞线
draw_line()
draw_twisted_pair()
# 保持窗口打开
turtle.done()
示意图:
通过turtle库绘制一个玫瑰花,背景颜色的提夫尼蓝,玫瑰花花瓣用玫瑰红,茎叶需要使用合适的绿色。
import turtle
# 设置背景颜色为提夫尼蓝
turtle.bgcolor("#009EEA")
# 创建一个turtle对象
t = turtle.Turtle()
# 设置画笔的速度
t.speed(10)
# 设置画笔的颜色为玫瑰红
t.color("#FF007F")
# 绘制玫瑰花
def draw_rose():
for i in range(18):
t.circle(50, 90)
t.right(90)
t.circle(50, 90)
t.right(10)
# 绘制玫瑰花的茎
def draw_stem():
t.color("#008000")
t.penup()
t.goto(0, -200)
t.pendown()
t.right(90)
t.forward(300)
# 绘制玫瑰花的叶子
def draw_leaf():
t.color("#008000")
t.begin_fill()
t.right(30)
t.circle(70, 120)
t.left(60)
t.circle(70, 120)
t.end_fill()
# 调用函数绘制玫瑰花、茎和叶子
draw_rose()
draw_stem()
draw_leaf()
# 隐藏画笔
t.hideturtle()
# 保持窗口打开
turtle.done()
绘制效果,虽然好难看,但是还算是个花,回头好好修饰一下。
改写一个
import turtle
# 设置背景颜色为蒂芙尼蓝
turtle.bgcolor("SkyBlue")
# 创建画笔
pen = turtle.Turtle()
pen.speed(0.01) # 设置画笔速度
# 定义绘制花瓣的函数
def draw_petal(size):
for _ in range(2):
pen.circle(size, 90)
pen.left(90)
pen.circle(size, 90)
pen.left(97)
# 定义绘制玫瑰花的函数
def draw_rose(num_petals, petal_size):
for _ in range(num_petals):
draw_petal(petal_size)
pen.left(360 / num_petals)
# 设置花瓣颜色为玫瑰红
pen.color("LightCoral")
# 绘制玫瑰花,花瓣数量和大小可以调整
draw_rose(120, 500) # 花瓣数量和大小可以根据需要调整
# 隐藏画笔
pen.hideturtle()
# 完成绘制后保持窗口打开
turtle.done()
Matplotlib绘制法
代码:
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 创建一个图形和坐标轴
fig, ax = plt.subplots()
# 绘制线段示例
def draw_line():
"""绘制一条线段"""
# 定义线段的起点和终点坐标
x = np.array([0, 1])
y = np.array([0, 1])
# 绘制线段
ax.plot(x, y, label='线段')
# 绘制双绞线示例
def draw_twisted_pair():
"""绘制双绞线"""
# 定义双绞线的x坐标
x = np.linspace(0, 1, 100)
# 定义双绞线的y坐标
y1 = np.sin(2 * np.pi * x)
y2 = np.cos(2 * np.pi * x)
# 绘制双绞线
ax.plot(x, y1, label='双绞线1')
ax.plot(x, y2, label='双绞线2')
# 调用函数绘制线段和双绞线
draw_line()
draw_twisted_pair()
# 添加图例
ax.legend()
# 显示图形
plt.show()
效果图:
总结
这里我代码中注释写的比较全面,其实我个人在绘图上还是比较喜欢实用matplotlib来绘制,但是有些复杂图形就真得使用turtle的画笔一点点的来画了,希望本文对你有所帮助。