Python turtle 库未提供画抛物线的函数,但可通过解析函数( y 2 = 2 p x y^2=2px y2=2px, x 2 = 2 p y x^2=2py x2=2py)描点连线实现抛物线的绘制。所计算的点越多,图像就越接近抛物线。
具体实现
# 海龟绘图绘制抛物线
# author: 小喾苦
# date: 2022-5-14
# author's github: https://github.com/xkk1
# author's bilibili: https://space.bilibili.com/513689605
import turtle
if "turtle" not in locals().keys():
turtle = None
def parabola_x(begin, end, step=10, endstart=False, t=turtle):
"""
绘制开口朝向x轴(左右开口)的抛物线 y²=2px 的一半
parabola_x(begin, end, step=10, endstart=False, t=turtle)
begin 开始坐标、抛物线的顶点(x₁,y₁)
end 结束坐标(x₂,y₂)
step 精度,为一个整数,数越小精度越高速度越慢
endstart 是否从结束坐标开始绘制(True是\False否)
t turtle库的名称
"""
p = ( (end[1]-begin[1])**2/abs(end[0]-begin[0]) )/2 # 计算抛物线p的大小
if end[0]-begin[0] < 0: # 确定抛物线p的正负号
p = -p
if begin[1] > end[1]: # 确定精度的正负号
step = -step
t.pu() # 抬笔
if endstart == True: # 如果从结束坐标开始绘制
t.goto(end[0], end[1]) # 前往结束坐标
start = end[1]+1
stop = begin[1]
step = -step
else:
start = begin[1]
stop = end[1]+1
t.goto(begin[0], begin[1]) # 前往初始坐标
t.pd() # 放笔
for y in range(start ,stop ,step): # 相当于画函数图像的列表
x = ((y-begin[1])