// ---------------------------------------------------------------
// Name: GetForPlayerAngle
// Desc: 指定した座標からプレイヤーの角度を求めます
//
double GetForPlayerAngle( double x, double y )
{
double pi = 3.14159265358979323846264338327950288419716939937510;
double a, b, c;
// gX, gY プレイヤーの座標
a = gX - x;
b = gY - y;
c = (a+b);
double s = b/c;
static bool bFlag = false;
static vector<double> vAngle;
// テーブルの初期化
if( !bFlag ) {
for( double j=0; j<=pi*2; j+=pi/180 )
{
vAngle.push_back(j);
bFlag = true;
}
}
// 近似値を求める
double angle = 0;
// 実数値 s
int i;
for( i=0; i<vAngle.size(); i++ )
{
if( s<vAngle.at(i) ){
angle = i;
break;
}
}
HDC hdc = GetDC( hwndApp );
MoveToEx( hdc, x, y, NULL );
LineTo( hdc, gX, gY );
ReleaseDC( hwndApp, hdc );
return angle;
}
現在指定した座標x,yからプレイヤーの座標gX,gYへの角度の求める関数を作成中ですそこで三角関数を使い sinの実数値を求め、初期化したテーブルに一番近い値を
角度として判定するものを作っていますが
どうにもうまくいきません
MoveToEx関数などで座標が間違っていないかを描画し確認しているのですが
問題はないようなので どこかで計算が間違っているとかし思えません
おおよそ検討できる場所としては s の計算方法が間違っているとしか
もう検討の余地がないのですが、
上のソースコードのどこが間違っているかを指摘してもらえると助かります