【问题标题】:Assigning color to points in the three dimensional space depending on the functional values根据功能值为三维空间中的点分配颜色
【发布时间】:2019-03-20 04:26:49
【问题描述】:

我在想一个类似于this的问题。

我有一个函数,它将来自R^3 的三个值x,y,z 作为输入并返回1,2,3,4。现在我想用坐标(x,y,z) 绘制3D 空间中的点,颜色与该点的功能值相关,可以是1、2、3 或4 之一。

我有一个带有整数条目的 3D 矩阵,比如 1,2,3,4,我将点值存储在这个矩阵中,以便我可以用相应的颜色绘制点(MATLAB 中用于制作 2D 绘图的“图像”命令的类似技巧)。

颜色编码(比如说)-

1-绿色,2-蓝色,3-青色,4-红色

如果函数在点 (0.5,0.5,0.1) 处返回值 3,那么我将点 (0.5,0.5,0.1) 标记为与数字 3 相关的颜色,即青色。

我正在考虑一个 MATLAB 命令,它在三维情况下执行此操作,因为“图像”命令似乎适用于二维情况。

【问题讨论】:

标签: matlab


【解决方案1】:

我只能想到某种解决方法,例如:

% Input: A = coordinates, b = functional values.
A = rand(20, 3);
b = ceil(rand(20, 1) * 4);

% Color map.
cm = [0 1 0; 0 0 1; 0 1 1; 1 0 0];

% Circle size.
cs = 21;

% 3D scatter plot.
figure(1);
hold on;
for k = 1:size(cm, 1)
  idx = (b == k);
  scatter3(A(idx, 1), A(idx, 2), A(idx, 3), cs, cm(k, :), 'filled');
end
hold off;
view(45, 30);
grid on;

给出以下输出:

【讨论】:

  • 很好!!谢谢!,我想知道如果'idx' 在$b \neq k$ 时变为零,那么关于$A(idx,1)$ 会有错误吗?当我们试图访问 $A(0,1)$?
  • 像 idx 这样的 sems 也只能有 0 或 1?如果是这样,那么我们将如何访问 A 的其他剩余行?
  • idx 是“逻辑”的向量,这里表示应该处理A 的哪些行。看看Indexing with Logical Values
  • 没错!所以 idx 可以有 0 或 1 的值,所以当我们尝试访问 A 的第 5 行时,如果 idx 为 1,那么它访问第一行,当 idx 为零时,它访问哪一行?由于 idx 有两个可能的值 0 或 1,那么当我们执行 A(idx,1) 时,它如何访问 A 的所有 lrows 呢?因为 idx 是一个值为 0 或 1 的向量
  • @BAYMAX 在示例中,A 有 20 行(x-y-z 值)。此外,idx 有 20 行(逻辑值,而不是 01 像您可能想到的整数)。因此,对于idx 中值为true 的每一行,A 中的对应行被寻址。例如,让idx = [1 1 1 1 1 0 ... 0],然后A(idx, :) 将给出A 的前五行。我不知道,如何用另一种方式解释。这就是 Matlab 中索引的工作原理。
【解决方案2】:

您可以对@HansHirse 建议的解决方案进行线性化,因此可能会有一个小的改进:

% Dummy data
A = rand(20, 3);
b = ceil(rand(20, 1) * 4);
% color vector
c = [0 1 0; 0 0 1; 0 1 1; 1 0 0];
% Use the linear indexing to select the right color
scatter3(A(:,1),A(:,2),A(:,3),[],c(b,:),"filled")

更简单的你可以只使用b作为颜色输入,matlab将使用默认的颜色映射来根据b设置颜色

scatter3(A(:,1),A(:,2),A(:,3),[],b,"filled")

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多