我给出了一个300x300x300的矩阵。
第一个下标表示x值,第二个下标表示y值,第三个下标表示z值。
要访问矩阵中特定点的值,我使用:
matrix(x-val, y-val, z-val)我想创建一个3D散点图,图中点的颜色会根据矩阵中的点的值发生变化。所有值均为>=0
因为我是Matlab的新手,所以我不知道从哪里开始。
发布于 2018-07-12 19:42:25
MathWorks有一个a page,它总结了MATLAB绘图的类型。我在很多场合都引用过它。你要找的函数是scatter3(X,Y,Z,S,C)。在function's example中走走,它应该会帮到你。
发布于 2018-07-12 20:01:45
我不知道如何在3-D中为点云提供300x300x300矩阵。我假设您有一个300x300x3的矩阵,即:
x = matrix(:,:,1);
y = matrix(:,:,2);
z = matrix(:,:,3);首先,您可能希望将点重新排列到2D矩阵中:
m = reshape(matrix, numel(matrix(:,:,1), 3);
n = size(m,1);您的矩阵现在排列为n乘3矩阵,第1、2和3列分别表示x轴、y轴和z轴,即:
m = [ x1 y1 z1]
[ x2 y2 z2]
[ ... ]
[ xn yn zn]然后,您可以创建一个基本的3D scatter plot
scatter3(m(:,1), m(:,2), m(:,3))然而,这并不是您想要的,因为点的颜色是相同的。要根据着色逻辑添加颜色,首先应该使用MATLAB的内置color maps创建颜色矩阵。这里我使用的是jet
myc = jet(n);你也可以创建你自己的色彩映射ofc。颜色矩阵中的元素只是归一化的RGB值。
现在,您必须使用自己的逻辑对每个点进行加权:
weighting = myWeightingLogic(m);weighting将是一个n乘1的向量,如果它还不是,那么它应该被标准化。
weighting = weighting/max(weighting);现在,您可以为散点图着色:
scatter3(m(:,1), m(:,2), m(:,3)), [], myc(round(weighting*n),:));完整的代码:
m = reshape(matrix, numel(matrix(:,:,1), 3);
n = size(m,1);
myc = jet(n);
weighting = myWeightingLogic(m);
weighting = weighting/max(weighting);
scatter3(m(:,1), m(:,2), m(:,3)), [], myc(round(weighting*n),:));https://stackoverflow.com/questions/51304501
复制相似问题