简单的as布局算法(包括 圆形,椭圆,弧形)
来源:互联网 发布:阿迪达斯三叶草鞋 淘宝 编辑:程序博客网 时间:2024/06/05 04:08
最近工作需要在学习Flash 编程 工作主要涉及到的是一些元素之间关联连线,布局等算法。经过一段时间的摸索。总结了以下几种项目中常用的算法。废话不多说了。看码.
package com.triman.layout
{
import flash.geom.Point;
/**
* 布局算法 常用的布局算法有
* 圆形布局 ,扇形布局 椭圆布局等。
* 其中圆布局是椭圆布局的一种特例。
* 所以椭圆布局继承了椭圆布局算法
* 而 椭圆布局是弧形的一种特例。
*
* +Round
* +Ellipse
* +Camber
* 这个是一个布局的抽象类 所有的布局算法都是继承它的。
* */
public class LayOut
{
//布局的类型
protected var type:String ;
//要布局的对象数据数组
protected var layoutEls:Array;
//布局中心点位置
protected var centerPoint:Point;
//分布开始角度 默认0度开始分布
protected var startAngle:Number = 0 ;
//每个元素之间的角度间隙
//通过计算得到
protected var disAngle:Number ;
public function layout():void{
// implements by child class ;
}
}
}
{
import com.triman.utils.Tools;
import flash.display.DisplayObject;
import flash.geom.Point;
//圆形布局
public class CircleLayOut extends LayOut
{
//半径 因为X Y 方向半径都是一样的
//为了让这个变量可以让椭圆使用 所以使用 radiusX 好和 radiusY对应
protected var radiusX:Number;
public function CircleLayOut(centerPoint:Point,groupEls:Array,startAngle:Number,radius:Number)
{
this.centerPoint = centerPoint
this.layoutEls = groupEls;
this.startAngle = startAngle;
this.radiusX = radius;
}
override public function layout():void{
var len:Number = this.layoutEls.length
this.disAngle = 360 / len;
for(var i:int=0;i<len;i++){
var tempRaian:Number = Tools.angle2Radian(this.startAngle);
var node:DisplayObject = this.layoutEls[i] as DisplayObject;
node.x = this.centerPoint.x + Math.cos(tempRaian)*this.radiusX;
node.y = this.centerPoint.y + Math.sin(tempRaian)*this.radiusX;
//角度增加
this.startAngle+=this.disAngle;
}
}
}
}
{
import com.triman.utils.Tools;
import flash.display.DisplayObject;
import flash.geom.Point;
//椭圆布局 是圆形布局的一种特殊表现
//区别在于具有 x y 两个方向的半径
public class EllipseLayOut extends CircleLayOut
{
//Y方向半径
protected var radiusY:Number;
public function EllipseLayOut(centerPoint:Point,groupEls:Array,startAngle:Number,radiusX:Number,radiusY:Number)
{
super(centerPoint,groupEls,startAngle,radiusX);
this.radiusY = radiusY;
}
//布局算法 基本和圆形一样
override public function layout():void{
var len:Number = this.layoutEls.length;
this.disAngle = 360/len;
for(var i:int=0;i<len;i++){
var tempRaian:Number = Tools.angle2Radian(this.startAngle);
var node:DisplayObject = this.layoutEls[i] as DisplayObject;
node.x = this.centerPoint.x + Math.cos(tempRaian)*this.radiusX;
node.y = this.centerPoint.y + Math.sin(tempRaian)*this.radiusY;
//角度增加
this.startAngle+=this.disAngle;
}
}
}
} package com.triman.layout
{
import com.triman.utils.Tools;
import flash.display.DisplayObject;
import flash.geom.Point;
//扇形布局
public class CamberLayOut extends EllipseLayOut
{
//分布范围 如果90那么就是指从startAngle 开始到angelRange 这样以一个范围
protected var angelRange:Number;
public function CamberLayOut(centerPoint:Point,groupEls:Array,startAngle:Number,radiusX:Number,radiusY:Number,angelRange:Number)
{
this.type = "CamberLayOut";
super(centerPoint,groupEls,startAngle,radiusX,radiusY);
this.angelRange = angelRange;
}
override public function layout():void{
var len:Number = this.layoutEls.length;
this.disAngle = this.angelRange / len;
for(var i:int=0;i<len;i++){
var tempRaian:Number = Tools.angle2Radian(this.startAngle);
var node:DisplayObject = this.layoutEls[i] as DisplayObject;
node.x = this.centerPoint.x + Math.cos(tempRaian)*this.radiusX;
node.y = this.centerPoint.y + Math.sin(tempRaian)*this.radiusY;
//角度增加
this.startAngle+=this.disAngle;
}
}
}
}
- 简单的as布局算法(包括 圆形,椭圆,弧形)
- Android简单的绘制 矩形 圆形 弧形 和直线
- 纯css画各种图形,包括基本的矩形、圆形、椭圆、三角形、多边形,也包括稍微复杂一点的爱心、钻石、阴阳八卦等
- android自定义的弧形进度条和圆形进度条-SemicircleProgress
- 图像的绘制 直线 椭圆 圆形 多边形
- 椭圆的生成算法
- 椭圆的生成算法
- css样式布局的椭圆
- java拓扑圆形布局算法
- 【转载】ios--弧形动画 椭圆动画
- QMUI-Android的一些尝试(圆形进度条、Loading、圆形图片、圆形按钮、椭圆图片)
- 椭圆的中点生成算法
- 中点椭圆算法的实现
- ios-矩形-圆角矩形-椭圆-圆形的绘制
- Android自定义View绘制圆形、方形、弧形、球形四种形态的模仿下载进度条
- 简单的圆形头像
- 简单的圆形三角形
- 自定义绘制圆形和弧形进度条
- Linux 平台下多线程编程的高效开发经验
- jquery livequery
- Activator.CreateInstance(T) 方法
- CxImage类库使用说明
- Nutch在Eclipse上的开发调试环境配置手册
- 简单的as布局算法(包括 圆形,椭圆,弧形)
- c++中system()函数的用处[转自http://blog.educity.cn/user7/50901/archives/2010/33686.html]
- nod32拦截端口
- TFS2010 权限说明
- Oralce常用SQL指令集
- vector在JAVA
- Nginx下alias支持PHP的问题解决
- sql面试题1 收藏
- .net实现远程获取其他网站页面内容