计算两线夹角的实验

如果利用象限来考虑,好吧,我自己写个lab得了:

interface


其中的点是个自定义类,lib里的symbol上放置一个图案和一个TextField:

package  {
	
	import flash.display.*;
	
	public class Point extends Sprite
	{
		
		
		public function Point() 
		{
			// constructor code
		}
	}
	
}


下面的按钮用来获取A点和B点的信息,信息显示在左上角。而且两个点可以被拖拽移动:

package  {
	
	import flash.display.*;
	import flash.events.*;
	
	public class main extends MovieClip
	{
		private var _pointM:Point;
		private var _pointA:Point;
		private var _pointB:Point;

		public function main() 
		{
			this.addEventListener(Event.ADDED_TO_STAGE, this.addedToStageHandler);
		}
		
	// HANDLERS:
		
		private function addedToStageHandler($e:Event):void
		{
			this._pointM = new Point();
			this._pointM.labelTxt.text = "M";
			this._pointM.mouseChildren = false;
			this._pointM.x = 400;
			this._pointM.y = 400;
			this.addChild(this._pointM);
			
			
			this._pointA = new Point();
			this._pointA.labelTxt.text = "A";
			this._pointA.mouseChildren = false;
			this._pointA.x = 500;
			this._pointA.y = 600;
			this.addChild(this._pointA);
			
			this._pointB = new Point();
			this._pointB.labelTxt.text = "B";
			this._pointB.mouseChildren = false;
			this._pointB.x = 300;
			this._pointB.y = 600;
			this.addChild(this._pointB);
			
			
			getABtn.addEventListener(MouseEvent.CLICK, this.getABtnClickedHandler);
			getBBtn.addEventListener(MouseEvent.CLICK, this.getBBtnClickedHandler);
			
			ptoABtn.addEventListener(MouseEvent.CLICK, this.ptoABtnClickedHandler);
			ptoBBtn.addEventListener(MouseEvent.CLICK, this.ptoBBtnClickedHandler);
			
			this._pointA.addEventListener(MouseEvent.MOUSE_DOWN, this.pointMouseDownHandler);
			this._pointA.addEventListener(MouseEvent.MOUSE_UP, this.pointMouseUpHandler);
			this._pointB.addEventListener(MouseEvent.MOUSE_DOWN, this.pointMouseDownHandler);
			this._pointB.addEventListener(MouseEvent.MOUSE_UP, this.pointMouseUpHandler);
		}
		
		
		private function pointMouseDownHandler($e:MouseEvent):void
		{
			$e.target.startDrag();
		}
		
		
		private function pointMouseUpHandler($e:MouseEvent):void
		{
			$e.target.stopDrag();
		}
		
		
		private function getABtnClickedHandler($e:MouseEvent):void
		{
			var $vactorX:Number = this._pointA.x - 400;
			var $vactorY:Number = this._pointA.y - 400;
			
			aPt_x.text = $vactorX.toString();
			aPt_y.text = $vactorY.toString();
			
			var $angleA:Number = Math.atan2($vactorY, $vactorX);
			
			aPt_ang.text = $angleA.toString();
		}
		
		
		private function getBBtnClickedHandler($e:MouseEvent):void
		{
			var $vactorX:Number = this._pointB.x - 400;
			var $vactorY:Number = this._pointB.y - 400;
			
			bPt_x.text = $vactorX.toString();
			bPt_y.text = $vactorY.toString();
			
			var $angleB:Number = Math.atan2($vactorY, $vactorX);
			
			bPt_ang.text = $angleB.toString();
		}
		
		
		private function ptoABtnClickedHandler($e:MouseEvent):void
		{
			arrow.rotation = degrees(Number(aPt_ang.text.toString()));
		}
		
		
		private function ptoBBtnClickedHandler($e:MouseEvent):void
		{
			arrow.rotation = degrees(Number(bPt_ang.text.toString()));
		}
		
		
		private function degrees(radians:Number):Number
		{
  	 		return radians * 180/Math.PI;
		}
		

	}
	
}


注意:displayObject的rotation属性使用的角度是以度(degree)为单位,而通过Math类的三角函数方法所操纵的角度值则是以弧度(radian)为单位,请参照:atan2()

两者互转的函数为:

function degrees(radians:Number):Number
{
    return radians * 180/Math.PI;
}
 
function radians(degrees:Number):Number
{
    return degrees * Math.PI / 180;
}


Refs:

怎么快速求出三点之间的夹角?

画图的时候两线夹角如何求?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值