对矢量场进行颜色编码

Color Coding a Vector Field

我有一个二维矢量场,我想对矢量场进行颜色编码,以便每个矢量方向以不同的颜色显示。假设我的数据是 DataX 和 DataY。目前,我正在做(在 MATLAB 中):

R = DataX.^2 + DataY.^2;
theta1 = acos( DataX ./ R );
theta2 = asin( DataY ./ R );
surf(x,y,theta1); colormap jet; shading interp
figure; surf(x,y,theta2); colormap jet; shading interp

我遇到的问题是我无法区分 x 或 y 分量为零的向量。例如,颜色条刻度看起来像(左图,使用 arcsin,右图使用 arcos)。使用 arcsin 时,当 DataY 为零(水平向量)时,arcsin(0) 给出 0,无论向量是指向左还是右。

由于除以零错误,使用极坐标的反正切或反正切定义会给出更差的结果。我正在寻找一种算法,可以让我区分看似退化的向量。我曾尝试结合 arccos 和 arcsin 结果,但我一直没能找到一个好的方法。

我也想知道如何将这个概念扩展到 3D。

谢谢!

对于 2D,您可以使用 atan2(DataY, DataX) 获取角度,然后将角度映射到您的颜色。使用像 'hsv'

这样的循环颜色图

对于 3D,您可以将向量归一化为单位长度并将 3 个分量映射到红色、绿色和蓝色。