Как получить точки кривой Безье / параболы, используя 3 уникальные точки на графике - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь сделать параболическую кривую / кривую Безье между двумя основными точками (используя третью точку в качестве контрольной точки) и не могу понять, как это сделать.

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, чтобы я мог иметь несколько линий, я уже исключил возможность параболических кривых, потому что это уравнение не подходит для параболы, если я неповерните самолет, но это еще один чайник с рыбой, к которому я не готов.

Мне бы очень хотелось помочь, так как я прилично застрял, спасибо

Редактировать: я попробовал честноНесколько вещей, которые ни одна из них не подошла близко, я закончил тем, что просто побежал со средней точкой, переведенной в несколько пикселей.EG

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 особую линию.

1 Ответ

0 голосов
/ 27 июня 2019

Основываясь на объяснении Википедии квадратичных кривых Безье , мы можем просто сделать:

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

...