Home > action script > 〜度回転させた後の_xと_yを求める方法

〜度回転させた後の_xと_yを求める方法

Action Scriptでムービークリップの回転といえば_rotationプロパティですが、今回紹介するのは、別の方法。
回転前のムービークリップのx,y座標と回転軸のx,y座標、回転させたい角度から、回転後のx,y座標を求める方法です。
使う式は

x1 = Math.cos(radian)*x-Math.sin(radian)*y;
y1 = Math.cos(radian)*y+Math.sin(radian)*x;
作例を交えて解説させていただきます。

rotate.swf
上記のサンプルでは、ステージ上の青いボール(ball)が、赤い基準点(point)を中心として30°回転するサンプルです。フレームスクリプトに、以下のように記述します。
var degree:Number = 30;//回転させたい角度
var radian:Number = degree*Math.PI/180;//角度をラジアンに変換
function rotateBall() {//正の方向にdegree度回転させる関数
	var x:Number = ball._x-point._x;
	var y:Number = ball._y-point._y;
	x1 = Math.cos(radian)*x-Math.sin(radian)*y;
	y1 = Math.cos(radian)*y+Math.sin(radian)*x;
	ball._x = point._x+x1;
	ball._y = point._y+y1;
	btn.label = "Reset";
}
function resetBall() {//負の方向にdegree度回転させる関数(先程の逆回転)
	var x:Number = ball._x-point._x;
	var y:Number = ball._y-point._y;
	x1 = Math.cos(radian)*x+Math.sin(radian)*y;
	y1 = Math.cos(radian)*y-Math.sin(radian)*x;
	ball._x = point._x+x1;
	ball._y = point._y+y1;
	btn.label = "Rotate";
}
btn.onRelease = function() {//ボタンラベルの内容により、回転・逆回転を行う
	if (btn.label == "Rotate") {
		rotateBall();
	} else {
		resetBall();
	}
};
では、上から順に見て行きます。まず、
var degree:Number = 30;//回転させたい角度
var radian:Number = degree*Math.PI/180;//角度をラジアンに変換
回転させたい角度degreeを設定します。今回、Mathクラスのcos()とsin()を使いますが、引数には角度ではなく、ラジアンを与えないといけないので、2行目の変換の公式(重要なので丸暗記必須)で、角度(degree)をラジアン(radian)に変換します。

次に、回転させるための関数、rotateBallの中身を見ていきます。

var x:Number = ball._x-point._x;
var y:Number = ball._y-point._y;
作例のガイドを見れば分かりますが、移動前のballのpointからの座標xとyを求めます。

x1 = Math.cos(radian)*x-Math.sin(radian)*y;
y1 = Math.cos(radian)*y+Math.sin(radian)*x;
ここで今回の核となる式を使います。ここでのx1,y1は、先ほど求めたx,yがradianの分だけ回転した後の座標です。
ball._x = point._x+x1;
ball._y = point._y+y1;
求めたx1,y1は基準点pointからの距離です。ballの移動後の座標はFlashの座標空間で考えますのでpointの_x,_yを足したものになります。
btn.label = "Reset";
は、作例用のボタンのテキストを変更するためのものですので、今回は無視して下さい。

以上です。
ちなみに負の方向(反時計回り)に回転させたい時は、resetBall関数にあるように、

x1 = Math.cos(radian)*x+Math.sin(radian)*y;
y1 = Math.cos(radian)*y-Math.sin(radian)*x;
+ーの符号を逆転させます。

マウスの座標を回転軸にしたり、onEnterFrameの中に入れて回転させ続けたりして検証してみてください。
この回転のさせ方は、Flashの擬似3D空間での回転にも使えますので、覚えておいて損は無いとおもいます。
さらに深みにハマりたい時は、
Foundation Actionscript Animation: Making Things Move (Foundation)
Keith Peters
1590595181
でテンションが上がります。

Comment:3

nk 2007-07-23 (月) 04:04

まだ初心者なので、参考にさせてもらっています

一つお聞きしたい事があるのですが
x1 = Math.cos(radian)*x-Math.sin(radian)*y;
y1 = Math.cos(radian)*y+Math.sin(radian)*x;
この式の意味はどういったものなのでしょうか?

ただ式を覚えるのでは無く、一つ一つ式を理解していたいので
この式の意味というか何故この式なのかと考えていたのですが
どうもsin.cosなどが絡むと苦手で苦戦しています・・・

お暇な時でいいのでどうかご教授願えないでしょうか・・・

tera 2007-07-23 (月) 09:21

>nk様
こんにちは。コメントありがとうございます。
上の式なのですが、残念ながら僕の脳から抜け落ちてしまいました。
洋書ですが「Making Things Move」(AS2版、AS3版どちらにも記載)の中に、そのまんまの公式(導き方)が、順をおって解説されていますので、そちらを読んでいただくのがよいかと思います。
僕も読み直しますです。

nk 2007-07-23 (月) 21:35

お返事ありがとうございます
英語が駄目なので洋書は無理そうです・・・

でも、なんとか頑張ってみます!
ありがとうございました!

