注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

有你做翅膀,孤单都是坚强

生命中总要经历曲折,或许是我们不愿意,突然到最后走不通,想重新来过,记录每件小事

 
 
 

日志

 
 
关于我
K24

曾经的生涩,曾经的懵懂,曾经的自恋,都随风去吧。。。

网易考拉推荐
 
 

as3 已知圆心和圆上两点画弧线或者扇形  

2013-08-07 20:33:45|  分类: @flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

now begin

as3 已知圆心和圆上两点画弧线或者扇形 - K24 - 有你做翅膀,孤单都是坚强
 
as3 已知圆心和圆上两点画弧线或者扇形 - K24 - 有你做翅膀,孤单都是坚强
 
1, 首先定义原点和半径

private var stageWidth:Number;
private var stageHeight:Number;
private var originPoint:Point;

private var r:int = 30;
public function DrawArc_test()
{

stageWidth = this.stage.stageWidth;
stageHeight = this.stage.stageHeight;

originPoint = new Point(stageWidth/2,3*stageHeight/4);

toDraw();
}


2, to draw 函数

var startP:Point = new Point(originPoint.x,originPoint.y-r);
var endP:Point = new Point(originPoint.x-r,originPoint.y);
var centerP:Point = new Point(originPoint.x-r,originPoint.y-r);

/*graphics.lineStyle(0.1,0x009900);
graphics.drawCircle(centerP.x,centerP.y,r);*/

DrawArc(startP,endP,centerP,r);


3, 扩展知识
1>求圆上一点和圆心的夹角

var angle0pos:Point=new Point(centerpos.x+r,centerpos.y);
var angle:Number=ComputeCurveAngle(angle0pos,pos,centerpos);
if(pos.y<centerpos.y)
angle=360-angle;
return angle;

2>ComputeCurveAngle计算弧度

var sqr_sp:Number=Math.sqrt(Math.pow(endpos.x-centerpos.x,2)+Math.pow(endpos.y-centerpos.y,2));
var sqr_ep:Number=Math.sqrt(Math.pow(startpos.x-centerpos.x,2)+Math.pow(startpos.y-centerpos.y,2));
var sqr_cp:Number=Math.sqrt(Math.pow(startpos.x-endpos.x,2)+Math.pow(startpos.y-endpos.y,2));;
var cos_cp:Number=(Math.pow(sqr_sp,2)+Math.pow(sqr_ep,2)-Math.pow(sqr_cp,2))/(2*sqr_sp*sqr_ep);
var angle:Number=Math.acos(cos_cp)*180/Math.PI;
return angle;

4, 为避免失真, 将弧度进行45度划分, 如有余数, 段数加1

var startangle:Number=computeAngle(startpos,centerpos,r);
var endangle:Number=computeAngle(endpos,centerpos,r);
var angle:Number=endangle-startangle;
if(angle<0)
angle+=360;
var n:int;
if(angle<45){
n=1;
}else if(angle<90){
n=2;
}else if(angle<135){
n=3;
}else if(angle<180){
n=4;
}else if(angle<225){
n=5;
}else if(angle<270){
n=6;
}else if(angle<315){
n=7;
}else{
n=8;
}



5, 分段画弧

angle=angle/n;
this.graphics.lineStyle(1,0x000000,1,true);
this.graphics.beginFill(0, 0.5);

this.graphics.moveTo(startpos.x,startpos.y);
for(var i:int=1;i<=n;i++)
{
var midangle:Number=startangle+angle*i;
var cp:Point=ComputeCurveControlPoint(centerpos,r,midangle,angle);
var cx:Number=centerpos.x + r * Math.cos(midangle*Math.PI / 180);
var cy:Number=centerpos.y + r * Math.sin(midangle*Math.PI / 180);
this.graphics.curveTo(cp.x,cp.y,cx,cy);
// graphics.drawCircle(cp.x,cp.y,2);
// graphics.moveTo(cx,cy);
}

this.graphics.endFill();



  评论这张
 
阅读(506)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017