MATLAB: функция point_cloud

Вопрос: Напишите функцию point_cloud, которая принимает один скаляр в качестве входного аргумента (функция не должна проверять формат ввода) и не имеет выходного аргумента.

Если он называется так, point_cloud (100) , то он отображает 100 очков. Каждая точка имеет случайную координату x и случайную координату y, каждый из которых получает вызов randn , который использует нормальное распределение со стандартным отклонением, равным 1. Диапазон осей графика должен быть от 5 до 5 в как размеры x, так и y. Сетка должна быть отключена. Точки должны быть построены и отображены по одному, вызывая график с указанием только одной точки и, после вызова графика, вызовом drawow , что заставляет точку быть нанесенной немедленно. Удержание команды должно быть включено, чтобы все предыдущие точки сохранялись при построении новой точки.

На рис. 2.41 показан примерный график графика после того, как point_cloud (100000) завершил пошаговое построение на Mac. (Обратите внимание, что в Windows точки намного больше. Также обратите внимание, что требуется много времени, чтобы нарисовать это много точек с нажатием . Наконец, попробуйте масштабирование в середине.)

Рисунок 2.41

Мой код:

    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,

1

Ответов: 2


2

Вам не нужен цикл for. И рисовать сюжет каждой итерации очень много времени. Как насчет использования этой scatterфункции.

figure
hold on
grid off
axis([-5,5,-5,5])
x = randn(N,1);
y = randn(N,1);
scatter(x,y,'b.')

Это будет намного быстрее.


0

Чтобы добавить к другому ответу, вот код как функция, с добавленной функциональностью, что точки являются одним пикселем на Windows:

function point_cloud(N)
    f = figure;
    x = randn(N,1);
    y = randn(N,1);
    scatter(x,y,1/36,'b.');
    f.GraphicsSmoothing = 'off';
    grid off
    axis([-5,5,-5,5])
    axis equal
end

Размер маркеров задается с третьим параметром разброса: 1/36. Графическое сглаживание фигуры также должно быть установлено на «выключено», чтобы убедиться, что пиксели не становятся размытыми или светлыми.

Вот трехмерная версия:

function point_cloud3D(N)
    f = figure;
    x = randn(N,1);
    y = randn(N,1);
    z = randn(N,1);
    scatter3(x,y,z,1/36,'b.');
    f.GraphicsSmoothing = 'off';
    grid off
    axis([-5,5,-5,5,-5,5])
    axis square
    view(3)
end
MATLAB,
Похожие вопросы
Яндекс.Метрика