[英]Matlab: Color Coding a 3D Plot
I've been trying to look around online for something I want but I'm not having much luck so I thought I would just ask on here. 我一直在尝试网上寻找我想要的东西,但是我运气不高,所以我想我只是在这里问。
Is it possible to pinpoint in a different color and show the point on the graph where there are intersections between the two plots? 是否可以用其他颜色精确定位并在图形上显示两个图之间有交点的点?
Thanks for any help you can give. 谢谢你提供的所有帮助。
Here is the code: 这是代码:
file1 = fopen('C:\Program Files (x86)\Notepad++\avatar1.txt'); % open text file
file2 = fopen('C:\Program Files (x86)\Notepad++\avatar2.txt'); % open text file
file3 = fopen('C:\Program Files (x86)\Notepad++\avatar3.txt'); % open text file
tline1 = fgetl(file1); % read line by line and remove new line characters
tline2 = fgetl(file2); % read line by line and remove new line characters
tline3 = fgetl(file3); % read line by line and remove new line characters
% declare empty arrays
CX1 = [];
CY1 = [];
CZ1 = [];
CX2 = [];
CY2 = [];
CZ2 = [];
CX3 = [];
CY3 = [];
CZ3 = [];
while ischar(tline1) % true if tline is a character array
temp = cell2mat(textscan(tline1, '<%n,%n,%n>'));
% convert all the cell fields to a matrix
CX1 = vertcat(CX1, temp(1));
CY1 = vertcat(CY1, temp(2));
CZ1 = vertcat(CZ1, temp(3));
tline1 = fgetl(file1);
end
while ischar(tline2) % true if tline is a character array
temp = cell2mat(textscan(tline2, '<%n,%n,%n>'));
% convert all the cell fields to a matrix
CX2 = vertcat(CX2, temp(1));
CY2 = vertcat(CY2, temp(2));
CZ2 = vertcat(CZ2, temp(3));
tline2 = fgetl(file2);
end
while ischar(tline3) % true if tline is a character array
temp = cell2mat(textscan(tline3, '<%n,%n,%n>'));
% convert all the cell fields to a matrix
CX3 = vertcat(CX3, temp(1));
CY3 = vertcat(CY3, temp(2));
CZ3 = vertcat(CZ3, temp(3));
tline3 = fgetl(file3);
end
fclose(file1); % close the file
fclose(file2); % close the file
fclose(file3); % close the file
plot3(CX1, CY1, CZ1) % plot the data and label the axises
plot3(CX2, CY2, CZ2)
plot3(CX3, CY3, CZ3)
xlabel('x')
ylabel('y')
zlabel('z')
grid on
axis square
rotate3d on; % activate interactive mouse rotation
Changing the colours is simple, that's just a case of adding a colour code to the plot3 command, eg: 更改颜色很简单,这只是在plot3命令中添加颜色代码的一种情况,例如:
plot3(CX1, CY1, CZ1, 'b'); % blue lines/markers
plot3(CX2, CY2, CZ2, 'r'); % red lines/markers
plot3(CX3, CY3, CZ3, 'g'); % green lines/markers
For more details on colour codes, see the Matlab Colourspec Page . 有关颜色代码的更多详细信息,请参见Matlab Colourspec页面 。
The intersection could be a bit more tricky, depending on whether you want the intersection of the points (ie specific points which appear in all 3 datasets) or the intersection points of the lines that join the points. 取决于您是想要点的交点(即出现在所有3个数据集中的特定点)还是连接点的线的交点,交点可能会更棘手。
I think the former should be fairly easy (this is untested and assumes CX1
,etc are vertical vectors): 我认为前者应该相当容易(未经测试,并假设
CX1
等是垂直向量):
figure; % Open up a new figure
hold on; % This means the everything you plot stays in the figure and is not overwritten
% Plot the original points
plot3(CX1, CY1, CZ1, '-*b'); % blue lines/markers
plot3(CX2, CY2, CZ2, '-*r'); % red lines/markers
plot3(CX3, CY3, CZ3, '-*g'); % green lines/markers
% turn those 1xn vectors into 3xn matrices for each set of points
points1 = [CX1, CY1, CZ1];
points2 = [CX2, CY2, CZ2];
points3 = [CX3, CY3, CZ3];
% Find the intersection of the 3 sets
CX_intersect = intersect( points1, intersect( points2, points3, 'rows'), 'rows');
% Draw a scatter plot of the intersection points. the 'mo' means:
% m: magenta in colour, o: circular markers
scatter3( CX_intersect(:,1),CX_intersect(:,2),CX_intersect(:,3),'mo');
The intersection works like so: 相交的工作方式如下:
Say we have 3 matrices, each containing a number of 3d points. 假设我们有3个矩阵,每个矩阵包含3d点。 Let's call them
A
, B
and C
. 我们称它们为
A
, B
和C
To find the intersection between all 3 sets we first find the points that intersect just in A
and B
. 为了找到所有三个集合之间的交点,我们首先找到仅在
A
和B
中相交的点。 We now have a set of points that we know are in A
and B
, so now we just have to check if those points are in C
as well. 现在,我们有了一组已知的点,分别位于
A
和B
,所以现在我们只需要检查这些点是否也位于C
中。 we do this by doing another intersection. 我们通过做另一个交叉路口来做到这一点。
I just chained those together into one line of code, which was probably not very useful, so I apologise. 我只是将它们链接在一起成为一行代码,这可能不是很有用,所以我深表歉意。 The code for the
A
, B
, C
intersections is below: A
, B
, C
交点的代码如下:
D = intersect(A,B,'rows') % we use rows because each row represents a 3D point
E = intersect(C,D,'rows') % E is the intersection of the 3 sets.
We can then substitute D into the line E = ...
and we get: 然后,我们可以将D代入
E = ...
,得到:
E = intersect( intersect(A,B,'rows'), C, 'rows' );
Hope that helps! 希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.