情节的意外输出
Unexpected Output For Plot
目前正在尝试整理一些代码,我想将曲线添加到一个数组中,然后简单地使用该数组来绘制而不是单独调用,这也将帮助我在以后进行填充。我有我的阵列,但由于某种原因,我得到了一个奇怪的输出,这与我预期的不同,中间有一条随机线。
尝试更改数组填充曲线的顺序无效
% 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,:))
然后我得到了我所期望的,希望这对你有所帮助。提前谢谢你
将 C1
、C3
、C2
和 C4
连接成一个数组,即 outer
,当您使用 plot
绘制两个连续点之间的线,前一个点连接到它的下一个点。
您有 outer(:,200) = [-1.1102e-16 ; 1]
和 outer(:,201) = [0; -1]
。当您使用 plot
时,会在这两点之间绘制一条直线,就像在其他点之间绘制直线一样。这一行就是你所说的"a random line cutting down the middle"。如果你想保留一个数组并避免这种情况,你可以像这样在它们之间连接一列 NaN
s:
outer = [C1, nan(2,1), C3, nan(2,1), C2, nan(2,1), C4];
给出:
当你分别绘制C1
、C2
、C3
和C4
时,每个的终点与另一个的起点没有联系,因此这些地块彼此独立,中间没有那条线。
目前正在尝试整理一些代码,我想将曲线添加到一个数组中,然后简单地使用该数组来绘制而不是单独调用,这也将帮助我在以后进行填充。我有我的阵列,但由于某种原因,我得到了一个奇怪的输出,这与我预期的不同,中间有一条随机线。
尝试更改数组填充曲线的顺序无效
% 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,:))
然后我得到了我所期望的,希望这对你有所帮助。提前谢谢你
将 C1
、C3
、C2
和 C4
连接成一个数组,即 outer
,当您使用 plot
绘制两个连续点之间的线,前一个点连接到它的下一个点。
您有 outer(:,200) = [-1.1102e-16 ; 1]
和 outer(:,201) = [0; -1]
。当您使用 plot
时,会在这两点之间绘制一条直线,就像在其他点之间绘制直线一样。这一行就是你所说的"a random line cutting down the middle"。如果你想保留一个数组并避免这种情况,你可以像这样在它们之间连接一列 NaN
s:
outer = [C1, nan(2,1), C3, nan(2,1), C2, nan(2,1), C4];
给出:
当你分别绘制C1
、C2
、C3
和C4
时,每个的终点与另一个的起点没有联系,因此这些地块彼此独立,中间没有那条线。