角度のサイン/コサインを見つける速度を上げるために、その場で計算する代わりに参照テーブルを作成しました。ある点から別の点への角度を見つけることと同じ考えを持っています。
3600 の正規化されたベクトルのテーブルを作成しました (3600 / 10 = 10 分の 1 度の精度)。ある点から次の点までの角度を知る必要があるときはいつでも、テーブルを調べて最適な一致を見つけます。ただし、これは 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);
}
2 点からの角度を求めます。
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;
vector.x -= position.x;
vector.y -= position.y;
vector = NormalizeVector(vector);
for (i = 0; i < 3600; i += 1) {
if (PointDistance(vectorToAngleTable[i], vector) < smallest) {
smalllest = PointDistance(vectorToAngleTable[i], vector);
toReturn = i;
}
}
return toReturn;
}
function PointDistance(point1, point2) {
return Math.sqrt(((point2.x - point1.x) * (point2.x - point1.x)) + ((point2.y - point1.y) * (point2.y - point1.y)));
}
ご覧のとおり、私の関心事は、それが通過するすべてのコード行と、通過するテーブルにいくつのエントリがあるかです。方法が何であれ、角度を見つけるための最速の方法を知りたいです。