gpt4 book ai didi

python - 如何使用图表上的 3 个唯一点获取贝塞尔曲线/抛物线的点

转载 作者:行者123 更新时间:2023-12-05 03:59:57 28 4
gpt4 key购买 nike

我正在尝试在两个主要点之间制作一条抛物线/贝塞尔曲线(使用第三个点作为控制点),但不知道该怎么做。

from turtle import *

pointA = (0.00,50.00)
pointB = (0.00,350.00)
pointC = (-300.00,50.00)

pu()
goto(pointB)
pd()
dot()
goto(pointC)
dot()

ht()

这在我的主要观点的两点之间创建了一条线,我还想使用 pointA 制作一条曲线,这样我就可以有多条线,我已经排除了抛物线曲线的可能性,因为除非我旋转平面,否则该方程式不适合抛物线,但那是我还没有准备好的另一锅鱼。

我很想得到一些帮助,因为我被困住了,谢谢

编辑:我已经尝试了很多东西,但没有一个能接近,我最终只好在中点平移几个像素的情况下运行。例如

for j in range(3):
pu()
goto(pointB)
pd()
dot()
midpoint = ((pointB[0]+pointC[0])/2, (pointB[1]+pointC[1])/2)
goto(midpoint[0]+(20*j), midpoint[1])
goto(pointC)
dot()

这是对我使用它的更现实的使用,除了我想将该实线更改为可变线,因为这取决于它将在同一条线上的两点的位置,从而使其看起来像1 条单行。

最佳答案

基于 Wikipedia's explanation of quadratic Bézier curves我们应该能够简单地做到:

from turtle import Screen, Turtle, Vec2D

p0 = Vec2D(0, 50)
p1 = Vec2D(-300, 50)
p2 = Vec2D(0, 350)

b = lambda t: p1 + (1 - t)**2 * (p0 - p1) + t**2 * (p2 - p1)

turtle = Turtle()
turtle.penup()

for position in [p2, p1, p0]:
turtle.goto(position)
turtle.dot()

turtle.pendown()

t = 0

while t <= 1:
position = b(t)

turtle.setheading(turtle.towards(position))
turtle.goto(position)

t += 0.1

screen = Screen()
screen.exitonclick()

enter image description here

关于python - 如何使用图表上的 3 个唯一点获取贝塞尔曲线/抛物线的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56737686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com