math - 围绕一个点旋转 Vector2

我想了解当我们围绕任意点旋转 Vector 时会发生什么。如果 p.x 为 0,则角度将为 90,我理解这一点,但我无法想象为什么当我使用 p.x = 50 时它是 45。

var v = new THREE.Vector2(100,0);
var p = new THREE.Vector2(50,0);

v.rotateAround(p, 90 * Math.PI/180);
console.log('Angle: ', v.angle() * 180/Math.PI);
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r82/three.min.js">
</script>

最佳答案

您正在围绕点 p 旋转点 v。这是通过围绕原点旋转矢量 v-p 并将生成的矢量(读取点平移)添加回 p 来完成的。

作为 v-p=(50,0) 90° 旋转得到 (0,50) 并加回 p 得到点 (50,50) 相对于原点成 45° 角,但仍从 p 垂直向上。

  |           v after rotation
  |         o
  |         .
  |         .
  |         .
  |         .
--o---------+---------o-----
origin      p         v at start

https://stackoverflow.com/questions/40546449/

相关文章:

SQL Server - 如果列包含值,则按 ID 分组

cordova - 内容安全策略 Cordova 问题

python - 阅读 Pandas 数据框时跳过包含特定值的特定行

r - 使用 R 和 dplyr 扩展和离散化时间序列数据

batch-file - 为什么不使用批处理文件中的 RMDIR 作为最后一个命令删除文件夹?

git - 我需要做一个 Git 克隆吗?

python - 在 Python 中将纳秒转换为时间戳

javascript - 如何将 JSON/Bootstrap-Table 中的日期转换为 DD/M

angular - 在 Angular2 中,您如何检测过滤器/管道未返回任何结果

intellij-idea - 使用 Maven 项目创建测试类时,intellij 无法创建类文件