2018-07-01から1ヶ月間の記事一覧

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その14

atan関数の実装について色々と見てきたが、最後にそれぞれの速度を計測してみよう。 標準関数 M-KAI氏の方法 こびにぃ氏の方法 を、それぞれ1000回実行し、時間を表示してみた。 標準関数:179,532マイクロ秒 raohu69.hatenablog.jp M-KAI氏の方法:52,708マ…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その13

前回のコードを参考に、過去のコードを高速化した。 元のコード raohu69.hatenablog.jp const uint8_t atanTbl[] PROGMEM = { 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その12

前回のatan2の精度を上げてみた。8x8のテーブルを16x16に変更した。 import math # 64方向 for y in range(16): for x in range(16): angle = math.atan2(y, x) * 180 / math.pi index = round(angle / (360 / 64)) if index < 0: index += 64 print(format(…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その11

今までレーダー法を見てきたがいくつか不満点があった。 計算できる範囲に制限がある。 割り算が重い。 精度が低い。 3つ目の精度の問題は置いておいて、とても良い解決策がある。それはこちら。 こびにぃのあそび:Arduboy ソースコードがダウンロードでき…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その10

31x23マスのテーブルを作成していたが、0〜90度のデータがあれば(下図の赤い部分) 他の角度のデータを求めることができる。 16x12マスのレーダー法テーブルを作成する。 # 64方向 for y in range(12): for x in range(16): # ラジアンから度へ変換する ang…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その9

狙い撃ちの精度が悪いので、レーダー法のテーブルを64方向にしてみたのだが。 import math # 64方向 for y in range(23): for x in range(31): # 中心へずらす cx = x - 15 cy = y - 11 # ラジアンから度へ変換する angle = math.atan2(cy, cx) * 180 / math…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その8

レーダー法 http://beach.biwako.ne.jp/~beaver/msx/msxtecho/tablsp4.htm 前回作成したレーダーテーブル(32方向)で、プレイヤを狙い撃つようにした。sinテーブルを32方向で作り直し、getSin関数も32方向に修正する。 import math # 32方向の1/4のデータ f…

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その7

レーダー法のテーブル作成プログラムを修正した。atan2関数で各マス目への方向を求めるようにしたので、 角度の分割数や画面サイズの変更にも容易に対応できる。 import math for y in range(23): for x in range(31): # 中心へずらす cx = x - 15 cy = y - …

Arduboyで狙い撃つぜ!(atan2テーブルの作り方) その6

前回とは異なる方法で、atan2を実装できそうだ。レーダー法 http://beach.biwako.ne.jp/~beaver/msx/msxtecho/table2.htm 画面をマス目状に分割し、画面の中心からそれぞれのマス目が、 どの角度になるかをテーブル化しているようだ。 1030 DEFINT A-Z:DIM T…