スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ウディタでサイン・コサイン・タンジェント

以前、ビリヤード関連の記事でウディタ/距離と角度の計算を書きましたが、
平方根コモンなんか使わずに距離を求めることができる、という事に気づきました。

詳細は以下。
sincos.png
三角関数の定義のおさらいです。
θ(シータ)は角度。
sin θ = Y / R
cos θ = X / R
tan θ = Y / X
    =sin θ / cos θ
です。

ちなみに習った覚え方。英語の筆記体の書き順が、分数表記の【○分の○】になります。
sincos_kioku.png
左から順に、サイン・コサイン・タンジェント。
どうでもいい豆知識ですね。


閑話休題、ウディタで距離の話に戻ります。
AとBの座標が分かっていれば、XとYの長さが分かります。
座標をA(Ax,Ay)、B(Bx,By)とすれば、Aから見たBの座標は X = Bx - Ax、Y = By - Ayです。
相対的な座標を出す時は【相手 - 自分】です。逆にしないよう。

sin θ = Y / R なので、式を変形すると
R = Y / sin θ
同様に、
R = X / cos θ
です。

つまり、XもYもsinもcosもウディタで求められるので、
Rつまり距離を求めるのに平方根コモンなんて作る必要なかったよ、というお話でした。

上記を利用した、夕一くんの場所を検索する【ゆういちレーダー】
ScreenShot_2013_0201_12_19_50.png

サンプルソース
■変数操作+: CSelf10[picX] = 主人公 の 画面X座標
■変数操作+: CSelf11[picY] = 主人公 の 画面Y座標
■変数操作: CSelf11[picY] -= 40 + 0
■変数操作+: CSelf12[selfX] = 主人公 の X座標(精密)
■変数操作+: CSelf13[selfY] = 主人公 の Y座標(精密)
■変数操作+: CSelf14[U1X] = Ev0 の X座標(精密)
■変数操作+: CSelf15[U1Y] = Ev0 の Y座標(精密)
■変数操作: CSelf16[difX] = CSelf14[U1X] - CSelf12[selfX]
■変数操作: CSelf17[difY] = CSelf15[U1Y] - CSelf13[selfY]
■変数操作: CSelf18[picNo] = 10 + 0
■変数操作: CSelf19[degree] = 角度[x10]←傾き X: CSelf16[difX] Y: CSelf17[difY]
■変数操作: CSelf20[sin] = sin[x1000]←角度[x10] = CSelf19[degree] + 0
■変数操作: CSelf21[cos] = cos[x1000]←角度[x10] = CSelf19[degree] + 0
■変数操作: CSelf20[sin] 絶対値= CSelf20[sin] + 0
■変数操作: CSelf21[cos] 絶対値= CSelf21[cos] + 0
■条件分岐(変数): 【1】CSelf20[sin] が CSelf21[cos]以上
-◇分岐: 【1】 [ CSelf20[sin] が CSelf21[cos]以上 ]の場合↓
|■変数操作: CSelf22[R] = CSelf17[difY] * 1000
|■変数操作: CSelf22[R] /= CSelf20[sin] + 0
|■
-◇上記以外
|■変数操作: CSelf22[R] = CSelf16[difX] * 1000
|■変数操作: CSelf22[R] /= CSelf21[cos] + 0
|■
◇分岐終了◇
■変数操作: CSelf22[R] 絶対値= CSelf22[R] + 0
■ピクチャ表示:CSelf18[picNo] [中心]ウィンドウ「SystemFile/WindowBase_amania.png」サイズ[170,20] X:CSelf10[picX] Y:CSelf11[picY] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■変数操作: CSelf18[picNo] += 1 + 0
■ピクチャ表示:CSelf18[picNo] [中心]文字列[X:\cself[16] Y:\c] X:CSelf10[picX] Y:CSelf11[picY] / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]


サインとコサインはゼロになることがあったり、角度によっては誤差が大きいので、
絶対値が大きい方をとったりしてます。
そうなると距離もプラス・マイナスがおかしくなるので、これも絶対値をとっています。


他にも、cos / sin をtanとして、X / Yを利用して距離を出す方法もありますね。
あとは、XとYを斜辺として、三角形を分割してXcosθ+Ysinθとか。
色々あると思いますが、一例でした。
関連記事

Comment

Post a comment

非公開コメント

お知らせ

記事移行完了

記事をFC2からcatgames.16mb.comへ移行完了しました。

このサイトは更新されません。

カウンター

2012/09~

メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。