어떠한 객체를 회전운동하고 싶을 때는 원의 자취를 구하는 식을 이용하면 된다.
이는 sin과 cos을 이용하여 기본적인 삼각비를 구한다.

사용자 삽입 이미지
각 면의 길이와 각도를 아는 경우에는 삼각함수를 통해 p1의 좌표를 구할 수 있다.
sin = b/c           ->          b = sin * c : y좌표를 구할 수 있다.
cos = a/c          ->          a = cos * c : x좌표를 구할 수 있다.
그림처럼 높이 b는 y축에 관한 값을 구할 수 있고 밑변 a는 x축의 값을 구할 수 있다.



var _square:Sprite = new Sprite();
var _angle:int = 0;


_square.graphics.lineStyle(2,0x000000);
_square.graphics.beginFill( 0xF79646 )
_square.graphics.drawCircle(0,0,20);
addEventListener( Event.ENTER_FRAME , onEnter )
addChild(_square)

 

function onEnter( e:Event ):void
{
//호도각으로 변환
 var a:Number = _angle * Math.PI/180
//밑변 구하기
 _square.x = Math.cos( a) * 100 + 550/2
//높이 구하기
 _square.y = Math.sin( a ) * 100 + 200
 _angle++
}










Posted by 버터백통
두점 사이의 거리를 구하기 위해서는 피타고라스의 정리를 사용한다.
사용자 삽입 이미지
[ 피타고라스 정리 ]

그림 처럼 빗면 c의 크기를 구하기 위해서 "밑변 a의 제곱과 높이 b의 제곱을 더하면 c제곱이다."의 식을 이용한다. as3에서는 거듭제곱의 값을 구하기 위해 Math.pow( 값  , 제곱근 )를 사용한다. 따라서 피타고라스의 식을 다음과 같이 사용할 수 있겠다.
Math.pow( c , 2 ) = Math.pow( a , 2 ) + Math.pow( b , 2 )
위의 코딩은 c2 = a2 + b2와 같다. 그리고 정확한 값을 구하기 위새서는 제곱근을 구해야 한다. 제곱근을 구하는 방법은 Math.sqrt()를 사용한다. * 참고 : 제곱근(위키백과)
따라서 제곱을  하여 구한 값에 Math.sqrt()를 하여 제곱근을 구한다.
c = Math.sqrt(  Math.pow( a , 2 ) + Math.pow( b , 2 ) )

하지만 as3에서는 Point()라는 오브젝트를 상속받은 2차원 좌표계에서의 표현하는 클래스가 있다.
이것을 활용하여 거리를 구할 수 있다.



 
위의 플래시는 피타고라스 정리와 Point를 사용하여 구한 값을 비교해 보았다.
//Point.distance
var pt1:Point = new Point(p1.x , p1.y );
var pt2:Point = new Point(p2.x , p2.y );
txt1.text = String( Point.distance( pt1 , pt2 ) );
 
//피타고라스 정리
var a:Number = p2.x - p1.x;
var b:Number = p1.y - p2.y;
var c:Number = Math.sqrt( Math.pow(a,2) + Math.pow(b,2) )
txt2.text = String(c);


Posted by 버터백통

AS3에서는 각도를 일반각(degree)으로 표현한다. 하지만 Math클래스의 sin,cos등에서 계산하는 값은 라디안(radian)값을 사용한다. 따라서 이 두가지 값을 서로 변환가능하게 하여야 하는데 다행이 변환식은 쉽다.

사용자 삽입 이미지
* 각도의 변환
호도각 -> 일반각 : 값 * 180 / Math.PI;
일반각 -> 호도각 : 값 * Math.PI / 180;



Posted by 버터백통

random클래스는 임의의 난수를 추출하여 값을 반환하는 메서드이다. 사용법은 Math클래스에서 random()을 호출하면 된다.

* Math.random();
위처럼 메서드를 실행시키면 반환되는 값은 소수점 이하 15자리의 난수를 반환한다.
trace( NumberUtilities.random() )     // 출력 : 0.424370180349797

하지만 개발시 주로 사용하는 값은 정수를 많이 사용한다. 가령 "10개의 값중에 난수가 1이면 공격하라"라고 개발하였다면 10분의 1확율로 공격을 할 것이다. 난수가 0.xxxxxxxx..... 이면 공격하라...개발도 지저분 해질 것이다. 따라서 난수의 값에 연산을 하여 필요한 값을 얻어야 한다.

