细分线(由点数组制成)等长

时间:2016-03-19 02:25:52

标签: actionscript-3

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

2 个答案:

答案 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;
}

使用JS版本http://codepen.io/asellenrick/pen/bpqGwE?editors=0011

答案 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;
}