如何知道一条线的点,给出了遍历线的起点和终点:任何公式?

时间:2013-05-16 09:49:37

标签: actionscript-3 line formula traversal points

我正在使用AS3。但是我使用的语言并不重要。我只是找到了解决这个问题的逻辑。

我已经创建了一条线,使用图形类绘制给定线的起点和终点。现在我再画一个圆圈。我希望那个圆圈遍历这条线。

我可以通过了解坐标平面中直线的起点和终点之间的点来做到这一点。

例如...... (0,0)和(20,20)

我可以通过分配对象的值来遍历该行......

object.x = 5;
object.y = 5;
object.x = 10;
object.y = 10;
and so on and so forth..

我希望我的对象圈从开始到结束点来回移动,然后在遍历该线时再次返回起点。

你可以帮我解决这个问题吗?我已经尝试扣除并添加斜率来遍历线,但它仅在斜率为正时才有效。

注意:在闪光灯中,坐标系与通常的笛卡尔平面不同。第四象限都是正面的。

这是我目前的逻辑:

var speed:int = 10;

function makeItMove(packetNumber:int):void{
        var xcenter:int = xCenterPt[packetNumber];
        var ycenter:int = yCenterPt[packetNumber];
        var xfirst:int = xFirstPt[packetNumber];
        var yfirst:int = yFirstPt[packetNumber];
        var xsecond:int = xSecondPt[packetNumber];
        var ysecond:int = ySecondPt[packetNumber];
        var switchPath:Boolean = switchPathArr[packetNumber];
        var slope:int = 0;

        if((xsecond-xfirst) != 0){
            slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed;
        }

        if(slope<0){
            //slope = ((ysecond - yfirst)/(xsecond - xfirst)) * speed;
            slope = slope * -1;
        }
        //else if(slope)

        //trace("PacketNumber: "+packetNumber+", xcenter: "+xcenter+", ycenter: "+ycenter+", xfirst: "+xfirst+", yfirst: "+yfirst+", xsecond: "+xsecond+", ysecond: "+ysecond)
        if(xcenter <= xfirst && ycenter <= yfirst){
            switchPath = true;
            switchPathArr[packetNumber] = switchPath;
        }

        if(xcenter >= xsecond && ycenter >= ysecond){
            switchPath = false;
            switchPathArr[packetNumber] = switchPath;
        }

        if(switchPath){
            xcenter = xcenter+slope;
            ycenter = ycenter+slope;
            xCenterPt[packetNumber] = xcenter;
            yCenterPt[packetNumber] = ycenter;
            //trace("UP: xcenter = " + xcenter + ", ycenter = " + ycenter);
            this[mc_Packets[packetNumber]].x = xcenter;
            this[mc_Packets[packetNumber]].y = ycenter;
        }
        else{
            xcenter = xcenter-slope;
            ycenter = ycenter-slope;
            xCenterPt[packetNumber] = xcenter;
            yCenterPt[packetNumber] = ycenter;
            //trace("DOWN: xcenter = " + xcenter + ", ycenter = " + ycenter);
            this[mc_Packets[packetNumber]].x = xcenter;
            this[mc_Packets[packetNumber]].y = ycenter;
        }
    }

2 个答案:

答案 0 :(得分:1)

我会使用矢量。通过这个,您可以从两个位置向量中创建方向向量。均值减去两个向量。 VectorA起点和VectorB终点。

然后你改变长度值,vetor x和y坐标也会相应改变。

以此类为例:

http://code.google.com/p/as3ufw/source/browse/trunk/src/core/as3ufw/geom/Vector2D.as?r=93

这也有帮助: http://emweb.unl.edu/math/mathweb/vectors/vectors.html

在您尝试上课之前先阅读此内容:)

答案 1 :(得分:0)

最好使用tweenLike API,而不是以数学方式解决它。

这是一个链接:

http://www.greensock.com/tweenlite/