平方根を sqrt, 累乗を pow, 逆正接を atan2, 円周率を PI とすると、
x = sqrt(pow(x,2)+pow(y,2)) * cos((atan2(6/13)) + (47*180/PI))
y = sqrt(pow(x,2)+pow(y,2)) * sin((atan2(6/13)) + (47*180/PI))
だと思いますので、JavaScript では atan2(6/13) を atan2(6,13) にすればいけるんじゃないでしょうか。
あと、それぞれ Math.sqrt とかにするんですか? JavaScript 知らないのですが、これでどうでしょう。
x = Math.sqrt(Math.pow(x,2)+Math.pow(y,2)) * Math.cos((Math.atan2(6,13)) + (47*180/Math.PI))
y = Math.sqrt(Math.pow(x,2)+Math.pow(y,2)) * Math.sin((Math.atan2(6,13)) + (47*180/Math.PI))
平方根を sqrt, 累乗を pow, 逆正接を atan2, 円周率を PI とすると、
x = sqrt(pow(x,2)+pow(y,2)) * cos((atan2(6/13)) + (47*180/PI))
y = sqrt(pow(x,2)+pow(y,2)) * sin((atan2(6/13)) + (47*180/PI))
だと思いますので、JavaScript では atan2(6/13) を atan2(6,13) にすればいけるんじゃないでしょうか。
あと、それぞれ Math.sqrt とかにするんですか? JavaScript 知らないのですが、これでどうでしょう。
x = Math.sqrt(Math.pow(x,2)+Math.pow(y,2)) * Math.cos((Math.atan2(6,13)) + (47*180/Math.PI))
y = Math.sqrt(Math.pow(x,2)+Math.pow(y,2)) * Math.sin((Math.atan2(6,13)) + (47*180/Math.PI))
JavaScriptをご存知ないとしても、全然参考になりましたよ!ありがとうございます。
JavaScript での記述例だけ
with (Math) { var x = 13, y = 6 ; // 初期位置 var deg = atan2(y, x) ; // 初期角度 deg += 47 * PI / 180 ; // 47度足す (ラジアンに変換) r = sqrt(x*x + y*y) ; // 原点からの距離 var x2 = r * cos(deg) ; // 変換後の位置 var y2 = r * sin(deg) ; }
こちらもありがとうございます!
なので、例示の場合
になります。
JavaScrip の場合下記が参考になるでしょうか。
<HTML> <HEAD> <SCRIPT language="Javascript" type="text/javascript"> function rotation() { var r = document.myForm.r.value; var x = document.myForm.x.value; var y = document.myForm.y.value; var res = document.getElementById("res"); var rr = Math.PI * r / 180; var x2 = Math.cos( rr ) * x - Math.sin( rr ) * y; var y2 = Math.sin( rr ) * x + Math.cos( rr ) * y; document.myForm.x2.value = x2; document.myForm.y2.value = y2; } </SCRIPT> </HEAD> <BODY> <FORM name="myForm"> <TABLE> <TR> <TD colspan="2">回転角度</TD><TD colspan="4"><input type="text" name="r"></TD> </TR> <TR> <TD>変換前座標</TD><TD>X</TD><TD><INPUT type="text" name="x"></TD><TD>Y</TD><TD><INPUT type="text" name="y"></TD></tr> </TR> <TR> <TD colspan="5" align="right"><INPUT type="button" value="計算" onClick="rotation();"></TD></tr> </TR> <TR> <TD>変換後座標</TD><TD>X</TD><TD><INPUT type="text" name="x2"></TD><TD> Y</TD><TD><INPUT type="text" name="y2"></TD> </TR> </TABLE> </FORM> </BODY> </HTML>
丁寧に書いていただいてありがとうございます!
回転行列で計算するとわかり易いと思います。
X = x * cosθ − y * sinθ Y = x * sinθ + y * cosθ
#!ruby class Vector2 def initialize(x = 0.0, y = 0.0) @x = x @y = y end attr_accessor :x, :y def rotate(angle) x = @x * Math.cos(angle) - @y * Math.sin(angle) y = @x * Math.sin(angle) + @y * Math.cos(angle) self.class.new(x, y) end end x = 13.0 y = 6.0 angle_degree = 47.0 angle = angle_degree * Math::PI / 180.0 org_vec = Vector2.new(x, y) new_vec = org_vec.rotate(angle) p new_vec.x # => 4.47785647109746 p new_vec.y # => 13.5995882814242
こちらもわかりやすいですね。ありがとうございます。
皆さん色んな書き方をしてくれて大変参考になります!
JavaScriptをご存知ないとしても、全然参考になりましたよ!ありがとうございます。