예제 #1
0
 //constructores
 public Segmento(Punto a, Punto b, double rot = 0)
     : base(rot)
 {
     A = a;
     B = b;
 }
예제 #2
0
 //constructores
 public Circulo(Punto c, double r, double rot = 0)
     : base(rot)
 {
     Centro = c;
     Radio  = r;
 }
예제 #3
0
        //constructores
        public Cuadrilatero(double ab, double bc, double cd, double da, double ang, bool conv = true, double rot = 0)
            : base(rot)
        {
            AB = ab;
            BC = bc;
            CD = cd;
            DA = da;
            AnguloDerechoBase = ang;
            Convexo           = conv;

            //se ubica el primer segmento en forma horizontal para
            //comenzar el calculo de los demas puntos
            A = new Punto(0, 0);
            B = new Punto(ab, 0);

            //-------------------------------------------------------------------------
            //Calculo del punto C, se traza una recta por el punto B con pendiente
            //tg(AnguloDerechoBase). Y con un radio BC se halla el punto C.
            C   = new Punto(0, 0);
            C.X = B.X - BC * Math.Cos(Math.PI * AnguloDerechoBase / 180);
            C.Y = BC * Math.Sin(Math.PI * AnguloDerechoBase / 180);


            //-------------------------------------------------------------------------
            //Calculo del punto D, se halla con la interseccion de dos circunferencias.
            //Una con radio DA y centro en A, y la otra con radio CD y centro en C.

            //Calculo de la distancia (_diagona) entra A y C.
            double _disDiag1 = new Segmento(A, C).Distancia();

            //Verificamos que los segmentor restantes (CD y DA) sean mas largos
            //que _diagonal para ascegurar que las circunferencias se cruzen.
            if (_disDiag1 < (CD + DA))
            {
                D = new Punto(0, 0);
                Circulo _cir1 = new Circulo(C, CD);
                Circulo _cir2 = new Circulo(A, DA);
                Punto   _p1;
                Punto   _p2;
                _cir1.Interseccion(_cir2, out _p1, out _p2);

                _disDiag1 = new Segmento(_p1, B).Distancia();
                double _disDiag2 = new Segmento(_p2, B).Distancia();
                if (Convexo)
                {
                    if (_disDiag1 > _disDiag2)
                    {
                        D = _p1;
                    }
                    else
                    {
                        D = _p2;
                    }
                }
                else
                if (_disDiag1 < _disDiag2)
                {
                    D = _p1;
                }
                else
                {
                    D = _p2;
                }
            }
            else
            {
                throw new System.ArgumentException($"Los segmentos CD y DA son cortos");
            }
        }