Esempio n. 1
0
        public static Punct3D XSint4P(Punct3D A1, Punct3D A2, Punct3D B1, Punct3D B2)
        {
            try
            {
                //Calculul parametrilor segmentului A1A2
                double aA = (A2.Z - A1.Z) / (A2.Offset - A1.Offset);
                double bA = A1.Offset * (A2.Z - A1.Z) / (A1.Offset - A2.Offset) - A1.Z;

                //Calculul parametrilor segmentului B1B2
                double aB = (B2.Z - B1.Z) / (B2.Offset - B1.Offset);
                double bB = B1.Offset * (B2.Z - A1.Z) / (B1.Offset - B2.Offset) - A1.Z;

                //Calculul punctului de intersectie
                double offInt = (bB - bA) / (aA - aB);
                double zInt   = A1.Z + (offInt - A1.Offset) * aA;

                Punct3D punct = new Punct3D();
                punct.KM     = A1.KM;
                punct.Offset = offInt;
                punct.Z      = zInt;

                return(punct);
            }
            catch
            {
                return(null);
            }
        }
Esempio n. 2
0
        public static String3D XSintersect(String3D S1, String3D S2)
        {
            String3D S = new String3D();

            for (int i = 0; i <= S1.Count - 2; i++)
            {
                for (int j = 0; j <= S2.Count - 2; j++)
                {
                    Punct3D punct = XSint4P(S1[i], S1[i + 1], S2[j], S2[j + 1]);
                    if (punct.Offset >= S1[i].Offset && punct.Offset <= S1[i + 1].Offset)
                    {
                        S.Add(punct);
                    }
                }
            }

            if (S.Count > 0)
            {
                return(S);
            }
            else
            {
                return(null);
            }
        }
Esempio n. 3
0
 //Functie statica ce returneaza un Punct3D cu valori citite dintr-un segment text
 public static Punct3D StringToPoint(string text, Format tip, DelimitedBy separator)
 {
     try
     {
         Punct3D punct = new Punct3D();
         punct.ValuesFromString(text, tip, separator);
         return(punct);
     }
     catch
     {
         return(null);
     }
 }
Esempio n. 4
0
        public static String3D XStrimextend(String3D XS, String3D XSTinta)
        {
            String3D XSrezultat = new String3D();

            if (XS.Count < 2 || XSTinta.Count < 2)
            {
                return(XS);
            }

            for (int i = 0; i < XS.Count; i++)
            {
                if (i == 0)
                {
                    for (int j = 0; j < XSTinta.Count - 1; j++)
                    {
                        Punct3D P = (Punct3D)XSint4P(XS[0], XS[1], XSTinta[j], XSTinta[j + 1]);
                        if (P.Offset <= XS[1].Offset && P.Offset >= XSTinta[j].Offset && P.Offset <= XSTinta[j + 1].Offset)
                        {
                            XSrezultat.Add(P);
                        }
                    }
                    if (XSrezultat.Count == 0)
                    {
                        XSrezultat.Add(XS[0]);
                    }
                }
                else if (i == XS.Count - 1)
                {
                    for (int j = 0; j < XSTinta.Count - 1; j++)
                    {
                        Punct3D P = (Punct3D)XSint4P(XS[XS.Count - 2], XS[XS.Count - 1], XSTinta[j], XSTinta[j + 1]);
                        if (P.Offset >= XS[XS.Count - 2].Offset && P.Offset >= XSTinta[j].Offset && P.Offset <= XSTinta[j + 1].Offset)
                        {
                            XSrezultat.Add(P);
                        }
                    }
                    if (XSrezultat.Count < XS.Count)
                    {
                        XSrezultat.Add(XS[XS.Count - 1]);
                    }
                }
                else
                {
                    XSrezultat.Add(XS[i]);
                }
            }

            return(XSrezultat);
        }