c++ - 如何从一个 vector 计算坐标系?

标签 c++ math vector coordinate-systems

如何只给定一个 vector 来创建坐标系? (左手、右手、本地或不同空间)

enter image description here

我正在寻找只给定一个 vector 的局部坐标系统算法:

原因:

1) Z可能是表面法线,那么X和Y vector 就是切线和副切线 vector

2) 另一个原因是光线追踪:对光源进行采样。给定一个交点,从该点构建局部坐标系,然后追踪光线到光的形状。

Vector3 Z = {0.0f, 0.0f, 1.0f}; // given
// fill x and y
CreateXHandedCoordinateSystem(Vector3* X, Vector3* Y, const Vector3& Z) {
   // implementation goes here..
   // evaluate algorithm
   // calculate X
   // Y = cross(X, Z) or something ..
}

最佳答案

您可以使用双叉积技巧。

  1. 使用您的 vector (我们称之为本地 X)获取任意向上 vector (通常是世界向上 vector )并计算叉积。这将是您本地的 Z。
  2. 取局部 X 和局部 Z 并计算叉积,这将是局部 Y

关于c++ - 如何从一个 vector 计算坐标系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33757842/

相关文章:

python - python中的调和均值

c++ - 在 vector 中使用 for range 来添加元素

c++ - 内存不足和 vector 的 vector

c++ - 如何根据定义的字符串类型在 `std::cout`和 `std::wcout`之间进行选择?

c++ - 基于两个 bool 变量的分支

c++ - 输入/输出对象 vector

c++ - 是否可以使用 openMP 以 O(1) 复杂度初始化 vector ? (C++)

C++链表节点创建导致无限循环

javascript - 结果不显示

c++ - 如果第一位小数大于或等于5,如何+1到数字?