• 动态绘制扇形实例


    动态绘制扇形实例:

    /****
    * DrawSectorTest
    * 动态绘制扇形实例(拖拽绘制)
    ****/
    package fengzi.drawing
    {
    	import flash.display.Shape;
    	import flash.display.Sprite;
    	import flash.events.MouseEvent;
    
    
    	public class DrawSectorTest extends Sprite
    	{
    		private var _sector:Sprite;
    		private var _dragSp:Sprite;
    		private var _radian:Number;//弧度
    		private var _radius:uint;//半径
    		private var _angle:Number;//初始角度
    
    		/***
    		* DrawSectorTest     构造
    		* @param             radius     半径
    		* @param             angle      初始角度
    		***/
    
    		public function DrawSectorTest(radius:uint=100,angle:Number=60)
    		{
    			_radius=radius
    			_angle=angle
    			_sector = new Sprite();
    			_dragSp = new Sprite();
    			_sector.x = _dragSp.x = stage.stageWidth * 0.5;
    			_sector.y = _dragSp.y = stage.stageHeight * 0.5;
    			this.addChild(_sector);
    			this.addChild(_dragSp);
    
    
    			_dragSp.graphics.beginFill(0,.2);
    			_dragSp.graphics.drawRect(0,-5,_radius,10);
    			_dragSp.graphics.endFill();
    
    			drawSector(_sector,0,0,_radius,_angle,0);
    			_dragSp.rotation = _angle;
    			_dragSp.addEventListener(MouseEvent.MOUSE_DOWN,onDragDown);
    		}
    		private function onDragDown(e:MouseEvent):void
    		{
    			stage.addEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
    			stage.addEventListener(MouseEvent.MOUSE_UP,onDragOut);
    		}
    		private function onDragMove(e:MouseEvent):void
    		{
    			_dragSp.rotation = Math.atan2(_dragSp.parent.mouseY - _dragSp.y,_dragSp.parent.mouseX - _dragSp.x) * 180 / Math.PI;
    			_radian = (_dragSp.rotation) * Math.PI / 180;
    			/*
    			这是关键,因为rotation的区间是[0,180][0,-180],如果直接用_dragSp.rotation会导致拖拽绘制扇形错误
    			*/
    			if (_dragSp.rotation > 180)
    			{
    				_radian = _radian + Math.PI;
    			}
    			if (_radian < 0)
    			{
    				_radian = _radian + 2 * Math.PI;
    			}
    			drawSector(_sector,0,0,_radius,_radian*180/Math.PI,0);
    		}
    		private function onDragOut(e:MouseEvent):void
    		{
    			stage.removeEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
    			stage.removeEventListener(MouseEvent.MOUSE_UP,onDragOut);
    
    		}
    		/***
    		* 绘制扇形
    		* @param    mc 承载扇形的对象
    		* @param    x 圆心角x
    		* @param    y 圆心角y
    		* @param    r 半径
    		* @param    angle 绘制角度
    		* @param    startAngle 起始角度
    		* @param    color 填充颜色
    		* @param    hasFrame 是否填充边框
    		***/
    		private function drawSector(sp:Sprite,x:Number=0,y:Number=0,r:Number=100,angle:Number=60,startAngle:Number=0,color:Number=0xff0000,hasFrame:Boolean=true):void
    		{
    			sp.graphics.clear();
    			if (hasFrame)
    			{
    				sp.graphics.lineStyle(0,0xffff00);
    			}
    			sp.graphics.beginFill(color,1);
    			sp.graphics.moveTo(x,y);
    			angle=(Math.abs(angle)>360)?360:angle;
    			var n:Number = Math.ceil(Math.abs(angle) / 45);
    			var angleA:Number = angle / n;
    			angleA = angleA * Math.PI / 180;
    			startAngle = startAngle * Math.PI / 180;
    			sp.graphics.lineTo(x+r*Math.cos(startAngle),y+r*Math.sin(startAngle));
    			for (var i:int=1; i<=n; i++)
    			{
    				startAngle +=  angleA;
    				var angleMid:Number = startAngle - angleA / 2;
    				var bx:Number=x+r/Math.cos(angleA/2)*Math.cos(angleMid);
    				var by:Number=y+r/Math.cos(angleA/2)*Math.sin(angleMid);
    				var cx:Number = x + r * Math.cos(startAngle);
    				var cy:Number = y + r * Math.sin(startAngle);
    				sp.graphics.curveTo(bx,by,cx,cy);
    			}
    			if (angle!=360)
    			{
    				sp.graphics.lineTo(x,y);
    			}
    			sp.graphics.endFill();
    		}
    	}
    }
    

      

  • 相关阅读:
    Spark记录-SparkSQL远程操作MySQL和ORACLE
    Spark记录-Spark on Yarn框架
    Linux记录-重启后磁盘丢失问题解决方案
    Spark记录-阿里巴巴开源工具DataX数据同步工具使用
    Spark记录-SparkSql官方文档中文翻译(部分转载)
    Spark记录-SparkSQL一些操作
    Spark记录-Spark-Shell客户端操作读取Hive数据
    Spark记录-SparkSQL相关学习
    Spark记录-Scala程序例子(函数/List/match/option/泛型/隐式转换)
    CM记录-升级Spark版本到2.x(转载)
  • 原文地址:https://www.cnblogs.com/fengziwu/p/11914318.html
Copyright © 2020-2023  润新知