看了很多大神的资料,耗费了N多的脑细胞,可怜我的智商啊!!!!
附上参考资料:http://www.blogjava.net/1504/archive/2009/11/26/303775.html
http://www.dancecoder.com/2012/438.html
其他的忘记地址了。要是引用您的方法,一并感谢了
第一种
参考图片
代码:
/**
* 画箭头
* ---▲
* @param start 开始节点
* @param end 结束节点
* @param color 线条颜色
* @param alpha 透明度
* @param radius 箭头的大小
*
*/
public function drawArrow(start:Point,end:Point,color:uint=0x000000,alpha:Number=1,radius:Number=8.5):void{
var z:Number=Math.sqrt((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y));
var angle:Number=Math.atan2(end.y - start.y, end.x - start.x);
var exAngle:Number=Math.PI * 4.8 / 4;
var p1:Point=Point.polar(z, angle);
var p2:Point=Point.polar(radius, angle + exAngle);
var p3:Point=Point.polar(radius, angle - exAngle);
p1.offset(start.x, start.y);
p2.offset(p1.x, p1.y);
p3.offset(p1.x, p1.y);
if(alpha>1) alpha=1;
else if(alpha<0) alpha=0;
arrow.graphics.beginFill(color,alpha);
arrow.graphics.moveTo(p1.x, p1.y);
arrow.graphics.lineTo(p2.x, p2.y);
arrow.graphics.lineTo(p3.x, p3.y);
arrow.graphics.lineTo(p1.x, p1.y);
arrow.graphics.endFill();
this.addChild(arrow);
}
第二种
参考图片
代码:
/**
* 画箭头方法
*
* →
* @param x1 开始节点x轴坐标
* @param y1 开始节点y轴坐标
* @param x2 结束节点x轴坐标
* @param y2 结束节点y轴坐标
* @param lineThickness 线条的粗细
* @param color 线条的颜色
* @param alpha 透明度
*
*/
public function performArrowDrawing(x1:Number, y1:Number, x2:Number, y2:Number, lineThickness:Number, color:Number, alpha:Number):void{
arrow.graphics.lineStyle(lineThickness, color, alpha);
var arrowHeight:Number = 15;
var arrowWidth:Number = 10;
var angle:Number = Math.atan2(y2-y1, x2-x1);
arrow.graphics.moveTo(x2-arrowHeight*Math.cos(angle)-arrowWidth*Math.sin(angle),
y2-arrowHeight*Math.sin(angle)+arrowWidth*Math.cos(angle));
arrow.graphics.lineTo(x2, y2);
arrow.graphics.lineTo(x2-arrowHeight*Math.cos(angle)+arrowWidth*Math.sin(angle),
y2-arrowHeight*Math.sin(angle)-arrowWidth*Math.cos(angle));
}
第三种
参考图片
代码:
/**
*
* @param startX
* @param startY
* @param endX
* @param endY
* @return
*
*/private function GetAngle(startX:Number,startY:Number,endX:Number,endY:Number):int
{
var tmpx:int=endX-startX ;
var tmpy:int=startY -endY ;
var angle:int= Math.atan2(tmpy,tmpx)*(180/Math.PI);
return angle;
/**
*
* @param startX 开始节点x轴坐标
* @param startY 开始节点y轴坐标
* @param endX 结束节点x轴坐标
* @param endY 结束节点y轴坐标
* @param Radius 箭头的大小
*
*/ public function drawArrowCenter(startX:Number,startY:Number,endX:Number,endY:Number,Radius:Number):void {
var angle:int= GetAngle(startX,startY,endX,endY);
var centerX:int=endX-Radius * Math.cos(angle *(Math.PI/180)) ;
var centerY:int=endY+Radius * Math.sin(angle *(Math.PI/180)) ;
var topX:int=endX ;
var topY:int=endY ;
var LineColor:uint=0x8699A5;
var leftX:int=centerX + Radius * Math.cos((angle +120) *(Math.PI/180)) ;
var leftY:int=centerY - Radius * Math.sin((angle +120) *(Math.PI/180)) ;
var rightX:int=centerX + Radius * Math.cos((angle +240) *(Math.PI/180)) ;
var rightY:int=centerY - Radius * Math.sin((angle +240) *(Math.PI/180)) ;
arrow.graphics.beginFill(LineColor,1);
arrow.graphics.lineStyle(1,LineColor,1);
arrow.graphics.moveTo(topX,topY);
arrow.graphics.lineTo(leftX,leftY);
arrow.graphics.lineTo(centerX,centerY);
arrow.graphics.lineTo(rightX,rightY);
arrow.graphics.lineTo(topX,topY);
arrow.graphics.endFill();
}
其中第三种算法有点问题,箭头不对称,需要修改。希望高手指导。在此先感谢了
忘记加上
public var arrow:UIComponent=new UIComponent();