沿线增加点数

chr*_*ris 1 actionscript-3

我正在使用以下代码计算从A点(右上角)到B点(左下角)的增量.但随着我们越来越接近B点,我的增量越来越远离预期的路径.图中的绿线是白点的预期路径.

差异

    public function get target():Point { return _target; }
    public function set target(p:Point):void
    {
        _target = p;
        var dist:Number = distanceTwoPoints(x, _target.x, y, _target.y); //find the linear distance
        //double the steps to get more accurate calculations. 2 steps are calculated each frame
        var _stepT:Number = 2 * (dist * _speed); //_speed is in frames/pixel (something like 0.2)

        if (_stepT < 1) //Make sure there's at least 1 step
            _stepT = 1;
        _stepTotal = int(_stepT); //ultimately, we cannot have half a step
        xInc = (_target.x - x) / _stepT; //calculate the xIncrement based on the number of steps (distance / time)
        yInc = (_target.y - y) / _stepT;
    }

    private function distanceTwoPoints(x1:Number, x2:Number, y1:Number, y2:Number):Number 
    {
        var dx:Number = x1-x2;
        var dy:Number = y1-y2;
        return Math.sqrt(dx * dx + dy * dy);
    }
Run Code Online (Sandbox Code Playgroud)

基本上,我没有想法.唯一似乎让白点完全跟随绿线的是调整目标的位置,如下所示:

distanceTwoPoints(x, _target.x + 2, y, _target.y + 1);
//...
xInc = (_target.x + 2 - x) / _stepT;
yInc = (_target.y + 1 - y) / _stepT;
Run Code Online (Sandbox Code Playgroud)

然而,这会抛出模拟的其他部分,其中点之间没有角度,例如进入A点(右上角).这让我觉得两点之间的距离需要计算得比实际更短.有任何想法吗?

Mar*_*ney 9

Flash具有很好的功能,非常方便.Point.interpolate(pointA, pointB, number)它返回A点和B点之间的点.第三个输入(Number)是得到的点应该是多少接近pointA或pointB,从0到1.你必须计算它的值.

什么插值基本上是两个输入点的加权平均值,该数字是朝向一个点的权重.如果数字为0.5,您将在两个输入点之间得到一个点.1返回PointA,0返回PointB.

flash.geom.Point.interpolate()了解详细信息.

对于其他语言或一般数学,您可以这样做,不需要Trig:,point1原点和point2终点.point3point1和之间的一点point2.loc是一个比point1point2多远的路线走.loc = .25将是四分之一的point1方向point2.point3.x = point1.x * (1 - loc) + point2.x * locpoint3.y = point1.y * (1 - loc) + point2.y * loc.这甚至会为值工作0-1之外,比如上线的一个点连接point1point2而不是它们之间.