Неожиданный вывод для сюжета - PullRequest
0 голосов
/ 01 февраля 2019

В настоящее время, пытаясь навести порядок в некотором коде, я хочу добавить кривые в один массив, а затем просто использовать этот массив для построения графика, а не для отдельных вызовов, это также поможет мне заполнить позже.У меня есть мой массив, но по какой-то причине я получаю странный вывод, который отличается от того, что я ожидаю, со случайной линией, обрезающей середину.

Попытка изменить порядок заполнения массива кривымибезрезультатно

% Outer Spade
% Lower Curve Control Points
p1 = [0, 0, 0.5, 0.6;
     -1, 0, 0.1,  0];
p2 = refy(p1);
% Higher Curve Control Points
p3 = [0.6, 0.75, 0.75 , 0;
      0,  0.15, 0.4 ,   1]; 
p4 = refy(p3);


outer = [];


t = linspace(0,1,100);


C1 = cubic_bezier(p1,t);
C2 = cubic_bezier(p2,t);
C3 = cubic_bezier(p3,t);
C4 = cubic_bezier(p4,t);

outer =[outer C1,C3,C2,C4];

plot(outer(1,:),outer(2,:),'-b')

axis([-2 2 -1 3])






function C = cubic_bezier(P,t)
M = [-1,3,-3,1;
     3,-6,3,0;
    -3,3,0,0;
     1,0,0,0];

T = [t.^3;t.^2;t;t.^0];
C = P * M * T;
end

function r = refy(m)
r = [-1,0;0,1] * m;
end

Если я заменю внешнее и построю внешнее вместо следующего кода

hold on
plot(C1(1,:),C1(2,:))
plot(C2(1,:),C2(2,:))
plot(C3(1,:),C3(2,:))
plot(C4(1,:),C4(2,:))

Тогда я получу то, что ожидал, надеюсь, это поможет.Заранее спасибо

1 Ответ

0 голосов
/ 01 февраля 2019

С C1, C3, C2 и C4, объединенными в один массив, то есть outer, и когда вы используете plot для построения линии между двумя последовательными точками, предыдущая точка соединяетсядо следующей точки.

У вас есть outer(:,200) = [-1.1102e-16 ; 1] и outer(:,201) = [0; -1].Когда вы используете plot, между этими двумя точками также отображается линия, точно так же, как линии между другими точками.Эта линия - то, что вы называете «случайной линией, пересекающей середину» .Если вы хотите сохранить один массив и избежать этого, вы можете объединить столбец с интервалом NaN s следующим образом:

outer = [C1, nan(2,1), C3, nan(2,1), C2, nan(2,1), C4];

, что дает:

output

Когда вы строите C1, C2, C3 и C4 по отдельности, конечная точка каждого не имеет связи с начальной точкой другого, и, следовательно, графикинезависимы друг от друга, и вы не получите эту линию в середине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...