トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     Matrixのアフィン変換に関して
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
mayor
Åê¹ÆNo.36421
投稿日時: 2007-11-23 2:28
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
Re: Matrixのアフィン変換に関して
引用:
Shiiiさんは書きました:
実行環境はwinXP、Flash8、as2です。

アカウント編集」で、編集環境は書いておきましょう
プロフィール・使用環境記入のお願い


引用:
変換後の座標x'、y'は、(a=1、b=1、c=0、d=0、tx=0、ty=0なので)
x' = ax + by + tx = x + by
y' = cx + dy + ty = y;

x' = a * x + b * y + tx = x + y
y' = c * x + d * y + ty = 0
では?

引用:
(a=1、b=1、c=0、d=0、tx=0、ty=0なので)

ここは間違いではないでしょうか?

b = 1とだけしたのであれば、
(a=1、b=1、c=0、d=1、tx=0、ty=0)となり、
x' = a * x + b * y + tx = x + y
y' = c * x + d * y + ty = y
となるように思います。

どのように記述されたのか分かりませんが、

import flash.geom.Matrix;

var matrix:Matrix = new Matrix();
trace(matrix);		// (a=1, b=0, c=0, d=1, tx=0, ty=0)

import flash.geom.Matrix;

var matrix:Matrix = new Matrix();
matrix.b = 1;
trace(matrix);		// (a=1, b=1, c=0, d=1, tx=0, ty=0)


引用:
Shiiiさんは書きました:
傾斜の部分だけが実際自分で計算した数値結果と合いません・・・。

ただし、ここで一般式として提示されている式は、
OpenGL3Dプログラミング : 2次元図形とアフィン変換
などで示されている式を元にされていると思いますが、
これはy軸が上向きである前提で、
それをそのまま、y軸が下向きであるFlashにあてはめて、
おかしいと言っても、解決しないのではないかと思います。

引用:
座標でy方向への変化がないのではないかと考えております。僕の考え違いでしょうか?

Matrixって何だお? (1)

Flashで、Matrixクラスを用いた動作を確認して、
bの値によってy方向への変化がある事実から考えると、
Flashの内部的には、
x' = a * x + c * y + tx = x
y' = b * x + d * y + ty = x + y
という式で計算されていると思います。

先に挙げた「OpenGL3Dプログラミング : 2次元図形とアフィン変換」では、
回転のマトリックスが
cosθ -sinθ
sinθ cosθ
であるのに対して、
Flash 8特別セミナー - 新機能とスクリプティング - : 4. 変換行列」では、
cosθ sinθ
-sinθ cosθ
となっていることから、考えてもよいのではないかと思います。

import flash.geom.Matrix;
import flash.geom.Point;

var matrix:Matrix = new Matrix();
matrix.b = 0.5;
var pt:Point = new Point(2, 10);
var pt:Point = matrix.transformPoint(pt);
trace(pt);	// (2, 11)

/*
x = a*x + b*y = 1 * x + 0.5 * y = x + 0.5 * y
y = c*x + d*y = 0 * x + 1 * y = y

x = a*x + c*y = 1 * x + 0 * y = x
y = b*x + d*y = 0.5 * x + 1 * y = 0.5 * x + y
*/


もっと簡単な例で考えてみましょう。

一般的には、自由落下を示す式は、
h = h0 - 0.5 * g * t * t
で示すことができますが、これが、Flash では、
h = h0 + 0.5 * g * t * t
となります。
(h: 位置 / h0 : 初期位置 / g: 重力加速度 / t: 時間)

これは、おかしい、おかしくないという話ではありませんね?


----------------
質問する際は、回答者に具体的な情報を与えてください。

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   Matrixのアフィン変換に関して Shiii 2007-11-23 1:57
   » Re: Matrixのアフィン変換に関して mayor 2007-11-23 2:28
       Re: Matrixのアフィン変換に関して Shiii 2007-11-23 14:03
         Re: Matrixのアフィン変換に関して mayor 2007-11-27 19:17
           Re: Matrixのアフィン変換に関して Shiii 2007-11-27 23:50
         Re: Matrixのアフィン変換に関して Fumio 2007-11-29 1:06
           Re: Matrixのアフィン変換に関して mayor 2007-11-29 2:17
             Re: Matrixのアフィン変換に関して Fumio 2007-11-29 4:28
               Re: Matrixのアフィン変換に関して mayor 2007-11-29 4:46
           Re: Matrixのアフィン変換に関して Shiii 2007-11-29 2:42

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops