0

光源は、単一の座標にある2D空間内のエンティティです。

さまざまな場所に複数の光源があり、それぞれが方向に8本の光線を発しN, S, E, W, NW, NE, SW, SEます。すべてのライトの座標がわかっています。

ランダムな点が与えられた(x, y)場合、それが光線に当たっているかどうかを判断する必要があります。

int width = 10000;
int height = 10000;
List<Point> lights = a bunch of randomly placed light sources.
Point position = new Point(8888, 5555);

今、私はlights' collection and determine if my location (位置を繰り返す必要があります`)それぞれがヒットしています。

の簡単なチェックでlights[n].X == position.X、水平方向のヒットと同様に垂直方向のヒットがわかります。可能な限り最も効率的な方法で斜めのヒットを検出するにはどうすればよいですか?対角線は常に45度の角度になっているので、コストのかかる浮動小数点の計算を回避できますか?

4

1 に答える 1

2

なぜ使用しないのですか:

Math.abs(lights[n].X - position.X) == Math.abs(lights[n].Y - position.Y)

角度 (三角関数) を使用すると、ほぼ確実に遅くなり、より複雑になります。

于 2012-07-27T00:21:29.873 に答える