已知两条线段的四个顶点,求交点坐标AS3实现方法

(1)设定直线1的倾角a1,及其上一点(p1,q1);设定直线2的倾角a2,及其上一点(p2,q2)

(2)判断是否a1=a2
如果是,输出"两直线平行",程序结束
如果否,程序继续

(3)判断是否a1=90
如果是,计算x=p1,k2=tana2,y2=k2*x+q2-k2*p2,输出x,y2,程序结束
如果否,程序继续

(4)判断是否a2=90
如果是,计算x=p2,k1=tana1,y1=k1*x+q1-k1*p1,输出x,y1,程序结束
如果否,程序继续

(5)计算k1=tana1,k2=tana2
计算x=(q2-k2*p2-q1+k1p1)/(k1-k2)
y=k2*x+q2-k2*p2

输出x,y

程序结束
/**
     * 求两条线段的交点 ac与bd相交
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */

    private function jiaodian(a:Point, b:Point, c:Point, d:Point):Point
    {
      var angle1:Number = Math.atan2((a.y - c.y), (a.x - c.x));
      var angle2:Number = Math.atan2((b.y - d.y), (b.x - d.x));
      var p1:Number = a.x;
      var q1:Number = a.y;
      var p2:Number = b.x;
      var q2:Number = b.y;
      var tmpX:Number;
      var tmpY:Number;
      var k1:Number;
      var k2:Number;
     
      trace(hd2jd(angle1), hd2jd(angle2));
      if (Math.abs(hd2jd(angle1)) == 90)
      {
        tmpX = p1;
        k2 = Math.tan(angle2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      else if (Math.abs(hd2jd(angle2)) == 90)
      {
        tmpX = p2;
        k1 = Math.tan(angle1);
        tmpY = k1 * tmpX + q1 - k1 * p1;
      }
      else
      {
        k1 = Math.tan(angle1);
        k2 = Math.tan(angle2);
        tmpX = (q2 - k2 * p2 - q1 + k1 * p1) / (k1 - k2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      return new Point(tmpX, tmpY);
     
    }