我正在使用MATLAB' plot3
命令绘制3d线条。
我已经将我的数据安排到X,Y,Z三元组中以贯穿该函数:
其中points是一个包含6列的数组。
第一行中的前三列是第一元素的第i个节点的坐标。类似地,前三列是第j个节点的坐标。
points =
[x1 y1 z1 x2 y2 z2]
0 0 0 60 0 0
60 0 0 90 0 0
60 0 30 60 0 0
60 0 30 60 30 30
60 30 30 60 30 0
plot3 ( [x1 ;x2] , [y1 ; y2] , [z1 ; z2], '-or')
通过其他一些处理我的结果如下:
仔细观察点数表,从[60 0 0]和[60 30 30]之间没有这样的线
有没有人对如何删除这个难看的人工制品有任何建议? 注意:使用这些元素和节点的分析不受影响,我怀疑它纯粹是图形化的。
答案 0 :(得分:2)
是的,你是对的。它是图形的。
MATLAB绘制点的方式是连接连续点之间的一条线。因此,它连接点1和2之间的线,然后是2和3,3和4等。
如果你想达到你想要的效果,那么没有对角线,你需要按照特定的顺序绘制线条。我要做的是首先绘制平行于z = 0
轴的直线,然后绘制方形。
%// Draw parallel line
plot3([90 0], [0 0], [0 0], '-or');
%// Draw square shape
x = [60 60 60 60];
y = [0 0 30 30];
z = [0 30 30 0];
hold on;
plot3(x, y, z, '-or');
axis ij; %// Invert y axis
看看我如何定义方形。我从形状的左边开始,然后顺时针跟踪。我首先绘制平行线,然后绘制正方形。
这就是我得到的:
答案 1 :(得分:0)
我正在尝试绘制节点之间的链接系统,在节点处建立连接,明确定义链接和节点。例如,必须有node1 N1和N2来创建链路L1(N1,N2)。我将此信息形成一个数组,其中row1 = [N1 N2]其中N包含带有笛卡尔坐标的3列向量。我已经从这个矩阵中划分出X,Y,Z向量,并试图将它们一起传递给plot3命令。如简单的情况所示,这导致了另一个无意识线段的情节(坦率地说,我仍然不清楚为什么)。我找到的万无一失的方法是循环遍历X,Y,Z向量并单独绘制段。
hold on
for i = 1:length(x1)
plot3 ( [x1(i) ;x2(i)] , [y1(i) ; y2(i)] ,[z1(i);z2(i)], '-or')
end
hold off