やっぱり、英語が出来ると色々と得ですね

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

Trackback:0

TrackBack URL for this entry
http://www.trick7.com/blog/mt-tb.cgi/159
Listed below are links to weblogs that reference
〜度回転させた後の_xと_yを求める方法 from trick7.com blog

Home > action script > 〜度回転させた後の_xと_yを求める方法

持っている Flash & ActionScript 関連本の中から、自分的おすすめの読む順番をご紹介。各書籍のレビューは books カテゴリからご覧頂けます。
この順番でどう?(AS3.0)
  • Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)
    Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)

    デザイン方面からFlashデビューして、そのままAS2.0を使うようになった人が、難しいと評判のAS3デビューする時の最初の1冊として、とにかく目を通しておくと良いかと思います。プログラミング経験の少ない方でも、サンプルをじっくり読めば、ゼロからのAS3デビュー可。
  • ActionScript 3.0 アニメーション
    ActionScript 3.0 アニメーション
    洋書「Making Things Move!」の日本語訳本。ActionScript3.0で数学的アニメーションを作ることがメインテーマなのですが、前半部分でAS3.0の基礎を分かり易く解説されています。後半の重力, IK, 3D表現等のアニメーション解説も楽しい。僕はこれのAS2.0洋書版を読んでFlashの面白さに気付きました。
  • Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    この次の辞典のような洋書を読む前の事前知識としてこの本の内容を理解しておくといいかも。
  • Essential ActionScript 3.0 (Essential)
    Essential ActionScript 3.0 (Essential)

    900ページ以上ある相当分厚い本。基礎からOOPまでを解説。ほぼ網羅しているので、これを抑えておけばAS3博士になれそう。
  • Actionscript 3.0 Cookbook
    Actionscript 3.0 Cookbook

    ActionScript3.0のリファレンス本。問題とその解決法が1ページぐらいで細分化されているので空いた時間にちょっとずつ読み進められる。WebでAS3のソースを見て勉強する時の字引としても使う。ただ、時期的に初期の本なので、AS3自体が仕様変更してたりするので正誤表は必読。
  • Object-Oriented Actionscript 3.0
    Object-Oriented Actionscript 3.0

    7/23に発売されたFlash&OOP本。AS2.0版は持っているのだけど、オブジェクト指向の初歩的な解説から入って、後半は僕の理解を超える難度になっていきました。今度こそ理解できるか?
この順番でどう?(AS2.0)
  • Foundation Actionscript Animation: Making Things Move (Foundation)
    Foundation Actionscript Animation: Making Things Move (Foundation)

    スクリプトでアニメーションさせる方法を学べる。プログラムの知識というよりも数学や物理の知識が必要。バネの表現や3D表現など、汎用性の高いテクニックを身に付けられ、個人の表現力をレベルアップするのに最適。参考までに、僕が調べた英単語リスト。2007年4月に、AS3対応版も発売されました。
  • ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
    ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers

    「Making Things Move!」の世界を突き詰めたい人用のステップアップのための本。行列や物理運動、2D/3D表現。Flashの本ではなく、じっくり読むタイプの本なので、あとまわしにしてもいいかも。
  • Flash 8 Essentials
    Flash 8 Essentials

    Flash8の新機能を紹介。全10章が独立した構成で、興味のある部分から読めます。フィルタやビットマップ、ビデオの使い方とかを、基礎から順を追って理解していけるので、ゼロからスクリプティングできるようになる。僕はビットマップ関連の作業の際のリファレンスとして常用しています。
  • .fla―Idea of Flash Creation
    .fla―Idea of Flash Creation

    上の本でFlash8の基本を身に付けて、それをどう面白い表現に落とし込むかを学べます。深津さんの、試行錯誤・実験しやすいスクリプティング、クラス設計に凄さを感じました。YouTubeやFlickrのAPI、PHPとの連携記事も。
  • FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]
    FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]

    ここまでで表現力が付き、テンションが上がるので、その勢いで難解なオブジェクト指向に挑戦。プログラム経験のない人がいきなり英語のOOP本を読むのは厳しい。この本で継承とかインターフェースとかポリモーフィズムとかの用語を理解しておくといいかも。
  • オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
    オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

    Flashの本ではありませんが、OOPの概念を気軽に読めるボリュームで解説してくれます。英語と日本語のOOP用語の対応を図るためにも「Object-oriented Actionscript for Flash 8」と併読するのがおすすめ。なんとなく読んでおくだけでも結構違うのでは。
  • Object-oriented Actionscript for Flash 8
    Object-oriented Actionscript for Flash 8

    前半はOOPの利便性や基本の紹介。デザインパターンやMVCの理解。13章からグッと難しくなって大変。Flash8対応。
  • Essential Actionscript 2.0
    Essential Actionscript 2.0

    上の本よりもさらにOOPプログラマ向け。同じOOP本ということでやや重複しており、こちらはMX2004時代の本なので見送ってもいいかも。分かりやすい英語で良著。この本のAS3版が出たら間違いなく買い。

Page Top