As3 带箭头直线的不同画法
来源:互联网 发布:闪铸fdm打印机 知乎 编辑:程序博客网 时间:2024/04/29 11:20
1:使用Math.cos、Math.sin组合画线
代码:
//一般画带箭头直线
function drawArrowWithVector(g:Graphics,x1:int,y1:int,x2:int,y2:int):void {
//箭头长度
var len:int = 10;
//箭头与直线的夹角
var _a:int = 30;
var angle:int = Math.atan2((y1-y2), (x1-x2))*(180/Math.PI);
//angle = Degree.fixAngle(angle);
g.lineStyle(lineWidth,0xff5566);
g.moveTo(x2,y2);
g.lineTo(x2+len*Math.cos((angle-_a)*(Math.PI/180)), y2+len*Math.sin((angle-_a)*(Math.PI/180)));
g.moveTo(x2,y2);
g.lineTo(x2+len*Math.cos((angle+_a)*(Math.PI/180)), y2+len*Math.sin((angle+_a)*(Math.PI/180)));
g.moveTo(x1,y1);
g.lineTo(x2,y2);
}
说明:该方法比第一种方法的灵活性要好出很多,不管节点怎么变化都可以准确的画出你想要的内容。具体用法:
var sp:Sprite=new Sprite()
var v1:Point=new Point(100,200);
var v2:Point=new Point(350,150);
drawArrowWithVector(sp.graphics,v1.x,v1.y,v2.x,v2.y);
this.addChild(sp);
2:使用Point.polar和Point.offset方法画线
代码:
//使用极坐标画线
private function drawArrowWithPolar(_g:Graphics,fP:Point,tP:Point):void{
var arrowBaseSize:Number = 10;//箭头两边距离中间线的距离
var arrowHeadLength:Number = 50;//箭头的长度
var lArrowBase:Point;
var rArrowBase:Point;
var mArrowBase:Point;
var edgeAngle:Number= Math.atan2(tP.y - fP.y,tP.x - fP.x);
mArrowBase = Point.polar(Point.distance(tP,fP) - arrowHeadLength,edgeAngle);
mArrowBase.offset(fP.x,fP.y);
lArrowBase = Point.polar(arrowBaseSize,(edgeAngle - (Math.PI / 2.0)));
rArrowBase = Point.polar(arrowBaseSize,(edgeAngle + (Math.PI / 2.0)));
lArrowBase.offset(mArrowBase.x,mArrowBase.y);
rArrowBase.offset(mArrowBase.x,mArrowBase.y);
/* now we actually draw */
//_g.beginFill(0xff5566);
_g.lineStyle(lineWidth,0xff5566);
_g.moveTo(fP.x, fP.y);
_g.lineTo(tP.x, tP.y);
_g.lineTo(lArrowBase.x, lArrowBase.y);
//_g.moveTo(tP.x,tP.y);
_g.lineTo(rArrowBase.x, rArrowBase.y);
_g.lineTo(tP.x, tP.y);
//_g.endFill();
}
使用方法:
var sp:Sprite=new Sprite()
var v1:Point=new Point(100,200);
var v3:Point=new Point(100,200);
var v4:Point=new Point(350,350);
drawArrowWithPolar(sp.graphics,v3,v4);
this.addChild(sp);
说明:个人觉得这个方法很有意思,有兴趣的朋友可以试着改变arrowBaseSize和arrowHeadLength的,看看具体的不同。
- As3 带箭头直线的不同画法
- 带箭头的直线
- 绘制带箭头的直线
- 绘制带箭头的直线
- 绘制带箭头的直线
- java 画带箭头的直线
- java 画带箭头的直线
- VC++ 箭头的画法
- MFC-箭头的画法
- 直线的画法
- Silverlight带箭头直线控件
- 画直线 水平夹角的 带箭头的
- MFC中如何画带实心箭头的直线
- MFC中如何画带实心箭头的直线
- MFC中如何画带实心箭头的直线
- html5画直线带箭头 画圆
- canvas直线.圆和正方形的画法
- google map 地图轨迹点以画带箭头的直线连接,直观轨迹记录。
- Servlet&JSP的那些事儿(八)
- 实现一个大容量、高并发的tcp代理,模拟移动网络报文延迟的情况
- sql语句格式化数字(前面补0)的参考示例
- uestc 1720 square-free integer(无平方因子数)&nyoj 580square-free integer(容斥,数论)
- java内部类,匿名类,匿名内部类
- As3 带箭头直线的不同画法
- 要使用json来传输数据
- 程序员面试61 数对之差的最大值
- Hibernate Annotation (Hibernate 注解)
- 关于Windows文件读写
- 关于ubuntu中vi命令的使用入门
- VMware Server 2.0在win7上的安装应用
- 父窗口去检测子窗口是否关闭
- 串口转以太网模块:WIZ105SR配置及测试(二)