You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNU Octave中plot3仅显示坐标轴无数据点的问题咨询

问题解决:GNU Octave 3D绘图仅显示坐标轴无数据点

你当前的代码在循环中每次只绘制单个点,但plot3默认以连线方式绘图,单个孤立点没有前后坐标支撑,所以无法显示。而2D的plot可能在你使用时因为数据积累后形成了可见的连线,才让你觉得正常。

两种可行的修改方案:

方案1:先存储所有数据,循环结束后一次性绘制轨迹

先初始化数组来存储所有计算出的x、y、z坐标,循环时把每一步的坐标追加到数组中,最后用完整的数组绘制连续轨迹:

t=0;
dt = 0.1;

% 初始化数组存储所有坐标
x = [0];
y = [0];
z = [0];
vx=40;
vy=15;
vz=15;

m=0.43;
g=9.81;
rho=0.9982;
Cw=0.47;
A=0.03789;
                               
while (z(end)>=0)
  Fwlx = 0.5*Cw*A*rho*(vx)^2;
  Fwly = 0.5*Cw*A*rho*(vy)^2;
  Fwlz = 0.5*Cw*A*rho*(vz)^2;

  Fz = m*g;

  Fresx = -Fwlx;
  Fresy = -Fwly;
  Fresz = -Fwlz-Fz;

  ax = Fresx/m;
  ay = Fresy/m;
  az = Fresz/m;

  vx = vx + ax*dt;
  vy = vy + ay*dt;
  vz = vz + az*dt;

  % 追加新坐标到数组
  x = [x, x(end) + vx*dt];
  y = [y, y(end) + vy*dt];
  z = [z, z(end) + vz*dt];

  t = t + dt;
end

% 循环结束后一次性绘制完整轨迹
plot3(x, y, z)
grid on % 可选,添加网格让坐标轴更清晰

方案2:实时绘制单个点,指定点样式

如果你需要在循环中实时看到每个点的绘制,需要给plot3指定点标记样式,比如用'o'表示圆点:

t=0;
dt = 0.1;

x=0;
y=0;
z=0;
vx=40;
vy=15;
vz=15;

m=0.43;
g=9.81;
rho=0.9982;
Cw=0.47;
A=0.03789;

hold on % 提前开启hold on,避免每次重置绘图
grid on % 可选,添加网格

while (z>=0)
  Fwlx = 0.5*Cw*A*rho*(vx)^2;
  Fwly = 0.5*Cw*A*rho*(vy)^2;
  Fwlz = 0.5*Cw*A*rho*(vz)^2;

  Fz = m*g;

  Fresx = -Fwlx;
  Fresy = -Fwly;
  Fresz = -Fwlz-Fz;

  ax = Fresx/m;
  ay = Fresy/m;
  az = Fresz/m;

  vx = vx + ax*dt;
  vy = vy + ay*dt;
  vz = vz + az*dt;

  x = x + vx*dt;
  y = y + vy*dt;
  z = z + vz*dt;

  t = t + dt;

  % 指定点样式绘制单个点
  plot3(x, y, z, 'ro', 'MarkerSize', 2)
  drawnow % 强制刷新绘图窗口,实时显示点
end
hold off

补充说明

  • 方案1的效率更高,适合数据量较大的情况,绘制的是连续的轨迹线;
  • 方案2适合需要实时观察每一步计算结果的场景,但频繁绘制单个点会稍微降低运行效率。

内容的提问来源于stack exchange,提问作者Loci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:04:59