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

パスワード:


パスワード紛失

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

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ひろゆき
Åê¹ÆNo.36547
投稿日時: 2007-11-29 4:46
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Matrixのアフィン変換に関して
引用:
野中文雄さんは書きました:
影響すると考えられるのは、つぎの4図でしょうか。

あぁ、回転もですか!


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

野中文雄
Åê¹ÆNo.36545
投稿日時: 2007-11-29 4:28
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Matrixのアフィン変換に関して
影響すると考えられるのは、つぎの4図でしょうか。



引用:
ひろゆきさんは書きました:
引用:
野中文雄は書きました:
ヘルプにおける変換行列のbとcの位置は逆だと思います。

すると、Matrix (flash.geom.Matrix) での図の間違いは3箇所でしょうか。

変換行列は、もともと以下のように定義されることが多かったようです。


Understanding the Transformation Matrix in Flash 8」より引用

Flashのヘルプがその定義を変えた際、上記の行列との混同が生じたもののように見受けられます。


----------------
 

Shiii
Åê¹ÆNo.36535
投稿日時: 2007-11-29 2:42
新米
居住地:
投稿: 6
使用環境:
WinXP, Flash 8
Re: Matrixのアフィン変換に関して
野中さん、ひろゆきさん
お返事ありがとうございます。

やっと疑問が晴れました
一応、昨日アドビには質問してみたのですが、
返事がまだないので返事があり次第、ここに自己レスさせていただきます。

とにもかくにも、とても助かりました。
ありがとうございました!!!
ひろゆき
Åê¹ÆNo.36530
投稿日時: 2007-11-29 2:17
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Matrixのアフィン変換に関して
引用:
野中文雄さんは書きました:
ヘルプにおける変換行列のbとcの位置は逆だと思います。

すると、Matrix (flash.geom.Matrix) での図の間違いは3箇所でしょうか。

Matrixって何だお? (1)」# 4箇所修正。


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

野中文雄
Åê¹ÆNo.36528
投稿日時: 2007-11-29 1:06
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: Matrixのアフィン変換に関して
ヘルプにおける変換行列のbとcの位置は逆だと思います。


Matrix (flash.geom.Matrix)


参考: senocular.com「Understanding the Transformation Matrix in Flash 8
引用:
Shiiiさんは書きました:
ひろゆきさんがおっしゃるように、Flashで実行される結果から、
引用:
x' = a * x + c * y + tx = x
y' = b * x + d * y + ty = x + y

が正しいと思っています。
...[中略]...
上のx'、y'が成り立つためには、
|a c tx|
|b d ty|
|0 0 1 |
となると思っています…


----------------
 

Shiii
Åê¹ÆNo.36511
投稿日時: 2007-11-27 23:50
新米
居住地:
投稿: 6
使用環境:
WinXP, Flash 8
Re: Matrixのアフィン変換に関して
ひろゆきさん
再度お返事ありがとうございます。

正直なところ、提示していただいた図が間違っているのではないのかと思っています。。。skxとskyが逆なのではないかと思っています。そうであれば今回質問させていただいた疑問が解けるのですが・・・。

ただ、まだ行列の知識が乏しいので、公式のようなものが存在するのかと色々調べています。(例えば、2行1列、または1行2列の値どちらかに-1をかけた場合[スクリーン座標ではy座標の正の向きが反転しているため]それぞれの値を入れ替えることができるなど・・・推論ですが)

アドビのサポートに質問するほうが筋でしょうか
ひろゆき
Åê¹ÆNo.36497
投稿日時: 2007-11-27 19:17
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: Matrixのアフィン変換に関して
引用:
Shiiiさんは書きました:
上のx'、y'が成り立つためには、
|a c tx|
|b d ty|
|0 0 1 |
となると思っています…

であれば、
引用:
Shiiiさんは書きました:
x' = ax + by + tx = x + by
y' = cx + dy + ty = y;
となり、座標でy方向への変化がないのではないかと考えております。
というのではなく、

Matrix (flash.geom.Matrix)

Matrix (flash.geom.Matrix)


の「図」が間違っているということですね。


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

Shiii
Åê¹ÆNo.36431
投稿日時: 2007-11-23 14:03
新米
居住地:
投稿: 6
使用環境:
WinXP, Flash 8
Re: Matrixのアフィン変換に関して
ひろゆきさん
さっそくのお返事ありがとうございます!いつもサイト拝見させていただいてます
アカウント編集しました。それと、ご指摘いただいたように、質問の仕方がかなり悪かったです。すみません。

ひろゆきさんがおっしゃるように、Flashで実行される結果から、
引用:
x' = a * x + c * y + tx = x
y' = b * x + d * y + ty = x + y

が正しいと思っています。

ただ、FlashのヘルプでMatrixの項を見ると、
|a b tx|
|c d ty|
|0 0 1 |
と、なっていました。(行列式の記述みたいですが行列を表してることとさせてください。)
上のx'、y'が成り立つためには、
|a c tx|
|b d ty|
|0 0 1 |
となると思っています…

行列の合成で、前項と後項の入れ替えて、行と列の反転させるなど色々試してみたのですが、Flashのマニュアルにある数の並びからは、
|x'| |a b tx||x|
|y'|=|c d ty||y|
|1 | |0 0 1 ||1|
で、せん断だけがうまく定義できませんでした。
y座標の方向の違いによる、重力加速度の方向や、
回転方向の正の向きは理解できるのですが、そこだけどうも理解できません。

オーサリングというよりも、どちらかというと行列の仕組みの質問のようになってしまい申し訳ないです。
ひろゆき
Åê¹ÆNo.36421
投稿日時: 2007-11-23 2:28
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
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: 時間)

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


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

Shiii
Åê¹ÆNo.36419
投稿日時: 2007-11-23 1:57
新米
居住地:
投稿: 6
使用環境:
WinXP, Flash 8
Matrixのアフィン変換に関して
こんにちは。
最近Matrixを習得ついでに行列について勉強し始めたのですが、
Matrixのアフィン変換の傾斜(せん断)について、
なかなか理解できないことがあるので質問させていただきました
実行環境はwinXP、Flash8、as2です。

Flashでは、Matrixのプロパティとしてa、b、c、d、tx、tyが用意されていますが、MovieClip.transform.matrixに変形用Matrixを適用後の表示で、傾斜の部分だけが実際自分で計算した数値結果と合いません・・・。

Flash付属のヘルプ、またはガイドを見るとMatrix.bがy方向への傾斜に関する値と記述されているのですが、x方向ではないのかと考えてます。

例えば、_x=_y=0、_width=_height=100、_xscale=_yscale=100、_rotation=0のMovieClipがあり、MovieClip.transform.matrix.b=1(正確な記述は省かせていただきます)とした場合、変換後の座標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;
となり、座標でy方向への変化がないのではないかと考えております。僕の考え違いでしょうか?

図表もなく申しわけないですが、ご存知の方どうぞよろしくお願いします。


スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ

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