HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0315
WHITEどっち回りがはやい?5解決


WHITE

リンク

2010/3/15(Mon) 10:29:57|NO.31248

現在むいている方向(RAD)から目的地の方向に向かわせるために
旋回させるようプログラムしたいのですが、
右回り、左回りどちらに旋回する方が早いのかの判定のしかたがわかりません。;;

どのように判定させればいいのでしょう?
おねがいします;;



この記事に返信する


f(飲茶中)

リンク

2010/3/15(Mon) 11:32:20|NO.31249

・・・。

ヒント。「2PIを 足しても引いても 向き同じ かさあげすれば マイナスならず」。



WHITE

リンク

2010/3/15(Mon) 13:01:00|NO.31250

できるようになりました^^
ありがとうございました☆



GAM-22

リンク

2010/3/15(Mon) 13:18:25|NO.31251

方法としては色々ありそうですが、私はベクトルの外積を使うのが好きです。
自分のブログのネタになりそうなので、汚いサンプルを書いてみました。


// 角度の補正が面倒なので、数学に合わせてラジアン0はx軸方向に並行とします。 // 考え方としては、自分の向きをaベクトル、自分から目標の向きをbベクトルとして、 // 外積を利用して、なす角のsinを求めます ; 自分の座標と向き mx = 320.0 my = 240.0 mr = 0.0 *main ////ここからが重要///// ; 目標の座標(マウスカーソル) tx = 0.0+mousex ty = 0.0+mousey ; aベクトル(自分の向き) ax = cos(mr) ay = sin(mr) ; bベクトル(自分から目標の向き) bx = tx-mx by = ty-my ; abベクトルの外積 a∧b = ax*by - bx*ay ; abベクトルのなす角をsinθとして ; a∧b = |a||b|sinθ sinθ = (a∧b)/sqrt(bx*bx+by*by) ; 向きが違うなら if absf(sinθ)>=0.02 { ; 自分は旋回する if sinθ>=0 { mr += 0.02 } else { mr -= 0.02 } } ////ここまで//// redraw 0 color 255,255,255 : boxf color 0,0,0 ; 自分 line mx+cos(mr)*100,my+sin(mr)*100, mx,my ; 目標 pos tx-7,ty-9 : mes "◎" ; インジゲーター pos 0,0 mes "mr : "+mr mes "a("+ax+","+ay+")" mes "b("+bx+","+by+")" mes "a∧b : "+a∧b mes "sinθ : "+sinθ redraw await 10 goto*main

この方法なら、自分が何回転するとしても、面倒なことを考えなくて済みます。
他の人の作ったゲームのソースを見れば、他にも色々な方法があるかもしれません。
プログラムの技術は人から盗んで学ぶものです(?)。



GAM-22

リンク

2010/3/15(Mon) 15:11:35|NO.31255

上のサンプルですが、外積の記号が間違ってます。
a∧b
ではなく
a×b
が正しいです。

すみませんでした。



WHITE

リンク

2010/3/15(Mon) 18:47:41|NO.31264

丁寧な回答ありがとうございました^^
とても参考になりました☆

またいろいろなソースをみて研究してみますね



ONION software Copyright 1997-2017(c) All rights reserved.