人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

計算の仕方を知りたいです。例えば、x=13、y=6とした場合に、それを47度回転したらば、xとyはいくつになるか、その計算式を教えて下さい。更にそれをJavaScriptやActionScript等でMathクラスなどを使って記す場合には、どのような書き方になるかも教えていただけると嬉しいです。

●質問者: matikori
●カテゴリ:コンピュータ 学習・教育
✍キーワード:ActionScript JavaScript クラス 計算
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● たも
●23ポイント ベストアンサー

平方根を 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をご存知ないとしても、全然参考になりましたよ!ありがとうございます。


2 ● GoldenDawn
●23ポイント

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) ;
}
◎質問者からの返答

こちらもありがとうございます!


3 ● Mook
●23ポイント

\large\left(\begin{array}x^\'\\y^\'\end{array}\right)=\large\left(\begin{array}cos(47)&-sin(47)\\sin(47)&cos(47)\end{array}\right)\large\left(\begin{array}x\\y\end{array}\right)


x^\'=cos(47)x-sin(47)y

y^\'=sin(47)x+cos(47)y


なので、例示の場合


x^\'=4.477856

y^\'=13.59959

になります。



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>
◎質問者からの返答

丁寧に書いていただいてありがとうございます!


4 ● しおり
●23ポイント

回転行列で計算するとわかり易いと思います。

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
◎質問者からの返答

こちらもわかりやすいですね。ありがとうございます。

皆さん色んな書き方をしてくれて大変参考になります!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