マス目移動だとか、しゃがむだとかは実装できたが、回転に苦戦。
オイラー角で縦軸に足し引きすればいいだけなんだけども、
目的の角度に近づいたか判定するときに、-90から減ると269とかになるから混乱してしまう。
眠くて頭が回らないから明日にしよう。
左に回転
Re: 左に回転
いきなり関係ない話ですが,
個人的には「角度」という値をなるべく用いずに済む方法が好きです.
なぜかというと,「角度」って
度(degree) で言えば,0と360 とか -180と180 とか どこかで値が不連続な点がある.これが嫌.
これのせいで例えば,「2つの角度を与えるから,差を求めろ」みたいなのとかで
何故か無意味に混乱というかミスしやすくて嫌.(ただの算数なのに!w)
「45度と60度」て言われるなら差は15度だけど,
「-20度と370度」だとか言われるともう嫌になるw 何故なのか?
---
「オイラー角(回転姿勢を3つの角度で表すやつ)」も嫌いw.
専ら1軸周りで回しているうちはまだいいんだけど…点そうじゃなくなった時点で回転具合がイミフすぎて嫌.
「3つの角度」で頑張るのは私には無理.
個人的には「角度」という値をなるべく用いずに済む方法が好きです.
なぜかというと,「角度」って
度(degree) で言えば,0と360 とか -180と180 とか どこかで値が不連続な点がある.これが嫌.
これのせいで例えば,「2つの角度を与えるから,差を求めろ」みたいなのとかで
何故か無意味に混乱というかミスしやすくて嫌.(ただの算数なのに!w)
「45度と60度」て言われるなら差は15度だけど,
「-20度と370度」だとか言われるともう嫌になるw 何故なのか?
---
「オイラー角(回転姿勢を3つの角度で表すやつ)」も嫌いw.
専ら1軸周りで回しているうちはまだいいんだけど…点そうじゃなくなった時点で回転具合がイミフすぎて嫌.
「3つの角度」で頑張るのは私には無理.
Re: 左に回転
私は角度を扱うときは下の様な関数を使って角度を正規化しています。
-180 ~ 180 の角度に正規化しているのは正面を 0度とすると符号だけで右側か左側かわかりますので。
min = 0, max = 360 とすれば常に正の値に正規化することもできます。
> usaoさん
fmod 関数で実数の剰余が求められます。剰余の符号は被除数の符号に依存するようです。
-180 ~ 180 の角度に正規化しているのは正面を 0度とすると符号だけで右側か左側かわかりますので。
min = 0, max = 360 とすれば常に正の値に正規化することもできます。
double normalize(double d)
{
const double min = -180;
const double max = 180;
const double rd = max - min;
double x = fmod(d, rd);
if (x < min) return x + rd;
if (x >= max) return x - rd;
return x;
}
fmod 関数で実数の剰余が求められます。剰余の符号は被除数の符号に依存するようです。