| | 248 | } |
|---|
| | 249 | |
|---|
| | 250 | /** |
|---|
| | 251 | * 指定のマトリックスオブジェクトから Matrix.createBox の逆算を行います。 |
|---|
| | 252 | * getRotateFromMatrix や getScaleFromMatrix で得られる結果とは異なりますので注意してください。 |
|---|
| | 253 | * |
|---|
| | 254 | * @param mt 対象となるマトリックスオブジェクト |
|---|
| | 255 | * @return scaleX, scaleY, rotation, x, y のプロパティを持つオブジェクト |
|---|
| | 256 | * 得られた結果オブジェクトは toString() で内容を確認用の文字列に変換します。 |
|---|
| | 257 | */ |
|---|
| | 258 | public static function degradeBox(mt:Matrix):Object |
|---|
| | 259 | { |
|---|
| | 260 | var t:Number = mt.a * mt.d - mt.b * mt.c; |
|---|
| | 261 | var sx:Number = Math.sqrt(mt.a * mt.a + mt.c * mt.c); |
|---|
| | 262 | var sy:Number = t / sx; |
|---|
| | 263 | var angle:Number = Math.acos( mt.a / sx ); |
|---|
| | 264 | var obj = { scaleX:sx , scaleY:sy, rotation:angle, x:mt.tx, y:mt.ty }; |
|---|
| | 265 | obj.toString = function():String { |
|---|
| | 266 | return "(scaleX="+this.scaleX+" , scaleY="+this.scaleY+ |
|---|
| | 267 | ", rotation="+this.rotation+", x="+this.x+", y="+this.y+")"; |
|---|
| | 268 | } |
|---|
| | 269 | return obj; |
|---|
| 313 | | var sx:Number = Math.sqrt(target.a * target.a + target.b * target.b); |
|---|
| 314 | | var sy:Number = Math.sqrt(target.c * target.c + target.d * target.d); |
|---|
| 315 | | var angle:Number = Math.acos( target.a / sx ); |
|---|
| 316 | | if (target.b < 0) angle *= -1; |
|---|
| 317 | | var tx:Number = target.tx; |
|---|
| 318 | | var ty:Number = target.ty; |
|---|
| 319 | | return "(scaleX=" + sx + " , scaleY=" + sy + |
|---|
| 320 | | ", rotation=" + angle + ", x=" + tx + ", y=" + ty + ")"; |
|---|
| | 336 | return degradeBox(target).toString(); |
|---|