ページ 1 / 1
館14章において
Posted: 2014年8月06日(水) 12:34
by yusha
コード:
void shot_bullet_H004(int n){
int t=shot[n].cnt;
int k;
if(t>=0 && t<120 && t%20==0){
double angle=shotatan2(n);
for(int i=0;i<20;i++){
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle =angle+PI2/20*i;
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =enemy[shot[n].num].col;
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].spd =4;
}
se_flag[0]=1;
}
}
}
のところでなぜ「angle+PI2/20*i;」という記述で円周状に20発の弾が出るようになるのですか??
Re: 館14章において
Posted: 2014年8月06日(水) 13:05
by softya(ソフト屋)
これまでの質問も同じですがわからない所が整理されていない印象です。
1.angle自体の意味がわからない。atan2が理解出来ていない。
2.ラジアン角が分かっていない。PI2/20の意味が不明。
3.式が単にわからない。angle+PI2/20*i;の計算結果が想像できない。
4.sin、cos、tanやatanなど三角関数が意味不明。
ですが、どれでしょうか?
本来はご本人が整理すべき事なんですよ。
【補足】 厳しい言い方っぽくなってしまったので補足します。
怒っているのではなく、こういう考え方をしないと理解するのが困難ですよって事を言いたいだけです。
ただ眺めていたり打ち込むだけでは整理されて頭のなかに再構築されませんので模倣したプログラムを書くことも出来ません。
つまり、勉強が勉強にならない状況が発生します。
yusha さんは熱心に勉強されていると思いますので、うまく整理するすべを身につけてくださいね。
Re: 館14章において
Posted: 2014年8月06日(水) 13:22
by yusha
今までも今回も迷惑ばかりかけて申し訳ありません。
3.angle+PI2/20*i;の計算結果が想像できない。
が該当します。
「angle」と「PI2/20」の意味はそれぞれわかるのですが、「PI2/20」に「i」をかける意味、結果と式の途中にある加算の演算子を使用するとどういう理由があるのかがわかりません。
Re: 館14章において
Posted: 2014年8月06日(水) 13:34
by softya(ソフト屋)
for(int i=0;i<20;i++){は分かりますよね。
であれば、angle+PI2/20*iがどういう値のバリエーションを取るか想像できると思います。
値のバリエーションがわかるのに、意味が分からないならPI2/20が持つ意味(=ラジアン角)がよく分かっていない可能性があります。
Re: 館14章において
Posted: 2014年8月06日(水) 14:06
by yusha
「angle」が相手から見た自分の角度で、「PI2/20」で18度と思ってます。であるならば「PI2/20」に変数「i」をかけた値のバリエーションは、
i=0の時、自機から18度ずれた場所
i=1の時、自機から36度ずれた場所
i=2の時、自機から54度ずれた場所
i=3の時、自機から72度ずれた場所
・
・
・
ということになります。
また、「angle+PI2/20*i」においては、「angle」では敵から見た自分の方向。つまり自機狙いであり、そこに先述した「for(int i=0;i<20;i++)」の値を代入された「PI2/20*i」を追加したという解釈で合っているでしょうか??
Re: 館14章において
Posted: 2014年8月06日(水) 14:37
by softya(ソフト屋)
言葉の選び方に不安を覚えるのと計算が違っています。
i=0の時、自機から180度ずれた場所角度
0を掛けたら0ですよ。
>また、「angle+PI2/20*i」においては、「angle」では敵から見た自分の方向。つまり自機狙いであり、そこに先述した「for(int i=0;i<20;i++)」の値を代入された「PI2/20*i」を追加したという解釈で合っているでしょうか??
ここの解釈が不安ですね。その結果としてどんな事が起きるの?って視点が欠けています。
Re: 館14章において
Posted: 2014年8月06日(水) 14:52
by yusha
また計算ミスしてしまいました。
結果は自機狙いをベースに18度ずつ弾が打たれるということで有っていますでしょうか?
Re: 館14章において
Posted: 2014年8月06日(水) 15:52
by softya(ソフト屋)
では、プログラムコードと実際の動きのイメージは一致しましたか?
>円周状に20発の弾が出るようになるのですか??
これを例えば15発で円周状とかに書き換えできれば理解したと思って良いと思います。
Re: 館14章において
Posted: 2014年8月09日(土) 14:39
by yusha
コード:
void shot_bullet_H004(int n){
int t = shot[n].cnt;
int k;
if (t >= 0 && t<120 && t % 20 == 0){
double angle = shotatan2(n);
for (int i = 0; i<15; i++){
if (shot[n].flag != 2 && (k = shot_search(n)) != -1){
shot[n].bullet[k].knd = enemy[shot[n].num].blknd2;
shot[n].bullet[k].angle = angle + PI2 / 15 * i;
shot[n].bullet[k].flag = 1;
shot[n].bullet[k].x = enemy[shot[n].num].x;
shot[n].bullet[k].y = enemy[shot[n].num].y;
shot[n].bullet[k].col = enemy[shot[n].num].col;
shot[n].bullet[k].cnt = 0;
shot[n].bullet[k].spd = 4;
se_flag[0] = 1;
}
}
}
}
と書きました。
Re: 館14章において
Posted: 2014年8月09日(土) 15:12
by softya(ソフト屋)
正解です。これで小細工できるにようになればなお良いでしょう。
角度が前と後ろで違うとか。