【发布时间】:2018-07-12 01:15:12
【问题描述】:
问题: 编写一个名为 point_cloud 的函数,它将一个标量作为输入参数(该函数不必检查输入的格式)并且没有输出参数。
如果这样调用,point_cloud(100),那么它会绘制 100 个点。每个点都有一个随机 x 坐标和一个随机 y 坐标,每个坐标都是通过调用 randn 获得的,它使用标准差等于 1 的正态分布。绘图轴的范围在 x 和 y 维度上应该是 -5 到 5。应该关闭网格。应通过调用 plot 一次绘制和显示一个点,只指定一个点,然后在调用 plot 之后调用 drawnow,这会导致要立即绘制的点。命令hold on 应该包括在内,以便在绘制新点时保留所有先前的点。
图 2.41 显示了 point_cloud(100000) 在 Mac 上完成逐点绘图后的绘图示例视图。 (请注意,在 Windows 上,点要大得多。还要注意,使用 drawnow 绘制这么多点需要很长时间。最后,尝试在中间放大。)
我的代码:
function point_cloud(N)
hold on
grid off
axis([-5,5,-5,5])
for ii = 1:N
plot(randn(ii));
drawnow;
end
我知道这是错误的,但我不确定如何解决这个问题。有人可以帮忙吗?
解决的代码:
function point_cloud(N)
figure
hold on
grid off
axis([-5,5,-5,5])
x = randn(N,1);
y = randn(N,1);
for ii = 1:N
plot(x(ii),y(ii),'b.');
drawnow;
end
【问题讨论】:
-
您可以在 MATLAB 命令提示符下键入
help drawnow来阅读它的作用以及如何调用它。 -
好的,我编辑了我的代码,但我没有得到图中显示的内容。 MATLAB 正在绘制线而不是点。
-
randn(ii)创建一个iixii随机值矩阵。您只需要在每次迭代中使用其中的两个(x 和 y)。还可以查看help plot以了解如何使用其 x 和 y 坐标绘制一个点。我没有给你解决方案,因为我想让你学习。 :) -
谢谢,我想我解决了。 查看上面的更新代码。此代码有效,但是当我输入
point_cloud(100000)时出现错误,因为数组大小对于 MATLAB 来说太大了。有解决办法吗? -
太棒了!这有点违反直觉,但
randn(N)不会生成N随机数,而是N*N(它生成一个边为N的方阵)。你想改用randn(N,1)。在内存中拟合应该没有问题。另一种方法是在循环内一一生成随机数:plot(randn(1),randn(1),...。
标签: matlab