不正确的 GNU Octave 3D 图

Incorrect GNU Octave 3D Plot

我尝试使用 GNU Octave 在 3D 中绘制四个点。所以我首先定义它们。

a = [1 2 3];
b = [-1 0 -1];
c = [5 4 3];
d = [1 0 -2];

接下来,我尝试了 plot3(a,b,c,d, 'o') 但我很快就放弃了这个想法。相反,我宁愿使用两次 plot3 函数将其除以 hold on.

plot3(a,b,'o')
hold on
plot3(c,d);

事情是这样的: 该图描绘的不是四个点,而是共面的 6 个点。

谁能解释一下我做错了什么?

正如 the documentation 非常清楚地指出的那样,函数的输入是 xyz 坐标。如果使用数组,则会为这些向量中的每个对应点创建一个点。在您的例子中,您提供给 plot3 的每个输入都有 三个元素 ,因此将创建 三个点 。由于您像这样调用 plot3 两次,结果将是 6 分。

plot3 的正确用法是将所有 x 值放在一个数组中,y 值放在一个数组中, 和数组中的 z 个值。

plot3([a(1), b(1), c(1), d(1)], [a(2), b(2), c(2), d(2)], [a(3), b(3), c(3), d(3)], 'o')

或者更简洁

points = [a; b; c; d];
plot3(points(:,1), points(:,2), points(:,3), 'o');

如果您阅读 plot3 的帮助文本,您会发现:

 -- plot3 (X, Y, Z)
 -- plot3 (X, Y, Z, FMT)
 -- plot3 (X, CPLX)
 -- plot3 (CPLX)

您正在使用 plot3 (X, CPLX) 的形式调用 plot3,其中表示:

 If only two arguments are given, as

      plot3 (X, CPLX)

 the real and imaginary parts of the second argument are used as the
 Y and Z coordinates, respectively.

你应该做的是以 plot3 (X, Y, Z, FMT) 的形式调用 plot3。此外,您只需调用 plot3 即可完成所有这些操作,无需调用 hold on 并添加新点。像这样:

a = [ 1  2  3];
b = [-1  0 -1];
c = [ 5  4  3];
d = [ 1  0 -2];
p = [a; b; c; d];
plot3 (p(:,1), p(:,2), p(:,3), "o")