ページ 11

三角関数について

Posted: 2012年2月20日(月) 18:39
by klm
円を描くように円を動かせたいのですが
下のコードをコンパイルしてもうまく動きません
いったいどこに問題があるんでしょうか
開発環境はVisual C++ 2008 です

コード:

#include "DxLib.h"
#include <math.h>

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
		
		double x,y,kakudo=0;
		int Red = GetColor( 255 , 0 , 0 );
		
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
			kakudo++,x=320,y=240;
			x=320+cos(kakudo)*100;
			y=240+sin(kakudo)*100;
			DrawCircle ( x , y , 10 ,Red, TRUE);
		}
        
        DxLib_End(); // DXライブラリ終了処理
        return 0;
}  


Re: 三角関数について

Posted: 2012年2月20日(月) 19:03
by ぱにしん
math.hのsin、cosの引数に取る角度はラジアン値を入れなければなりません。

http://www.c-tipsref.com/reference/math/sin.html

こちらのサンプルが参考になるかと思います。

Re: 三角関数について

Posted: 2012年2月20日(月) 20:34
by non
試に、
kakudo++;

kakudo+=0.1;
にしてみたらどうでしょう。

Re: 三角関数について

Posted: 2012年2月20日(月) 20:57
by Dixq (管理人)
角度を表現する方法は「度数法」と「孤度法」があります。
最初は1周が360度である度数法で習うと思いますが、高校でラジアンを使う孤度法を習うと思います。
sin,cosに渡す角度は後者の孤度法です。
1周が2πになります。
2πは6.28位ですから、60FPSのモニタなら、
kakudo++;
だと1秒間に10周してしまうことになります。
60FPSで3秒は180フレームですから、例えば3秒で1周させたければ
kakudo += 2π / 180;
でよいです。

Re: 三角関数について

Posted: 2012年2月20日(月) 21:15
by みけCAT
sin、cosで引数をラジアンに変換してもいいと思います。
cos(kakudo)→cos(kakudo*PHI/180.0)
sin(kakudo)→sin(kakudo*PHI/180.0)

Re: 三角関数について

Posted: 2012年2月21日(火) 00:44
by box
そもそも、double型の変数にインクリメント演算子を適用することが本当に正しいのか?
というような話はあったりしますか?