1

我有以下代码在Matlab上创建和绘制螺旋线。我想控制颜色并自己添加三到四种颜色,而不是 matlab 进行着色。我怎样才能自己设置颜色并控制颜色?这是我的代码:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
ms = 50;
%cm = colormap;
%cm(64,:);

figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

请问有什么帮助吗?

@jucestain,着色工作,谢谢。我还有一个问题。如果像这样在上面的代码中添加噪音,结果会变得有趣,如图所示

    N = 1000;
    r = linspace(0,1,N);
    t = (3*pi/2)*(1+2*r);
    x(1,:) = t.*cos(t);
    x(2,:) = t.*sin(t);
    x(3,:) = zeros(1,N);
    % Set colors:
    t(1:250) = 1;
    t(251:500) = 2;
    t(501:750) = 3;
    t(751:1000) = 4;
    ms = 50;
    figure;
    scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

    %add noise
    x(1,:) = x(1,:) + 5*randn(1,N);
    x(2,:) = x(2,:) + 5*randn(1,N);
    x(3,:) = x(3,:) + 5*randn(1,N);
    figure;
    scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

这个情节的结果很笨拙,我不知道为什么?我是在正确地添加噪音还是什么?剧情对吗?

4

1 回答 1

3

您拥有的 t 向量控制颜色。您可以通过更改 t 中的值来控制它。这是一个例子:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
t(1:250) = 1;
t(251:500) = 2;
t(501:750) = 3;
t(751:1000) = 4;
ms = 50;
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

输出:

在此处输入图像描述

以上取决于您使用的是哪种颜色图。如果您发现它更简单,您也可以使用它:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
ms = 50;
figure;
scatter3(x(1,1:250), x(2,1:250), x(3,1:250), ms, 'r', 'filled'); % red
hold on;
scatter3(x(1,251:500), x(2,251:500), x(3,251:500), ms, 'g', 'filled'); % green
scatter3(x(1,501:750), x(2,501:750), x(3,501:750), ms, 'b', 'filled'); % blue
scatter3(x(1,751:1000), x(2,751:1000), x(3,751:1000), ms, 'y', 'filled'); % yellow
hold off;

输出:

在此处输入图像描述

WRT 噪音:你添加的太多了。rand 的范围为 0 到 1,因此您添加的噪声范围为 0 到 5,这与数据中的值相当。如果你这样做:

N = 1000;
r = linspace(0,1,N);
t = (3*pi/2)*(1+2*r);
x(1,:) = t.*cos(t);
x(2,:) = t.*sin(t);
x(3,:) = zeros(1,N);
% Set colors:
t(1:250) = 1;
t(251:500) = 2;
t(501:750) = 3;
t(751:1000) = 4;
ms = 50;
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

%add noise
x(1,:) = x(1,:) + .5*randn(1,N);
x(2,:) = x(2,:) + .5*randn(1,N);
x(3,:) = x(3,:) + .5*randn(1,N);
figure;
scatter3(x(1,:), x(2,:), x(3,:), ms, t, 'filled');

您获得:

在此处输入图像描述

这是相当合理的。

于 2013-03-17T17:40:16.647 回答