2007年1月20日星期六

4.11.转换角度计算


4.11. 转换角度计算

问题
我要计算角度及转换为合适的单位
解决办法
使用 Unit 和 Converter 类
讨论

影片剪辑的_rotation 属性使用角度计算的。如果用弧度而不是角度就有些麻烦了。首先要把弧度值转换为角度值,再赋值给 _rotation 属性,而且,大多数人喜欢用角度计算。还好,把弧度转换为角度挺容易,只要180/Math.PI.,角度转换为弧度就反一下,Math.PI/180. ,而且使用自定义的Unit 和Converter 类更简单。
这两个类都是自定义类,在ascb.unit 包中,首先创建Unit 实例,然后描述需要转换的单位类型, Unit.DEGREE, Unit.RADIAN, 和 Unit.GRADIAN 常量返回新的Unit 对象表示各种单位。Unit 对象有些属性,包括name, category, label, 和labelPlural:
var degree:Unit = Unit.DEGREE;
trace(degree.name); // 显示: degree
trace(degree.category); // 显示: angle
trace(degree.label); // 显示: degree
trace(degree.labelPlural); // 显示: degrees
使用getConverterTo( ) 方法,传递 Unit 对象作为,得到converter对象,看下面的代码得到弧度向角度转换的对象:
var converter:Converter = Unit.DEGREE.getConverterTo(Unit.RADIAN);
一旦得到Converter 实例,运行convert( ) 方法,指定值进行转换:
trace(converter.convert(90));
convertWithLabel( ) 方法输出字符串:
var converterToRadians:Converter = Unit.DEGREE.getConverterTo(Unit.RADIAN);
var converterToDegrees:Converter = Unit.RADIAN.getConverterTo(Unit.DEGREE);
trace(converterToRadians.convertWithLabel(1));
trace(converterToRadians.convertWithLabel(57.2957795130823));
trace(converterToDegrees.convertWithLabel(1));
trace(converterToDegrees.convertWithLabel(0.0174532925199433));

/*
显示:
0.0174532925199433 radians
1 radian
57.2957795130823 degrees
1 degree
*/
如果执行相反操作,使用getConverterFrom( ) 方法:
var converter:Converter = Unit.DEGREE.getConverterFrom(Unit.GRADIAN);
trace(converter.convert(100));
trace(converter.convert(23));


没有评论: