teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2020/05/05 04:45

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -6,4 +6,11 @@
6
6
 
7
7
  次に考えるのは、JavaScript でループしなければならないかどうかです。スクリプトでループするよりも、集合を扱うメソッドを使う方が一般に高速です。実際に高速になるかどうかはやってみなければわかりませんが、filter メソッドを使うことを検討してみてください。
8
8
 
9
- [Array.prototype.filter() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
9
+ [Array.prototype.filter() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)
10
+
11
+ ### 追記
12
+
13
+ 参考:
14
+
15
+ [JavaScriptで大量のオブジェクトの当たり判定を効率的にとる](https://sbfl.net/blog/2017/12/03/javascript-collision/)
16
+ [衝突判定(JavaScript)](https://www.sist.ac.jp/~suganuma/kougi/animation/JavaScript/collision/collision.htm)

2

修正

2020/05/05 04:45

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [空間分割をしよう - Qiita](https://qiita.com/stmtk/items/76120985db050708285d)
4
4
 
5
- それと質問のアルゴリズムでは、エンティティ同士の無駄な比較を何度も行っています。例えばエンテティが A B C の三種類だとして、A と A の衝突判定、B と B の衝突判定は不要なはずです。また、A と B を比較した後、B と A を比較する意味もありません。1000 個のエンティティをすべて比較しなければならないとしても比較回数は 1000 × 1000 = 1,000,000 回ではなく、999 + 998 + 997 + ... + 1 = 499,500 回で済むはずです。
5
+ それと質問のアルゴリズムでは、エンティティ同士の無駄な比較を何度も行っています。例えばエンテティが A B C の三種類だとして、A と A の衝突判定、B と B の衝突判定は不要なはずです。また、A と B を比較した後、B と A を比較する意味もありません。1000 個のエンティティをすべて比較しなければならないとしても比較回数は 1000 × 1000 = 1,000,000 回ではなく、999 + 998 + 997 + ... + 1 = 499,500 回で済むはずです。
6
6
 
7
7
  次に考えるのは、JavaScript でループしなければならないかどうかです。スクリプトでループするよりも、集合を扱うメソッドを使う方が一般に高速です。実際に高速になるかどうかはやってみなければわかりませんが、filter メソッドを使うことを検討してみてください。
8
8
 

1

追記

2020/05/05 02:53

投稿

Zuishin
Zuishin

スコア28675

answer CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  [空間分割をしよう - Qiita](https://qiita.com/stmtk/items/76120985db050708285d)
4
4
 
5
+ それと質問のアルゴリズムでは、エンティティ同士の無駄な比較を何度も行っています。例えばエンテティが A B C の三種類だとして、A と A の衝突判定、B と B の衝突判定は不要なはずです。また、A と B を比較した後、B と A を比較する意味もありません。1000 個のエンティティをすべて比較しなければならないとしても比較回数は 1000 × 1000 = 1,000,000 回ではなく、999 + 998 + 997 + ... + 1 = 499,500 回で済むはずです。
6
+
5
7
  次に考えるのは、JavaScript でループしなければならないかどうかです。スクリプトでループするよりも、集合を扱うメソッドを使う方が一般に高速です。実際に高速になるかどうかはやってみなければわかりませんが、filter メソッドを使うことを検討してみてください。
6
8
 
7
9
  [Array.prototype.filter() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)