100分悬赏:Flex 画扇形 完了之后 如何获取扇形内的坐标点 (解决后继续追加悬赏分)

求扇形内的坐标点,因为我要向这个扇形内放置图标,需要坐标来锁定图标的位置,所以必须求得扇形内的坐标点。或者哪位大神有更好的方法给赐教下~~~ 谢谢~~~

下边是我画扇形的方法,已知扇形所在圆圆心(x,y)坐标,扇形角度angle,扇形半径r,扇形开始边所在坐标系的度数startFrom,

private function drawSector(x:Number, y:Number, r:Number, angle:Number, startFrom:Number,color:uint):Sprite
{
var sector:Sprite=new Sprite();
sector.graphics.clear();
sector.graphics.beginFill(0xFFFFFF,0);//扇形填充颜色 , 及透明度

sector.graphics.lineStyle(1,color,1,true);//定义绘制扇形的线条粗细,及颜色
sector.graphics.moveTo(x,y); //当前绘画位置移动到 (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;
startFrom=startFrom*Math.PI/180;

sector.graphics.lineTo(x+r*Math.cos(startFrom),y+r*Math.sin(startFrom));//扇形的第一条开始边

for (var i=1; i<=n; i++) {
startFrom+=angleA;
var angleMid=startFrom-angleA/2;
var bx=x+r/Math.cos(angleA/2)*Math.cos(angleMid);
var by=y+r/Math.cos(angleA/2)*Math.sin(angleMid);
var cx=x+r*Math.cos(startFrom);
var cy=y+r*Math.sin(startFrom);

sector.graphics.curveTo(bx,by,cx,cy);

}
if (angle!=360) {
sector.graphics.lineTo(x,y);
}
sector.graphics.endFill();

return sector;
}

刚好做过一个这样的东西,首先你得知道你要找的点的半径,然后计算这个点的角度,就可以计算出它的x y。
你可以先找扇形中心的坐标,然后根据你的需求去调整图标的位置,即改变坐标点的半径和角度值。追问

我的意思是:只要这个点在这个扇形内就可以,位置是随机的,所以这个扇形到圆心的距离也是随机的,只要比扇形的半径小就可以;所以有没有一个公式或者方法能求出这个扇形内的点的坐标集合;或者这样说吧:我现在要向画好的扇区里放5个图标,位置随机,只要在扇形内就OK,已知条件就是上边的,如何求解

追答

随机也是没问题的。就是随机半径值,然后随机角度值,换算成xy坐标值。
如果要求图标不能超出扇形范围,那随机的值要在更小的一个范围内,即类似扇形内部要加一个边距。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-16
随机以下数值:
角度:alpha = Math.random() * angle + startFrom;
距离:distance = Math.random() * r;
点就是 (cx + distance * Math.cos(alpha), cy + distance * Math.sin(alpha);
//这里可能有角度正负问题,自己看看吧追问

您好,您的方法我试了,很不错,但是和我要的结果稍微有差别,但是这个思路是对的。
您这个最后得到的结果是无论angle的度数是多大,最后得到的坐标是这个扇区所在圆内的任一坐标,并非此圆内某一特定扇区的随机坐标。
还劳烦您再费下心,帮我看看,如何修改修改,让随机出来的是某一特定角度,特定扇形内的随机坐标,谢谢 ~~~~~~~~~

追答var particle:IVisualElement = new Particle() as IVisualElement; //自定义的圆点控件
rr = r * Math.random();
//rr = r * Math.sqrt(Math.random()); //如果要等概率,可以用本行随机
alpha = angle * Math.random() + startAngle;
particle.x = cx + rr * Math.cos(alpha);
particle.y = cy + rr * Math.sin(alpha);
containerGroup.addElement(particle);

全部代码看附件

本回答被提问者采纳
相似回答