Dane:
- punkty kontrolne P0, P1, P2
- czas t
punkt B jest punktem na krzywej Béziera drugiego opisanego p0, p1, i p2 w czasie t.
q0 jest punktem na liniowej krzywej Beziera opisanej przez p0 i p1 w czasie t.
q1 jest punktem na liniowej krzywej Beziera opisanej przez p1 i p2 w czasie t.
odcinka linii pomiędzy q0, a Q1 jest styczna do Krzywa Béziera w punkcie B.
Dlatego kąt krzywej Beziera w chwili t jest równa nachyleniu odcinka linii pomiędzy q0, a Q1.
Wikipedia pokazuje to jako lovely gif. Czarna kropka to punkt B, a punktami końcowymi segmentu zielonej linii są q0 i q1.
Zasada jest identyczna dla krzywych Beziera o wyższych wymiarach. Aby znaleźć kąt punktu na krzywej N-stopniu beziera, znajdź q0 i q1, które są punktami na krzywych Beziera dla N-1 stopnia dla punktów kontrolnych [p0, p1, ..., p (N-1)] i [p1, p2, ..., pN]. Kąt jest równy nachyleniu segmentu linii q0-q1.
W Pseudokod:
def bezierCurve(controlPoints, t):
if len(controlPoints) == 1:
return controlPoints[0]
else:
allControlPointsButTheLastOne = controlPoints[:-1]
allControlPointsButTheFirstOne = controlPoints[1:]
q0 = bezierCurve(allControlPointsButTheLatOne, t)
q1 = bezierCurve(allControlPointsButTheFirstOne, t)
return (1-t) * q0 + t * q1
def bezierAngle(controlPoints, t):
q0 = bezierCurve(controlPoints[:-1], t)
q1 = bezierCurve(controlPoints[1:], t)
return math.atan2(q1.y - q0.y, q1.x - q0.x)
Jeśli robisz matematyki dostać sam punkt, dlaczego nie można zrobić pochodna do znalezienia nachylenia? następnie wziąć atan2, aby znaleźć kąt? Niezbyt dobrze znane z krzywych Beizera, więc nie czyniąc tego prawdziwą odpowiedzią. –