algorithm - 如何将 "snap"方向(2D)矢量指向罗盘(N、NE、E、SE、S、SW、W、NW)?

标签 algorithm math trigonometry vector

我在 3D 建模软件中有一堆垂直于窗口表面的向量。投影到 XY 平面,我想知道他们面向哪个方向,转换为 8 罗盘坐标(东北东南西南西> 和西北)。

向量是这样工作的:

  • X 轴代表东西方向(东为正)
  • y 轴代表南北(北为正)
  • 因此
    • (0, 1) == 北
    • (1, 0) == 东
    • (0,-1) == 南
    • (-1,0) == 西

给定一个向量 (x, y),我正在寻找 8 个罗盘坐标中最接近的一个。关于如何优雅地执行此操作的任何想法?

最佳答案

这在 Java 中有效,计算八个方向的值 0...7:

import static java.lang.Math.*;    

int compass = (((int) round(atan2(y, x) / (2 * PI / 8))) + 8) % 8;

结果映射到罗盘如下:

0 => E
1 => NE
2 => N
3 => NW
4 => W
5 => SW
6 => S
7 => SE

关于algorithm - 如何将 "snap"方向(2D)矢量指向罗盘(N、NE、E、SE、S、SW、W、NW)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437790/

相关文章:

c++ - 在 C++ 中创建 n 个项目的所有可能的 k 个组合

algorithm - 在添加边很少的图中寻找替代路线的棘手算法

c - 如何列出所有可能的n个节点的二叉搜索树?

java - Java中的整数除法

java - Math.atan() 返回输入

javascript - 是否有更优雅的解决方案来获取范围数组的倒数?

mysql - 将 6 个项目加在一起得出总数,但不要将它们的值加在一起

algorithm - 尽可能快地计算矩阵的零空间

java - 如何解决java中的cos 90问题?

c++ - 2D 欧几里得 vector 旋转