このタイトルが適当なのか分からないが位相ずれとかではなく、単位角度が非線形(恐らく)に変化する場合の直交座標系との変換ってなんか簡単な式はないのだろうか・・・。
なんか簡単に出来そうなイメージだったのだけど、頭がこんがらがってきて迷走中・・・。
単純に縦横の縮尺が当率であればそんな問題なさそうなのだけど、あれーーー?w
変換ってのもちと語弊があるかな・・・。
直交座標の角度をパースつけた空間の値に変換してやりたいってことだな・・。
つまり直交座標の0度は変換座標の中で-45度ってことで、直交座標で0度から90度までは、変換座標の中では45度から135度。という節目節目は成立するのだけど
例えはパースのかかった空間の幅=100%,高さ=40%だとすると、パース空間の中での0度から90度は、直交座標の中での-21.8度から21.8度まで。つまり直交90度が43.6度になっている。
ついでに90度から180度は180-43.6=136.4。
これを各範囲において1次的に置換は可能だろうけど多分正確ではないのでずれるはず。
なんか簡単に出来そうな気もするのだけど、頭が回りません。
####解決
こんな感じかな?
直交座標を反時計回りにθ回転させて幅=w,高さ=hにゆがませた場合。直交座標の角度からパース空間への角度への変換。(角度はx軸を基点に時計回り。)はsetter指定で
public function set sDeg(_sd:Number){
var _cx = Math.cos(Tool.d2r(_sd))/w;
var _cy = Math.sin(Tool.d2r(_sd))/h;
var _cd = Tool.r2d(Math.atan2(_cy,_cx));
Deg = _cd +θ;
}
※ここでTool.r2dってのはradianからdegreeの変換関数。なので引数はdgreeで指定。
で、逆にパース空間の角度を直交座標系への角度へ変換する場合はgetter指定で
public function get sDeg():Number{
var _cRad = Tool.d2r(Deg – θ);
var _cTan = Math.tan(_cRad);
var _sTan = _cTan*h/w;
var _sd = Math.atan(_sTan);
return _sd;
}
※Tool.d2rはdgreeからradianへの変換関数。
想定どおりの形に出来ました◎
「座標の角度変換」への2件の返信
ちがう、変換ってことじゃないな・・。
直交座標でθ度が、パース空間の中で何度なのか?ってことだな・・。変換ってのはそのまま位相差足してやりゃ良いだけだ。
でけた!
いつも結果を書かないと苦情を言われるので追記しておきます。