demo.jpg_explanation demo.jpg我有一个随机序列点数组,如:
var arr:Array=[[115,195],[142,161],[177,132],[217,105],[258,122],[304,128],[361,119],[395,98],[427,65],[467,67],[501,93],[536,136],...]
只需在舞台上单击鼠标,然后将mouseX,mouseY推入arr即可获得它。
我得到了他们的长度:
var _length:Number=0;
for(var i:int=1;i<arr.length;i++){
var p1:Point =new Point(arr[i-1].x,arr[i-1].y);
var p2:Point =new Point(arr[i].x,arr[i].y);
_length+=Point.distance(p1, p2);
}
现在我想通过随机int将这些点所产生的线段细分为相等的段:10或11,20,......并且相等的点必须在线上。
我不擅长数学,对此感到抱歉。经过几天试图找到它,我找不到合适的功能。
那么,你想帮助我吗?
非常感谢,也祝福你!
对不起我的英文* ^ _ ^ *
PS:
I can get the point on the line by:
var p1:Point=new Point(Xn,Yn)
var p2:Point=new Point(Xn+1,Yn+1)
var p3:Point=Point.interpolate(p1,p2,m)//m= 0~1
答案 0 :(得分:0)
你必须循环遍历你的点数组,并且一次调用这个函数,它将根据你希望线被分成的分数,沿着该行返回一个点数组。 / p>
你需要调用divideLine(arr [0],arr [1],#random)divideLine(arr [1],arr [2],#random)divideLine(arr [3],arr [4],#随机)等。
function divideLine(point1,point2,divisions)
{
var rise = point2[1] - point1[1];
var run = point2[0] - point1[0];
var slope = rise/run;
var seg = run/divisions
var pointsAlongLine = [];
for(var i = 1 ; i < divisions ; i++){
var pointOnLine = [seg*i,seg*i*slope];
pointsAlongLine.push(pointOnLine);
}
return pointsAlongLine;
}
答案 1 :(得分:0)
谢谢你,Andrew Sellenrick。我从你的方式得到了正确的功能:)
function divideLine(point1,point2,divisions)
{
var rise = point2[1] - point1[1];
var run = point2[0] - point1[0];
var slope = rise/run;
var step = divisions * 200;
var seg = run/step;
var pointsAlongLine = [];
for(var i = 1 ; i < step ; i++){
var pointOnLine = [point1[0]+seg*i,point1[1]+seg*i*slope];
pointsAlongLine.push(pointOnLine);
}
return pointsAlongLine;
}