ページ 11

レーザーの角度計算について

Posted: 2014年4月30日(水) 21:11
by atrix
レーザーの角度計算は画像のような考え方でできるのは分かるのですが
コードを見てみると以下のようになっています。

コード:

 
void conv_pos0(double *x, double *y, double x0, double y0, double mx, double my,double ang){
	double ox=x0-mx,oy=y0-my;
	*x=ox*cos(ang) -oy*sin(ang);
	*y=ox*sin(ang)+oy*cos(ang);
	*x+=mx;
	*y+=my;
}

ここで疑問に思ったのですが、なぜ*xの計算の時、-oysin(ang)となっているのでしょうか?
また同様に、なぜ*yの方もsinが正なのでしょうか?
行列式では逆のはずなのですが、よく理解できません。
どうかよろしくお願いしますm(__)m

Re: レーザーの角度計算について

Posted: 2014年4月30日(水) 21:28
by みけCAT
cos(-ang)==cos(ang)、sin(-ang)==-sin(ang)です。
従って、回転行列のsinの符号を逆にすると、angの解釈が逆になります。
さらにy軸を反転させると、元の回り方になります。

…と言いたいところですが、画像の「行列式」とコードはang=βとして一致しているように見えます。
「行列式では逆のはず」とはどういうことでしょうか?

Re: レーザーの角度計算について

Posted: 2014年4月30日(水) 22:39
by Tatu
34章の説明(および対応するプロジェクト)のコードでは

コード:

//座標回転
//(x0,y0)から(mx,my)を基準にang角回転した角度を(x,y)にいれる
void conv_pos0(double *x, double *y, double x0, double y0, double mx, double my,double ang){
        double ox=x0-mx,oy=y0-my;
        *x=ox*cos(ang) +oy*sin(ang);
        *y=-ox*sin(ang)+oy*cos(ang);
        *x+=mx;
        *y+=my;
}
となっていて直前までの説明と符号が合っていません。

Re: レーザーの角度計算について

Posted: 2014年5月01日(木) 18:30
by atrix
お答えいただき、ありがとうございました。

私がプログラムの符号をいじってそのままにしてしまっていたので、こちらの説明が合わず申し訳ございませんでした。

cos(-θ)=cosθ,sin(-θ)=-sinθ,なのですね。
こう解釈すればy軸を反転を考えなくても、元の行列式を変形するだけで計算が合いますね。

ありがとうございましたm(__)m