logo
ホーム •  フォーラム •  日本語wikiトップ •  アカウント情報 •  サイト内検索 •  新規登録
 ログイン
ユーザー名:

パスワード:


パスワード紛失

新規登録
 メインメニュー
 米国サイト
 オンライン状況
18 人のユーザが現在オンラインです。 (1 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 18

もっと...

Re: Nasalを知ろう、使おう!

このトピックの投稿一覧へ

なし Re: Nasalを知ろう、使おう!

msg# 1.4.1
depth:
2
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2008-7-4 15:16
Tat  長老   投稿数: 375
色々解説しておきながらなんですが、AirRacing のバグを2つ程見つけてしまいました。

バグ修正済みの最新版は AirRacing-20080704.tar.gz です。是非お試しください。なお、今回は開発版の変更も取り入れましたので、ゲート番号が表示されるようになり、矢印の形がロケットになっています(どの方向からでも見やすいのはこんな形ですかね?)

さて、せっかくの Nasal スレッドですので、何が間違えていたかを説明しておきます。まずは、ゲート中心から機体中心への距離を求める式が間違っていました。

正しい計算方法は
引用:
var dlat_m = dlat * 111120;
var dlon_m = dlon * math.cos(me.lat / 180 * math.pi) * 111120;
me.dist_m = math.sqrt(dlat_m * dlat_m + dlon_m * dlon_m);

# dlat : 機体中心とゲート中心との緯度の差分 (deg)
# dlon : 機体中心とゲート中心の経度の差分 (deg)
# dlat_m : dlat の距離 (m)
# dlon_m : dlon の距離 (m)
# me.dist_m: 機体中心とゲート中心との距離 (m)
# me.lat: 機体中心の緯度

なのですが、2つも大きな間違いがありました。間違ったコードを見てみましょう。
引用:
var dlat_m = dlat * 111120;
var dlon_m = dlon * math.cos(me.lon) * 111120;
me.dist_m = math.sqrt(dlat_m * dlat_m + dlon_m * dlon_m);

両方とも2行目が問題です。1つ目は、ある緯度における経度差の距離計算に対しては緯度のコサインを掛けるのですが、この計算を cos(me.lat) ではなく cos(me.lon) としていました。全くの凡ミスです。更に、cos の引数をラジアンに変換するのを忘れていました。もう笑うしかありません。これらの間違いにより、最大で誤差100% (経度1°当り111.12 km) になります(笑) しかしながら、距離が短い事とラジアン変換ミスの誤差とある程度相殺されるので、大抵の場合 ±20〜30m の誤差になるようです。このため精度は悪いけど、とりあえず通過判定ができていたということになります。

こういう場合はバグの発見が遅れてしまいがちです。今回は Racer.dist_m をモニタしながらゲートの端を通過した時に, dist_m が 80 m だったり109 m だったりとばらつきがあったため、計算が間違っている事に気づきました。

いずれにしても、sambar さんのご指摘が無ければ、このバグは ずっと見過ごしている所でした。大変ありがとうございました。

つぎに、2つ目の問題を説明します、通過判定のところで本来なら
引用:
最小距離 (Gate.minDistance) < 機体とゲートとの間の距離 (Racer.dist_m)
かつ
最小距離 < (ゲートの幅 + バンク時の機体幅) / 2
の際に通過と見なすべきですが、以前のコードには間違いがあり、最小の距離になる前に通過判定をしてしまう場合があることと、接触判定を見越してゲート幅にバンク時の機体幅を足す計算がありませんでした。

ついでに、sambar さんご提案の JSBSim の WingSpan を取り込むようにしてみました。これらの修正 & 変更で随分精度はよくなったのではないかと思います。

ちなみに Wing Span を参照する部分が多くなって来たので、TouchingPenalty.WING_SPAN を
Racer.wingSpan に変更しました。また、水平方向での機体幅は Racer.currentWidth() で取得できるようになっています。

今回の修正に関して具体的に何が変更されたかを知りたい場合は、直前の開発版である AirRacing-dev-20080516 との diff を取ってください。変更されているのは racing.nas です。
投票数:20 平均点:5.50

投稿ツリー

  条件検索へ


 検索

高度な検索
 新しい登録ユーザ
ironmaster 2024-10-12
skypkam 2024-10-12
upesif 2024-10-12
ufysaz 2024-10-12
ynufaj 2024-10-12
ogyjugar 2024-10-12
oqiqery 2024-10-11
ovudodi 2024-10-11
ijahy 2024-10-11
upetu 2024-10-11
 最近の画像(画像付)
関東カスタムシーナ... (2024-8-16)
関東カスタムシーナ...
自作11機目 F/A-18... (2022-5-27)
自作11機目 F/A-18...
飛んでみる八尾空港 (2022-4-10)
飛んでみる八尾空港
作ってみる八尾空港 (2022-4-2)
作ってみる八尾空港
F117 nighthawk (2021-5-19)
F117 nighthawk
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Theme designed by OCEAN-NET