Efficient maths algorithm to calculate intersections

后端 未结 9 766
既然无缘
既然无缘 2020-11-28 21:40

For a game I am developing I need an algorithm that can calculate intersections. I have solved the problem, but the way I have done it is really nasty and I am hoping someon

9条回答
  •  渐次进展
    2020-11-28 22:30

    private function Loop(e:Event):void
    {
        var x12:Number = Ball1.x - Ball2.x;
        var x34:Number = Ball3.x - Ball4.x;
        var y12:Number = Ball1.y - Ball2.y;
        var y34:Number = Ball3.y - Ball4.y;
    
        // Det
        var c:Number = x12 * y34 - y12 * x34;
    
        if (Math.abs(c) < 0.01)
        {
            Circle.visible = false;
        }
        else
        {
            var a:Number = Ball1.x * Ball2.y - Ball1.y * Ball2.x;
            var b:Number = Ball3.x * Ball4.y - Ball3.y * Ball4.x;
            var px:Number = (a * x34 - b * x12) / c;
            var py:Number = (a * y34 - b * y12) / c;
    
            var Btwn12x:Boolean = (px >= Math.min(Ball1.x, Ball2.x)) && (px <= Math.max(Ball1.x, Ball2.x));
            var Btwn12y:Boolean = (py >= Math.min(Ball1.y, Ball2.y)) && (py <= Math.max(Ball1.y, Ball2.y));
            var Btwn34x:Boolean = (px >= Math.min(Ball3.x, Ball4.x)) && (px <= Math.max(Ball3.x, Ball4.x));
            var Btwn34y:Boolean = (py >= Math.min(Ball3.y, Ball4.y)) && (py <= Math.max(Ball3.y, Ball4.y));
    
            var Btwn12:Boolean = Btwn12x && Btwn12y;
            var Btwn34:Boolean = Btwn34x && Btwn34y;
    
            if(Btwn12 && Btwn34)
            {
                Circle.visible = true;
                Circle.x = px;
                Circle.y = py;
            }
            else
            {
                Circle.visible = false;
            }
        }
    }
    

提交回复
热议问题