進むスピードを変えずに角度を変える

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
自由闊達

進むスピードを変えずに角度を変える

#1

投稿記事 by 自由闊達 » 17年前

ゲームプログラミングの館を参考に、ブロック崩しのゲームを作ろうと思ったのですが
三角関数を使って同じスピードで進む玉の角度を変えようと、
(xv:x座標の速さ yv:y座標の速さ ch.x:玉のx座標 ch.y:玉のy座標 sp:玉のスピード ang:角度)

xv=cos(ang*3.14/180)*speed;
yv=sin(ang*3.14/180)*speed;

ch.x+=xv;
ch.y+=yv;

(ch.x,ch.y)で画像を表示

のようにやってみたら、画像の表示の座標がintであることに気づき行き詰りました。

どうやったらスピードを変えずに角度を変えて進ませる事が出来るのでしょうか?

管理人

Re:進むスピードを変えずに角度を変える

#2

投稿記事 by 管理人 » 17年前

表示する座標はintでも、計算はdoubleでやればいいのではないでしょうか?

例えば

1.0
1.3
1.6
1.9
2.2
2.5
2.8
3.1

と、0.3ずつ増えるとしてもdoubleで計算すればきちんと計算出来ますし、
(int)にキャストすればint型の座標にも渡せます。
(しなくても出来ます。警告は出ますが)

また、非公開関数で
DrawGraphF
DrawRotaGraphF
というものがあります。
この関数にはfloat型で座標が渡せます。
小数点座標を受け付けてくれるので、
y=10x
のような傾きで進む物体は綺麗に描画出来ます。
関数の仕様は最初の2引数がintからfloatに変わっただけです。
(龍神録プログラミングの館でもこの関数を使っています)

管理人

Re:進むスピードを変えずに角度を変える

#3

投稿記事 by 管理人 » 17年前

後、3.14は最初にきちんとした値を定義しておいた方が良いと思います。

何処のサイトでも見かける方法で

#define PI 3.141592653589793

としておいて、円周率はプログラム中ではPIとして使用するとよいかと。
詳しい円周率はこんなサイトに書いてあります
http://www.kisaragiweb.jp/pi/pi1m.htm
必要ありませんが・・。

御津凪

Re:進むスピードを変えずに角度を変える

#4

投稿記事 by 御津凪 » 17年前

座標のほうは管理人さんがおっしゃったとおりです。

角度の 3.14 の部分ですが、精度がいい M_PI マクロ(math.h で定義されている)を使うといいです。
VC++ の場合、そのままだと定義されないらしいので、
// インクルード部
#define _USE_MATH_DEFINES // math.h のマクロ定義を使用する
#include <math.h>
とすることで M_PI マクロが使用可能になるはずです。

御津凪

Re:進むスピードを変えずに角度を変える

#5

投稿記事 by 御津凪 » 17年前

回答がダブりましたね。
どちらでもいいと思いますが、
math.h の定義では、
#define M_PI       3.14159265358979323846
となっています。

自由闊達

Re:進むスピードを変えずに角度を変える

#6

投稿記事 by 自由闊達 » 17年前

こんな早くに回答ありがとうございました。
自分にはまだ早いと思い龍神録プログラミングの館の方を見てなかったので
DrawGraphFの方は知りませんでした。
M_PIの方も初めて知りました、これで作業が進みます、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る