javascript - 如何更高效地进行这种坐标系操作呢?

标签 javascript math optimization 2d three.js

我正在制作一款 3D 游戏,玩家的背部应该始终面向镜头,并且他应该朝那个方向移动。我还没有谈到“背对着镜头”的部分,但我相信一旦我弄清楚如何让玩家朝正确的方向移动,它就会很简单......

虽然它是一个 3D 坐标系,但可以忽略高度(z 轴),因为无论摄像机有多高,玩家应该始终以相同的速度前进(摄像机系统的功能与游戏魔兽世界)。

现在,我已经将我的问题总结为...

  • Point (0, 0) 是玩家的位置。
  • Point (x, y) 是相机的位置。
  • 相机距离玩家 (dx, dy) 个单位(并且因为玩家位于 (0, 0),所以它也是 (x, y) 个单位,尽管这是一个位置向量,而不是平移向量)

问题:如何在 2D 空间中找到位于圆 r = 1 上但与 (0, 0) 和 (x, y) 在同一直线上的点 (a, b)?

可视化:

enter image description here

通过这样做,我应该有一个 2D 向量 (a, b),当它乘以 -30 时,它将作为玩家的速度。

我知道如何做到这一点,但使用毕达哥拉定理、平方根和所有那些毫无疑问的工具(使用 Javascript)是一种非常昂贵和低效的方式。

基本上,是这样的:

c = sqrt(dx*dx + dy*dy); //Get the length of the line
rat = 1/c; //How many times is the desired length (1) bigger than the actual length

a = x*rat;
b = y*rat;

一定有更好的东西!

作为引用,我正在使用 Three.js 引擎用 Javascript 制作游戏。

最佳答案

这里没有什么可以提高效率的,这些计算是 3D 场景的标准内容。

不要过早优化。这些东西不可能成为您应用程序的瓶颈。

请记住,即使这些计算发生在每个 render() 上,它们仍然只会每几毫秒发生一次 - 假设 60 FPS 为 17 毫秒,这很多Math.sin()/Math.cos()/Math.sqrt() 非常高效,每个计算都发生了很多其他计算render() 复杂得多。

你会很满意你现在所拥有的。

关于javascript - 如何更高效地进行这种坐标系操作呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773693/

相关文章:

javascript - 得到最好的正方形排列

algorithm - `N`糖果的获取方式数

java - 如何在 2D 中的 2 点之间创建一条曲线并返回使该曲线每隔 d 距离的点?

string - 搜索字符串中的某些单词或短语

javascript - react native : Function called twice automatically inside FlatList

javascript - 从 setTimeout 调用时,函数无法在 IE7 和 IE8 中正常工作

javascript - 如何根据 onclick 函数获取两个输入字段值

Java:将数学方程转换为字符串表达式?

optimization - OpenGL - glBindTexture - 过早优化?

c++ - 为什么这个 C++ 成员函数没有被编译器用 -O3 优化?