为了提高我找到角度的正弦/余弦的速度,我建立了一个参考表,而不是动态计算它们.我有同样的想法,从一个点到另一个点找到角度.
我创建了一个包含3600个标准化向量的表(3600/10 =精度为十分之一度).每当我需要知道从一个点到下一个点的角度时,我会通过表格查找最佳匹配.但是,我担心这可能比使用math.atan2()慢.
这是我正在使用的代码:
创建向量表:
// vector to angle table
var vectorToAngleTable = new Array();
for (i = 0; i < 3600; i += 1) {
vectorToAngleTable[i] = new Vector2();
vectorToAngleTable[i] = RotatePoint(forwardVector, i / 10);
}
Run Code Online (Sandbox Code Playgroud)
从两点找出角度:
function NormalizeVector(vector) {
var toReturn = vector;
var dist = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
toReturn.x /= dist.x;
toReturn.y /= dist.y;
return toReturn;
}
function PointDirection(position, target) {
var vector = target;
var toReturn = 0;
var smallest = 1.0; …
Run Code Online (Sandbox Code Playgroud) 在C++或C中,如果将指针设置为如此高的值以使其超出内存范围,会发生什么?这里有一些代码会做这样的事情:
int* ptr = 0;
while (true) {
ptr += 1; // eventually this will go out of bounds of the memory ... unless there is an overflow.
*ptr = 10; // just give it a value, why not?
}
Run Code Online (Sandbox Code Playgroud)
怎么了?指针 - 当它超出界限时,假设一个16字节的存储器 - 只是从0xF翻转到0x0?它是否继续计数并且*ptr = 10;
线路崩溃了计算机?
我并不愚蠢尝试,但我很好奇.
我想减少JavaScript中的丑陋代码,特别是与构造函数有关.
我有一个矢量定义为:
function Vector2(X, Y) {
this.x = 0.0;
this.y = 0.0;
if (X)
this.y = Y;
if (Y)
this.y = Y;
}
Run Code Online (Sandbox Code Playgroud)
现在,为了将两个向量加在一起,我必须写:
var vector1 = new Vector2(1.0, 0.5);
var vector2 = new Vector2(4.5, 1.0);
vector1.x += vector2.x;
vector1.y += vector2.y;
Run Code Online (Sandbox Code Playgroud)
我想让代码更漂亮,更容易阅读,并在使用许多构造函数时制作更小的文件.我想写的是:
vector1 += vector2;
Run Code Online (Sandbox Code Playgroud)
预先感谢您的任何帮助.