* 두자리 정수를  얻기위한 연산
trace( Math.random()*100 )     // 출력 : 99.72788169980049
위처럼 100을 곱하면 난수 자체가 소수점 이하의 값이므로 두자리의 정수와 소수점이하 15개의 값을 얻을 수 있다. 따라서 아래처럼 수정하여 사용 하면 정수만 추출할 수 있다.
trace( Math.floor( Math.random()*100 ) );     // 출력 99
필요한 값을 얻기 위해서 이렇게 난수에 연산과 올림/내림을 적절하게 사용하여야 한다.

* AS3에서 아쉬운 랜덤의 범위
AS 1에서는 random(10) 을 하면 0~9까지 10개의 정수중 1개를 리턴하였다. 하지만 AS3에서는 이러한 기능이 사라져 버렸다. 따라서 범위를 구하고 싶으면 따로 개발해야한다... 그러나 ascb에서는 이러한 범위를 구할 수 있는 메서드를 만들어 제공하고 있다.

NumberUtilities.random( 작은수 , 큰수 , 구간 )
가령 random(0,10) 으로 실행시키면 0~10까지의 값이 반환하고록 되어있다.
심지어 반올림까지 할 수 있도록 Interval까지 설정하게 되어있다.
 random(0,10,2)으로 설정하면 2의 곱인 값(근접하게 반올림)이 반환된다. 또는  random(0,10,10)으로 하면 0과 10의 1곱인 10만이 반환된다. 훌륭하다...
하지만 단점은 기본 기능인 소수점 이하 15개의 난수를 얻는 것이 없다..-_-;;;

기본기능을 사용하고 싶을때는 다시 Math.random()을 호출하여야 한다. util의 기능은 가급적 여러 클래스에서 불러와 사용하는 것 보다는 캡슐화된 유틸을 사용하는 것이 좋다...
그래서 기본기능을 포함한 랜덤클래스를 ascb를 활용하여 만들어 보았다.

private static var _minimum:Number;
private static var _maximum:Number;
private static var _roundToInterval:Number = 1
public static function random( minimum:Number = 0, maximum:Number = 0 ,
                                             roundToInterval:Number = 1 ):Number
{
   _minimum = minimum;
   _maximum = maximum;
   _roundToInterval = roundToInterval;

    //범위를 설정하지 않았을 때 Math.random()을 호출 그값을 반환
    //범위가 설정 되어있으면 section()을 실행하여 범위내 정수를 반환
    return ( minimum == 0 && maximum == 0 ) ?  original() : section();
}
 
//소수점 이하 난수를 반환
private static function original():Number
{
   return Math.random();
}
 
//범위에서 정수를 추출하여 반환 
private static function section():Number
{
     if(_minimum > _maximum) {
          var tmp:Number = _minimum;
          _minimum = _maximum;
          _maximum = tmp;
       }
 
       var nDeltaRange:Number = (_maximum - _minimum) + (1 * _roundToInterval);
       var nRandomNumber:Number = Math.random() * nDeltaRange;
       nRandomNumber += _minimum;
       
       return Math.floor(nRandomNumber / _roundToInterval) * _roundToInterval;
}



이 클래스는 random()만 호출시에는 기본 랜덤 메서드인 Math.random()의 반환값을 반환하고 구간을 설정하면 구간내의 값을 반환하게 되어있다. 물론 인터벌도 설정하여 설정값의 근접한 값에 반올림 하돌록 되어있다.
1) trace( NumberUtilities.random() )                                  // 출력 : 0.872785918880254
2) trace( Math.floor( NumberUtilities.random()*100 ) );        // 출력 : 66
3) trace( NumberUtilities.random(0,100,10) )                       // 출력 : 50
4) trace( NumberUtilities.random(10,20,3) )                        // 출력 : 18
5) trace( NumberUtilities.random(10,20,5) )                         //출력 : 15

2번과 3번은 세자리수 100을 제외한 같은 범주의 값을 반환한다.

Posted by 버터백통

숫자에 국가의 통화표시를 하고 싶을 때는 뭐..그냥 개발하여도 되지만 NumberFormat에 currencyFormat()라는 것이 있으니 사용법을 살펴보자...

