Матрица Бернстайна
B = bernsteinMatrix(n,t)
, то, где B
= bernsteinMatrix(n
,t
)t
является вектором, возвращает length(t)
-by-(n+1)
матрица Бернстайна B
, такой что B(i,k+1)= nchoosek(n,k)*t(i)^k*(1-t(i))^(n-k)
. Здесь, индекс i
запускается от 1 до length(t)
и индекса выполнения k
от 0
до n
.
Матрица Бернстайна также называется матрицей Безье.
Используйте матрицы Бернстайна, чтобы создать Кривые Безье:
bezierCurve = bernsteinMatrix(n, t)*P
n+1
матричного P
задают контрольные точки Кривой Безье. Например, чтобы создать 3-D Кривую Безье второго порядка, задайте контрольные точки как:P = [p0x, p0y, p0z; p1x, p1y, p1z; p2x, p2y, p2z]
Постройте четвертый порядок Кривая Безье, заданная контрольными точками p0 = [0 1]
, p1 = [4 3]
, p2 = [6 2]
, p3 = [3 0]
, p4 = [2 4]
. Создайте матрицу с каждой строкой, представляющей контрольную точку:
P = [0 1; 4 3; 6 2; 3 0; 2 4];
Вычислите четвертый порядок матрица Бернстайна B
:
syms t B = bernsteinMatrix(4, t)
B = [ (t - 1)^4, -4*t*(t - 1)^3, 6*t^2*(t - 1)^2, -4*t^3*(t - 1), t^4]
Создайте Кривую Безье:
bezierCurve = simplify(B*P)
bezierCurve = [ -2*t*(- 5*t^3 + 6*t^2 + 6*t - 8), 5*t^4 + 8*t^3 - 18*t^2 + 8*t + 1]
Постройте кривую, добавляющую контрольные точки в график:
fplot(bezierCurve(1), bezierCurve(2), [0, 1]) hold on scatter(P(:,1), P(:,2),'filled') title('Fourth-order Bezier curve') hold off
Создайте третий порядок Кривая Безье, заданная 4 3 матричным P
контрольных точек. Каждая контрольная точка соответствует строке матричного P
.
P = [0 0 0; 2 2 2; 2 -1 1; 6 1 3];
Вычислите третий порядок матрица Бернстайна:
syms t B = bernsteinMatrix(3,t)
B = [ -(t - 1)^3, 3*t*(t - 1)^2, -3*t^2*(t - 1), t^3]
Создайте Кривую Безье:
bezierCurve = simplify(B*P)
bezierCurve = [ 6*t*(t^2 - t + 1), t*(10*t^2 - 15*t + 6), 3*t*(2*t^2 - 3*t + 2)]
Постройте кривую, добавляющую контрольные точки в график:
fplot3(bezierCurve(1), bezierCurve(2), bezierCurve(3), [0, 1]) hold on scatter3(P(:,1), P(:,2), P(:,3),'filled') hold off
Создайте третий порядок Кривая Безье с точкой оценки, заданной следующим 1
-by-101
векторный t
:
t = 0:1/100:1;
Вычислите третий порядок 101
-by-4
матрица Бернстайна и задайте контрольные точки:
B = bernsteinMatrix(3,t); P = [0 0 0; 2 2 2; 2 -1 1; 6 1 3];
Создайте и постройте Кривую Безье. Добавьте линии сетки и контрольные точки к графику.
bezierCurve = B*P; plot3(bezierCurve(:,1), bezierCurve(:,2), bezierCurve(:,3)) hold on grid scatter3(P(:,1), P(:,2), P(:,3),'filled') hold off