algorithm - 对矢量场进行颜色编码

标签 algorithm vector figure polar-coordinates

我有一个二维矢量场,我想对矢量场进行颜色编码,以便每个矢量方向以不同的颜色显示。假设我的数据是 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,无论向量是指向左还是右。

enter image description here

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

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

谢谢!

最佳答案

对于 2D,您可以使用 atan2(DataY, DataX) 获取角度,然后将角度映射到您的颜色。使用像“hsv”这样的循环颜色图

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

关于algorithm - 对矢量场进行颜色编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052872/

相关文章:

java - 从 jlist vector 中获取数据以在 Java 中的消息框中弹出

java - 如何在draw2d图中垂直和水平居中标签?

r - 将表达式与指示变量结合使用作为图标签

algorithm - 相似子串快速搜索

c - 在不使用条件语句和三元运算符的情况下在 C 中查找三个数的最大值

algorithm - 感知器算法是否适用于二进制输入?

r - 如何根据 R 语言的测试创建 bool 列?

下降网格项目的算法

c++ - vector 中结构的类型名称是什么

matlab - 删除 Matlab 图周围的边框