如何使用图表上的 3 个唯一点获取贝塞尔 curve/parabola 的点
How to get the points of a bezier curve/parabola using 3 unique points on a graph
我正在尝试在两个主要点之间制作一条 parabolic/bezier 曲线(使用第三个点作为控制点),但不知道该怎么做。
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()
这在我的要点 2 点之间创建了一条线,
我还想用 pointA
做一条曲线,这样我就可以有多条线,
我已经排除了抛物线曲线的可能性,因为除非我旋转平面,否则该方程式不适合抛物线,但那是我还没有准备好的另一锅鱼。
我很想得到一些帮助,因为我被困住了,
谢谢
编辑:
我已经尝试了一些 none 的事情,其中有一些很接近,我最终只求助于 运行 一个中点转换了几个像素。例如
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()
我正在尝试在两个主要点之间制作一条 parabolic/bezier 曲线(使用第三个点作为控制点),但不知道该怎么做。
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()
这在我的要点 2 点之间创建了一条线,
我还想用 pointA
做一条曲线,这样我就可以有多条线,
我已经排除了抛物线曲线的可能性,因为除非我旋转平面,否则该方程式不适合抛物线,但那是我还没有准备好的另一锅鱼。
我很想得到一些帮助,因为我被困住了, 谢谢
编辑: 我已经尝试了一些 none 的事情,其中有一些很接近,我最终只求助于 运行 一个中点转换了几个像素。例如
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()