意外输出

时间:2019-02-01 20:00:18

标签: arrays matlab plot bezier cubic-bezier

当前尝试整理一些代码,我想将曲线添加到单个数组中,然后简单地使用该数组来绘制而不是单独调用,这也将帮助我稍后进行填充。我有我的阵列,但由于某种原因,我得到一个奇怪的输出是什么,我有一个随机的线切割拦腰预期不同。

试过到阵列被填充有曲线的顺序改变为没有影响

% 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 :(得分:3)

C1C3C2C4连接到单个数组(即outer)中,并且当您使用plot在两个连续点之间绘制线,前一个点将连接到下一个点。

您有outer(:,200) = [-1.1102e-16 ; 1]outer(:,201) = [0; -1]。当您使用plot时,将在这两个点之间绘制一条线,就像在其他点之间绘制该线一样。这行就是您所说的“削减中间的随机行” 。如果要保留单个数组并避免这种情况,则可以在NaN之间插入一列,像这样:

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

给出:

output

分别绘制C1C2C3C4时,它们的终点与另一个的起点没有联系,因此这些图彼此独立,您不会在中间找到那条线。