角度からx,yを割り出したいんです。

[統計] HTMLからXHTMLへの移行を進めていますか?



0   名前: M3 : 2005/05/15 11:38  [URL
JavaScriptでゲームを作ろうと考えまして、
シューティングにしようと思い、
弾や敵機を動かすときに角度を引数としてfunctionに与え、x,yを割り出し、
グローバル変数に代入したいんですよ。
var x;
var y;
function kakudo(kak){
 x=[計算式によるxの割り出し部分];
 y=[計算式によるyの割り出し部分];
}
のように。
なので、
[計算式によるxの割り出し部分]
[計算式によるyの割り出し部分]
をそれぞれ考えていただきたいと思います。

1   名前: 七鍵 : 2005/05/15 11:38  [URL
角度からだけでは(x,y)は割り出せ無いのでは?
ちなみにx,yは何でしょう?

2   名前:  U D  : 2005/05/15 11:38
きたーーー
得意分野!!
過去の自分の同じような状態なのかな〜〜?

と前置きはこのへんにしておいて、
>>1の通り角度だけでは出せませんが、この場合グローバル変数X,Yを元に
さらにX,Yを移動させると考えていいでしょうか?
ex) X=X+SIN(KAK)*20 みたいな。

詳しい状況がいまいちわからないのでちょっと言いにくいですが、
こういう角度とX、Yについては「三角関数」を使うといいです。
(サイン、コサイン、タンジェント、です。)
…ちなみに何歳ですか?これ習うの高校ですが。。。
一応調べてみてできそうであればそうして欲しいですが、
とてもじゃないけど習ってないし数学苦手だから無理、というのであれば代わりに作ってあげます。

3   名前:  U D  : 2005/05/15 11:38
これが参考になるかどうか分かりませんが、僕が昔作った時計です。
針を時間から角度を割り出して三角関数でX,Yを算出しています。
一応参考までに。

<SCRIPT type="text/javascript">
<!--
x_o = -100;
y_o = 100;
hankei = 96;
function drawLine(){
a = new Date();
hour= a.getHours();
min = a.getMinutes();
sec = a.getSeconds();
if(hour>=12)hour-=12;
kakudo=angle(sec,"s");
x_s = hankei * Math.cos(kakudo / 180 * Math.PI);
y_s = hankei * Math.sin(kakudo / 180 * Math.PI);
if(sec>=0 && sec<15)y_s=-y_s;
if(sec>=30 && sec<45)x_s=-x_s;
if(sec>=45 && sec<60){x_s=-x_s; y_s=-y_s;}
x_s-=100;
y_s+=100;
myLine_s.from = x_o+","+y_o;
myLine_s.to = x_s+","+y_s;
kakudo = angle(min,"m");
x_m = hankei * Math.cos(kakudo / 180 * Math.PI);
y_m = hankei * Math.sin(kakudo / 180 * Math.PI);
if(min>=0 && min<15)y_m=-y_m;
if(min>=30 && min<45)x_m=-x_m;
if(min>=45 && min<60){x_m=-x_m; y_m=-y_m;}
x_m-=100;
y_m+=100;
myLine_m.from = x_o+","+y_o;
myLine_m.to = x_m+","+y_m;
kakudo = angle(hour,"h");
x_h = hankei * Math.cos(kakudo / 180 * Math.PI)*0.7;
y_h = hankei * Math.sin(kakudo / 180 * Math.PI)*0.7;
if(hour>=0 && hour<3)y_h=-y_h;
if(hour>=6 && hour<9)x_h=-x_h;
if(hour>=9 && hour<12){x_h=-x_h; y_h=-y_h;}
x_h-=100;
y_h+=100;
myLine_h.from = x_o+","+y_o;
myLine_h.to = x_h+","+y_h;
setTimeout("drawLine()",1000);
}
function angle(toki,tanni){
if(tanni=="h")toki*=5;
kaku=90-toki*6;
if(toki>=15 && toki<30)kaku=-kaku;
if(toki>=30 && toki<45)kaku+=180;
if(toki>=45 && toki<60)kaku=-kaku-180;
return kaku;
}
// -->
</SCRIPT>

4   名前:  U D  : 2005/05/15 11:38
〜続き:>>3は頭部です。

<style type="text/css">
v\:* { behavior: url(#default#VML); }
</style>
</HEAD>

<BODY onLoad="drawLine();">
<TABLE WIDTH="300" HEIGHT="300" BORDER="1" BGCOLOR="#FFFFFF">
<tr><td><DIV style="position:relative;" align="center">
<v:oval style="width:200;height:200;" strokeweight="3pt" />
<v:line id="myLine_s" strokeweight="1pt">
<v:stroke dashstyle="solid" />
</v:line>
<v:line id="myLine_m" strokeweight="2pt">
<v:stroke dashstyle="solid" />
</v:line>
<v:line id="myLine_h" strokeweight="3pt">
<v:stroke dashstyle="solid" />
</v:line>
</DIV></td></tr>
</TABLE>

</BODY>

5   名前: M3 : 2005/05/15 11:38  [URL
>>2さんの言ってることそのままです。
簡単に言うと、
画像(座標はex,xy)を指定した角度(関数の引数kak)に移動するために、
一定時間ごとにプラスするx,yを求めたかったんです。
角度指定→x,yを角度指定して求める→一定時間ごとにex+=x,ey+=yして画像を移動・・・
以上がしたいことですが、作れますでしょうか?

6   名前: 七鍵 : 2005/05/15 11:38  [URL
>角度指定→x,yを角度指定して求める→一定時間ごとにex+=x,ey+=yして画像を移動
いえ、ですから無理です。
角度と距離(例えば移動距離)を指定してやる必要があります。
これはUDさんが解説してくれている通りです。

移動先X座標=元X座標+COS(角度)*移動距離
移動先Y座標=元Y座標+SIN(角度)*移動距離

これをJavaScriptにて記述して下さい。

一覧へ戻る