//constructores public Segmento(Punto a, Punto b, double rot = 0) : base(rot) { A = a; B = b; }
//constructores public Circulo(Punto c, double r, double rot = 0) : base(rot) { Centro = c; Radio = r; }
//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"); } }