- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我在 3D 空间中有一个点,并且我有相机在 3D 空间中的位置和旋转。
所以基本上对象上有 Vector3
。相机 Vector3
和 Quaternion
。
我需要了解如何看待这一点。
我想告诉用户如何移动到那个点。用户应该将相机向左、向右还是向后?
最佳答案
执行此操作的一种方法是计算相机当前面向的方向作为偏航角(如罗盘航向),并计算它需要面向的方向才能注视该点。
从另一个中减去一个并调整结果,使其在 -180 到 180 度(或 -pi 到 pi 弧度)的范围内,然后根据标志告诉用户向左转或向右转。如果绝对值超过 120 度(或某个可配置的值),则告诉他们它在他们身后。
要找到相机的当前航向,将向量 (0, 0, 1) 通过四元数变换以获得前向向量,然后使用 atan2(forward.z, forward.x)
.
要计算观察该点所需的航向,从该点减去当前相机位置以获得所需的前向向量,然后传递给 atan:
Vector3 desired_forward = point - camera_pos;
float desired_heading = atan2(desired_forward.z, desired_forward.x);
然后找到需要的旋转:
float rotation_needed = desired_heading - heading;
if(rotation_needed > Math.PI)
rotation_needed -= 2 * Math.PI;
if(rotation_needed < -Math.PI)
rotation_needed += 2 * Math.PI;
现在告诉用户根据所需旋转的符号向左或向右旋转。
如果你想向上/向下看,你可以通过先计算前向矢量在XZ平面中的长度然后再次使用atan2来计算俯仰角:
float xzLength = sqrt(forward.x * forward.x + forward.z * forward.z);
float pitch_angle = atan2(forward.y, xzLength);
对所需的正向矢量执行相同的操作,并从所需的电流中减去电流。检查标志以告诉用户是向上看还是向下看。
有一些可能的并发症。例如,根据相机四元数是否指定从世界空间到相机空间的变换,反之亦然,您可能需要否定计算出的相机航向。
关于algorithm - 点看点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592198/
想要为执行的每个 linux 命令添加 aspect:executionTime 有什么方法可以添加默认方面环境,以便必须为执行的 linux 命令获取 executionTime 最佳答案 根据 m
我是一名优秀的程序员,十分优秀!