NumberFormat을 사용하여 10,000,000,000등의 값을 마스크를 적용하여 format이라는 메서드를 통해 반환받는것을 보았다. 반환시에 국가의 통화기호를 자동으로 붙여서 반환하도록 하기 위해서는 currencyFormat()를 사용하는데 format과 마찬가지로 국가를 선택하여야 한다. 국가가 없을 때는 심볼을 바꾸어 표시한다.

var numberFormat:NumberFormat = new NumberFormat( );
trace( numberFormat.currencyFormat(10000) )      // 출력 : €10,000.00
이처럼 currencyFormat을 사용하면 format()처럼 그루핑과 소수점을 분리하는데 앞이나 뒤에 국가의 화폐기호를 붙여준다. 위의 코드에서는 국가를 정하지 않았기 때문에 switch의 default인 " €(\u20AC) "를 출력하게 되었다. 따라서 국가 Locale을 정해서 넘겨야한다.

trace( numberFormat.currencyFormat(10000 , new Locale(Locale.KOREA) ) )
// 출력 : 10,000.00원

숫자뒤에 오는 파라미터에 국가를 설정하면 해당국가에 맞추어서 금액을 출력한다.
* 위의 결과는 한국에 맞게 NumberFormat와 Locale을 아래와 같이 수정하였습니다.
외국에서 만든 라이브러리 이므로 받아서 각자 수정해서 사용하도록 자리만 잡아두고 있어 정확한 화폐단위가 출력 되지 않습니다. 따라서 Locale클래스에 우리나라 국가를 추가하였다

...Loacle클래스
public static const KOREA:String = "kr";

그리고 NumberUtilities클래스의 case문에서 우리나라에 해당하는 자리를 수정하였다.
....NumberFormat
 case "kr":      
 // 원래 sv라는 족보도 없는 기호로 우리 국가명이 검색되었었다..이를 kr로 수정하였다.

          oSymbols.currency = "원";        
         // 이곳에 kr이라는 화폐기호가 있었다. 이것을 "원"으로 수정하였다

          oSymbols.group = bCurrency ? "," : " ";
          oSymbols.decimal = ".";
          oSymbols.before = false;
          break;
이처럼 수정하였다면 Locale.KOREA로 국가를 설정할 수 있다.

수정하기 싫으신 분들이나 1번정도만 다른  기호를 보여주어야 할 때 오브젝트를 통해 값을 그때 그때 마다 수정할 수 있다.

trace( numberFormat.currencyFormat(10000 ,
{ group:"," , decimal:"." , currency:"원" , before : false } ) )
// 출력 : 10,000.00원

두번째 파라미터에 오브젝트를 넘겨 각 심벌을 교체한다. currency는 화폐기호나 특정 심볼을 적으면 되고
before는 true이면 기호가 숫자앞에 위치하고 false면 숫자 뒤에 위치한다.

* format()과 심벌의 수정, 숫자의 mask를 알아보려면
NmberFormat 클래스를 이용한 공백이나 0의 삽입을 참고하면 된다



Posted by 버터백통

금융권이나 결제프로세스 등을 개발할 때 1000원이라는 단위를 표현하기 위해서는 1,000 이라고 뒤에서 부터 3개의 수를 끊고 " , " 컴머로 그룹을 만들어 준다. 또는 정확한 수를 표현하기 위하여 소수점을 섞어서 표현하기도 한다.

가령 1,234.56과 같은 수가 있다. 이처럼 통상적으로 소수점을 표현하거나 컴머로 그룹핑을 하는 것은 AS3에서 제공되지 않는다( 콜드퓨전에서는 제공한다. ) 따라서 이 역할만 전문적으로 전담하는 클래스(수의 단위를 표현하는 기능)가 있어야 한다.
여기서는 ascb의 라이브러리에서 util패키지에 NumberFormat 이라는 클래스를 활용하여 본다.

통상적으로 소수점 4자리까지 표현하고 만단위 까지 그룹핑하여 보여주고 싶다면 NumberFormat()의 생성자에서 마스크를 설정하여도 되고 mask라는 메서드로 접근하여 설정하여도 된다.
(mask는 setter/getter로 이루어져 있다)

