Exemplo n.º 1
0
 /// <summary>
 /// 判断两条线段是否相交。
 /// </summary>
 /// <param name="line1">线段1</param>
 /// <param name="line2">线段2</param>
 /// <returns>相交返回真,否则返回假。</returns>
 public static bool CheckTwoLineCrose(LineD line1, LineD line2)
 {
     return(CheckCrose(line1, line2) && CheckCrose(line2, line1));
 }
Exemplo n.º 2
0
        /**************************************求交***************************************************/
        /// <summary>
        /// 两直线求交,返回交点 线公式 AX+BY+C1=0;
        /// </summary>
        /// <param name="lineA_z"></param>
        /// <param name="lineB"></param>
        /// <returns></returns>
        public static Point jiaoD(this LineD lineA_z, LineD lineB)
        {
            //定义交点
            Point  res = new Point();
            double X1 = 0, X2 = 0, X3 = 0, X4 = 0, Y1 = 0, Y2 = 0, Y3 = 0, Y4 = 0;

            if (Math.Abs(lineA_z.Start.X - lineA_z.End.X) > 0.01)
            {
                //lineA的两点坐标
                X1 = lineA_z.Start.X;
                Y1 = lineA_z.Start.Y;
                X2 = lineA_z.End.X;
                Y2 = lineA_z.End.Y;
                //lineB的两点坐标
                X3 = lineB.Start.X;
                Y3 = lineB.Start.Y;
                X4 = lineB.End.X;
                Y4 = lineB.End.Y;
            }
            else if (Math.Abs(lineB.Start.X - lineB.End.X) > 0.01)
            {
                //lineB的两点坐标
                X1 = lineB.Start.X;
                Y1 = lineB.Start.Y;
                X2 = lineB.End.X;
                Y2 = lineB.End.Y;
                //lineA的两点坐标
                X3 = lineA_z.Start.X;
                Y3 = lineA_z.Start.Y;
                X4 = lineA_z.End.X;
                Y4 = lineA_z.End.Y;
            }
            else
            {
                MessageBox.Show("求交过程中被输入两条平行线,无法获得交点");
            }
            //lineA套入直线公式
            double A1 = Y2 - Y1;
            double B1 = X1 - X2;
            double C1 = X2 * Y1 - X1 * Y2;
            //lineB套入直线公式
            double A2 = Y4 - Y3;
            double B2 = X3 - X4;
            double C2 = X4 * Y3 - X3 * Y4;

            //A1*X+B1*Y+C1=0;
            //A2*X+B2*Y+C2=0;

            ///y=a0+a1*x
            ///a1*x-y+a0=0
            ///A=a1
            ///B=-1
            ///
            //解出交点

            // 1 提出lineA中的未知数Y
            //      Y*B1 = -A1*X - C1;
            //      Y = -X*A1/B1 - C1/B1;
            // 2 把Y 套入 lineB的公式中
            //      A2*X+B2*(-A1/B1 * X - C1/B1)+C2=0;
            // 3 提出lineB的公式中的未知数X
            //      A2*X + B2*(-X*A1/B1 - C1/B1) + C2=0;
            //      double g =B2*(A1/B1);
            //      double h =B2*(C1/B1);
            //      A2*X + (-B2*(A1/B1) * X - B2*(C1/B1)) + C2=0;
            //      A2*X + (-g * X - h) + C2=0;
            //      A2*X - g * X =h-C2;
            //      (A2-g)*X=h-C2;
            //      X=(h-C2)/(A2-g);
            res.X = (B2 * (C1 / B1) - C2) / (A2 - B2 * (A1 / B1));
            //4 把X套入步骤 1的公式
            res.Y = -res.X * A1 / B1 - C1 / B1;
            res.Z = lineA_z.Start.Z;
            return(res);
        }