Назначение цвета точкам в трехмерном пространстве в зависимости от функциональных значений - PullRequest
1 голос
/ 20 марта 2019

Я думал о вопросе, похожем на this .

У меня есть функция, которая принимает в качестве входных данных три значения x,y,z из R^3 и возвращает либо 1,2,3,4,Теперь я хотел построить точку в трехмерном пространстве с координатами (x,y,z) с цветом, связанным с функциональным значением в этой точке, которое может быть одним из 1,2,3 или 4.

У меня естьТрехмерная матрица с целочисленными значениями, такими как, скажем, 1,2,3,4, и я сохраняю значение точек в этой матрице, чтобы можно было наносить точки соответствующим цветом (аналогичный прием команды 'image' в MATLAB для создания 2D-графиков).

цветовое кодирование (скажем) -

1 - зеленый, 2 - синий, 3 - голубой, 4 - красный

Как если бы в точке (0.5,0.5,0.1) функция возвращала значение 3,затем я отмечаю точку (0.5,0.5,0.1) цветом, связанным с номером три, который является голубым.

Я имею в виду команду MATLAB, которая делает это в случае трехмерного случая, так как команда «изображения» кажетсяработа для 2D кейса.

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Вы можете линеаризовать решение, предложенное @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")
2 голосов
/ 20 марта 2019

Я могу думать только о каком-то обходном пути, например:

% 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;

Дает следующий вывод:

Output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...