* 수의 형태나 그루핑을 정하는 mask
마스크에서 파운드기호(#)는 어떠한 수나 공백으로 채워질 공간이고 ,는 그루핑하는 자리이다. 0은 숫자나 0으로 채워지도록 개발되어 있다.

* 마스크의 상수
0 : 숫자나 0으로 자리를 재워준다.
# : 숫자나 공백으로 자리를 채워준다.
. : 소수점의 공간이다.
, : 숫자를 그룹핑 한다.


##,###.000 이라는 마스크에 12345라는 수를 대입하면 결과는 12,345를 표현하게 된다.
또 1.2345를 대입하면 1.2345로 표현되고 1234.5를 대입하면 1,234.5로 표현된다.
12345      -> 12,345
1.2345     -> 1.2345
1234.5     -> 1,234.5


NumberFormat은 변수에 위임하여 생성한다.
var numberFormat:NumberFormat = new NumberFormat( "##,###.000" );
마스크는 생성자에서 설정하거나 또는 생성 후 mask 메서드를 통해 설정이나 수정할 수 있다.
numberFormat.mask = "#,###.00";
위와 같이 마스크를 ##.00으로 설정한 다음 아래와 같이 테스트한다.
trace(numberFormat.format( 1 ));                // 출력 : 1,00
trace(numberFormat.format( 12 ));              // 출력 : 12,00
trace(numberFormat.format( 123 ));            // 출력 : 123,00
trace(numberFormat.format( 1234 ));           // 출력 : 1.234,00
trace(numberFormat.format( 12345 ));         // 출력 : 1.2345,00


위의 출력 값을 보면 무언가 어색하다. 이는 프랑스나 스페인등에서 사용하는 통화 형식으로 우리와는 느낌이 다르다. 따라서 라이브러리에 Locale.slanguage라는 싱글턴 클래스로 접근하여 언어형식을 정한다. 상수는 Locale을 치고 코드힌트를 참고한다.

var numberFormat:NumberFormat = new NumberFormat( );
numberFormat.mask = "#,###.00";
Locale.slanguage = Locale.ENGLISH;
trace(numberFormat.format( 1 ));               // 출력 : 1.00
trace(numberFormat.format( 12 ));              // 출력 : 12.00
trace(numberFormat.format( 123 ));            // 출력 : 123.00
trace(numberFormat.format( 1234 ));           // 출력 : 1,234.00
trace(numberFormat.format( 12345 ));         // 출력 : 1,2345.00

trace(numberFormat.format( 12.3 ));            // 출력 : 12.30
trace(numberFormat.format( 123.4 ));           // 출력 : 123.40
trace(numberFormat.format( 1234.5 ));         // 출력 : 1,234.50


* 심벌 기호를 바꾸고 싶다
그루핑을 하는 " , " 심벌과 소수점을 표시하는 " . " 심벌은 다른 심벌로 교체가 가능하다.
var numberFormat:NumberFormat = new NumberFormat( );
trace(numberFormat.format( 1234567.89 , { group:" 컴머 " , decimal:" 점 " } ) ); 
// 출력 : 1 컴머 234 컴머 567 점 89

trace(numberFormat.format( 1234567.89 , { group:" * " , decimal:" ? " } ) );
 
// 출력 : 1 * 234 * 567 ? 89

delegate 객체에서 format을 정할 때 두번 째 파라미터의 값인 오브젝트를 통해
그룹을 정하는 group의 기호를 문자열로 선언하고, 소수점을 구분하는 기호인 decimal의 값도 문자열로
재선언하면 선언된 심벌로 교체하여 값을 보여준다.


AS3 cookbook이라는 사이트에서 이러한 라이브러리를 제공하고 있다.
라이브러리 다운로드

Posted by 버터백통
Math클래스에는 수를 반올림이나 올림 내림등을 제공하는 floor(내림) , ceil(올림) , round(반올림,반내림)를 제공한다. 앞서 Math클래스의 메서드를 살펴보았지만 소수점의 이동이나 5가 아닌 다른 값의 근접한 수로 반올림 또는 반내림 하고 싶을 때 약간의 연산이 필요하다.

* 소수점 자리의 값을 반올림 하고 싶다.
Math.round를 사용하면 소수점의 첫째 자리의 값이 5이상이면 반올림하고 5보다 적으면 반내림을 한다.
trace( Math.round( 25.5525 ) )     // 출력 : 26


그러나 소수점 두자리에서 끊어서 반올림하고 싶을 때는 소수점 이하 두자리 ".01"의 값으로 연산한다. 1은 곱하거나 나누어도 원래의 값을 반환한다는 것을 기억하자.
* 추억의 산수
- 300 / 1 = 300
- 300 * 1 = 300
- 300 / 0.1 = 3000 (소수가 없도록 제수(분자)와 피제수(분모)에 10의 거듭제곱을 곱한다)
- 300 * 0.1 = 30 (소수점 이하가 1자리 있으므로 300끝에 1자리 소수점이 붙는다. 30.0 )
위에서 보면 소수점 이하 n자리를 나누면 제수는 n개 만큼 뒤에 수가 붙고 소수점이하 n자리를 곱하면 제수의 단위는 n개 만큼 축소한다.

trace( Math.round( 25.5525 ) )     // 출력 : 26
위의 결과를 소수점 두자리에서 끊어서 연산하고 싶다면 아래와 같이 코딩한다.

trace( Math.round( 25.5525 / .01 ) * .01 )     // 출력 : 25.55
- ( 25.5525 / .01 ) 에서 10의 거듭제곱을 한 값인 2555.25를얻게 되고 .25는 5보다 적으므로 반내림한다.
따라서 Math.round( 25.5525 / .01 )는 2555를 반환하고 그 값에 .01을 곱하여 다시 2두리의 소수점의 값을 얻어낸다.



* 근접한 수가 5가 아닌 다른 수로 정하고 싶다
round()는 5를 기준으로 반내림이나 반올림을 한다.하지만 5가 아닌 다른 수로 반내림이나 올림을 하고 싶을 때는 위와 같은 방법으로 정수를 사용한다.

trace( Math.round( 25 / 6 ) * 6 )     // 출력 : 24
- 25의 1자리 수가 6을 넘지 못했으므로 값은 24를 출력한다. 25를 6으로 분해하면 4.16의 값이 나온다. 6에 관하여 쪼개진 값을 반올림하면 4이고 다시 6을 곱하여 분해전의 값으로 복원한다.

trace( Math.round( 25 / 10 ) * 10 )    // 출력 : 30
- 방식은 위와 같고 자리수가 두자리인 10이다. 따라서 반올림과 내림의 기준을 10씩 끊어서 확인할 수 있다.

trace( Math.round( 30/ 10 ) * 10 )    // 출력 : 30

trace( Math.round( 25 / 100 ) * 100 )    // 출력 : 0
- 같은 방식이고 얻어진 값이 소수점이하 0.25 이를 다시 반올림하면 0이고 100을 곱하여도 0이다. 즉 100씩 끊어서 반올림이나 반내림을 하는 것이다.



Posted by 버터백통
개발시 특히 AS3로 개발하는 것은 보통 UI나 front 단계가 많이 있다... 앞으로 Math를 변형하거나 개량한 NumberUtilies클래스에 들어가기게 앞서 Math클래스를 간단하 살펴보고 넘어가도록 한다.
Math클래스는 상수로서 어디서든 delegate없이 사용이 가능하며 수학적 함수나 값을 표현하는 메서드들로 구성되어있다.

* 라디안 값을 계산하려면 다음 공식을 사용합니다.
  radians = degrees * Math.PI/180


* 라디안에서 각도를 계산하려면 다음 공식을 사용합니다.
  degrees = radians * 180/Math.PI
 
다음 예제에서는 45도 각도의 사인을 계산하기 위해 수식을 매개 변수로 전달합니다.
Math.sin(45 * Math.PI/180) 이 공식은 Math.sin(.7854) 공식과 같습니다.

참고: Math 함수 acos, asin, atan, atan2, cos, exp, log, pow, sin 및 sqrt는 CPU 또는 운영 체제에 사용되는 알고리즘에 따라 결과 값이 조금씩 다를 수 있습니다. Flash Player에서는 CPU(CPU가 부동 소수점 계산을 지원하지 않는 경우 운영 체제)를 호출하여 이러한 함수를 계산하므로 사용 중인 CPU 또는 운영 체제에 따라 결과가 약간 달라집니다.

[ 메서드 ]
abs(val:Number):Number

[static]
매개 변수 val에 의해 지정된 숫자의 절대값을 계산하고 반환합니다.
trace( Math.abs(25.55) )    //  출력 : 25.55
trace( Math.abs(-25.55) )   // 출력 : 25.55


ceil(val:Number):Number
[static]
지정된 숫자나 표현식의 올림값을 반환합니다.
trace( Math.ceil( 10.01 ) )   // 출력 : 11

floor(val:Number):Number
[static]
매개 변수 val에 지정된 숫자 또는 표현식의 내림값을 반환합니다.
trace( Math.floor( 10.99 ) )   // 출력 : 10

exp(val:Number):Number
[static]
자연 로그의 밑수(e)를 매개 변수 x에 지정된 지수로 거듭제곱한 값을 반환합니다.

log(val:Number):Number
[static]
매개 변수 val의 자연 로그를 반환합니다.

max(val1:Number, val2:Number, ... rest):Number
[static]
val1과 val2 또는 더 많은 값을 평가하고 가장 큰 값을 반환합니다.
trace( Math.max( 0 , 10 , 55 , 16 , 50) )   // 출력 : 55

min(val1:Number, val2:Number, ... rest):Number
[static]
val1과 val2 또는 더 많은 값을 평가하고 가장 작은 값을 반환합니다.
trace( Math.min( 0 , 10 , 55 , 16 , 50) )   //출력 : 0

pow(val1:Number, val2:Number):Number
[static]
val1을 val2만큼 거듭제곱한 값을 계산하여 반환합니다.
trace( Math.pow( 2 , 1) )    // 출력 : 2
trace( Math.pow( 2 , 2) )    // 출력 : 4
trace( Math.pow( 2 , 3) )    // 출력 : 8
trace( Math.pow( 2 , 4) )    // 출력 : 16


random():Number
[static]
0 <= n < 1인 경우 의사 난수 n을 반환합니다. 이전에는 값의 범위를 정하여 0부터 값까지의 값을 정수로 반환하였으나 지금은 소수점 포함 16자리수의 난수로 반환한다. 따라서 필요한 값을 얻기위해서는 적절한 연상을 하여야 한다.
var num:Number = Math.random(  )  * 100
trace( num )    // 출력 : 89.60435190238059
trace( Math.round( num) )    // 출력 : 90


round(val:Number):Number
[static]
매개 변수 val의 값을 가장 가까운 정수로 반올림하여 반환합니다.
trace( Math.round( 10.90) )    // 출력 : 11
trace( Math.round( 10.5) )    // 출력 : 11
trace( Math.round( 10.49) )    // 출력 : 10
trace( Math.round( 10.10) )    // 출력 : 10


sqrt(val:Number):Number
[static]
지정된 숫자의 제곱근을 계산하여 반환합니다.
trace( Math.sqrt( 4 ) )     // 출력 : 2
trace(2 * 2 )                  // 출력 : 4
trace( Math.sqrt( 10 ) )                                                                  // 출력 : 3.1622776601683795
trace( Math.round( 3.1622776601683795 * 3.1622776601683795 ) )          // 출력 : 10


sin(angleRadians:Number):Number
[static]
지정된 각도의 사인을 라디안 단위로 계산하여 반환합니다.

cos(angleRadians:Number):Number
[static]
지정된 각도의 코사인을 라디안 단위로 계산하여 반환합니다.

tan(angleRadians:Number):Number
[static]
지정된 각도의 탄젠트를 계산하여 반환합니다.

asin(val:Number):Number
[static]
매개 변수 val에 지정된 숫자의 아크사인을 라디안 단위로 계산하여 반환합니다.
trace( Math.asin( -1 ) * 180/Math.PI );   // 출력 : -90
trace( Math.asin( 0 ) * 180/Math.PI );   // 출력 : 0
trace( Math.asin( 1 ) * 180/Math.PI );   // 출력 : 90


acos(val:Number):Number
[static]
매개 변수 val에 지정된 숫자의 아크코사인을 라디안 단위로 계산하여 반환합니다.
trace( Math.acos( -1 ) * 180/Math.PI );   // 출력 : 180
trace( Math.acos( 0 ) * 180/Math.PI );   // 출력 : 90
trace( Math.acos( 1 ) * 180/Math.PI );   // 출력 : 0


atan(val:Number):Number
[static]
매개 변수 val에 지정된 탄젠트 값에 해당하는 각도를 라디안 단위로 계산하여 반환합니다.


atan2(y:Number, x:Number):Number
[static]
y/x 점의 각도를 라디안 단위로 계산하여 반환합니다. 각도를 측정할 때는 원의 x 축에서부터 반시계 방향으로 측정합니다. 0,0은 원의 중심을 나타냅니다.
trace( Math.atan2( 100 , 100 )* 180/Math.PI );   // 출럭 : 45

[ 상수 ]
E : Number = 2.71828182845905
[static]
자연 로그의 밑수에 대한 수학 상수이며 e로 표현됩니다.

LN10 : Number = 2.302585092994046
[static]
10의 자연 로그에 대한 수학 상수입니다. 이 상수는 loge10으로 표현되며 근사값은 2.302585092994046입니다.

LN2 : Number = 0.6931471805599453
[static]
2의 자연 로그에 대한 수학 상수입니다. 이 상수는 loge2로 표현되며 근사값은 0.6931471805599453입니다.

LOG10E : Number = 0.4342944819032518
[static]
밑수가 10인 상수 e(Math.E)의 로그에 대한 수학 상수입니다. 이 상수는 log10e로 표현되며 그 근사값은 0.4342944819032518입니다.

LOG2E : Number = 1.442695040888963387
[static]
밑수가 2일 때 상수 e의 로그(log2e)에 대한 수학 상수이며 근사값은 1.442695040888963387입니다.

PI : Number = 3.141592653589793
[static]
원주율에 대한 수학 상수입니다. 이 상수는 pi로 표시되며 값은 3.141592653589793입니다.

SQRT1_2 : Number = 0.7071067811865476
[static]
1/2의 제곱근에 대한 수학 상수이며 근사값은 0.7071067811865476입니다.

SQRT2 : Number = 1.4142135623730951
[static]
2의 제곱근에 대한 수학 상수이며 근사값은 1.4142135623730951입니다.


Posted by 버터백통
서로 다른 타입의 진수를 변환하고 싶을 때는 toString()메소드와 parseInt()를 이용한다. parseInt()는 문자를 Int형태의 숫자로 변환하고 toString()은 수를 문자형태로 변환한다.

parseInt( 숫:String , radix )
두개의 파라미터가 있는데 첫째는 변환할 문자형 숫자이며 두번째는 radix라는 진수표현값을 넣는다. 10진수이면 10(기본 0으로 잡혀있는데 이는 10진수로 표현한다.)이고 16진수이면 16을 입력한다.
trace(  parseInt("11111111",2)) // 출력 : 255
trace(  parseInt("ff",16))  // 출력 : 255


toString( radix )
radix를 제공하는 메서드를 사용하면 같은 방법으로 진수를 인자로 정하면 된다.
toString(10)은 10진수로 표현 toString(2)는 이진수로 표현 toString(16)은 16진수로 표현한다.
trace( int(255).toString(2) ) //출력 : 11111111
trace( int(255).toString(16) ) // 출력 : ff

Posted by 버터백통
액션스크립트 3.0에서는 3가지의 수를 제공한다.
첫째로 모든 실수를 표현하는 Number가 있고 정수(음수포함)를 표현하는 int (integers)와 마지막으로 양의 정수만 표현하는 uint (unsigned integers)가 있다.
그리고 이들은 모두 10진수 형태로 표현하게 된다.

수를 표현하는 방법에는 2진수와 8진수 10진수 16진수 등이 있는데 2진수는 0,1로만 표현한다. 영화 매트릭스에 보면 이런거 많이 나온다. 8진수는 0~7의 수로 표현한다. 10진수는 우리가 일상에서 사용하는 수의 표현과 같고 16진수는 앞에 0x 가 붙어서 표현한다. 0~9가지 표현하고 A~F로 나머지 10이상의 값을 표현한다.

이진수로서 나름 가장 큰 값을 표현하면 0보다는 1이고, 1111은 16진수의 F(10진수로는 15)와 같다.
색상의 범위에서 흰색의 값이 0xFFFFFF이면 R=255 , G=255 , B=255이다. 16진수로(0xRRGGBB) 흰색은 0xFFFFFF이고 이진수로는 11111111이 16진수에서 FF(10진수로는 255)이다.
따라서 이진수 4개는 하나의 16진수가 된다.

* 컴퓨터에서는 항상 수를 셀때 0부터 세게된다. 따라서 8진수는 0부터 8번째인 7이 마지막 숫자이며 16진수는 0~9 가지 10개를 표현하고 나머지 6개는  A B C D E F로 표현한다.


Posted by 버터백통