plot 3D curve with color-coded direction

6 ビュー (過去 30 日間)
Liang Zhan
Liang Zhan 2012 年 7 月 30 日
hi, friends,
I have a 3xN matrix, which represents N points in one curve. I know plot3 can plot this curve easily, but I want to use color to represent the curve orientation. For example, if the curve is in x direction, the color is "red", if the curve is in y direction, the color is in "green", if the curve is in z direction, the color is in "blue“.
So the color will vary with the curve going from the beginning to the end.
I saw some example from other software, want to know whether it can be done in matlab.
Appreciate!
LZ

採用された回答

Teja Muppirala
Teja Muppirala 2012 年 7 月 31 日
Yes, you can do this in MATLAB. But it is easier to use a "surface" (in this case, I am calling MESH) to plot it instead of a line.
%Make a random 3d curve
P = interpft(rand(10,3),500);
P(end+1,:) = P(1,:);
% Make colors from the velocity
dP = diff(P([1:end 1],:));
C = abs(dP)/max(abs(dP(:)));
C = permute(cat(3,C,C),[1 3 2]);
% Use mesh to draw it
h = mesh([P(:,1) P(:,1)],[P(:,2) P(:,2)],[P(:,3) P(:,3)],C);
set(h,'lineWidth',3);
axis vis3d
  2 件のコメント
Walter Roberson
Walter Roberson 2012 年 7 月 31 日
Teja, continuous curves plotted with plot() or plot3() cannot change color as they progress.
Teja Muppirala
Teja Muppirala 2012 年 7 月 31 日
Hi Walter, I meant that if he were to try to do it using lines, he would have to make many different line objects, one for each segment in a different color. That is not impossible, but it is kind of a hassle. That is why I agree with your suggestion below that surfaces (patches) are a more general and easier way to accomplish the same thing.

サインインしてコメントする。

その他の回答 (2 件)

Walter Roberson
Walter Roberson 2012 年 7 月 31 日
line() and lineseries objects such as are generated by plot() and plot3(), are each restricted to one color along the length. For this reason, some people prefer to instead use very narrow patch() objects; the edgecolor of patch objects can be controlled.
Question: if A, B, C are three consecutive points, with different "trends" between A-B and B-C, then should the line between A-B be all one color, and the line between B-C be all a different color, or do you want the color changes to shade between the points ?

Liang Zhan
Liang Zhan 2012 年 7 月 31 日
Thanks Teja Muppirala, your code works very well in my case, appreciate! Also, thanks Walter Roberson for your input

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by