private void Window_Loaded(object sender, RoutedEventArgs e) { randy = new Random(Guid.NewGuid().GetHashCode()); for (int i = 0; i < 20; i++) { //Trapecio tra = new Trapecio(randy.Next(10, 80), randy.Next(k, 250), k); //tra.posX = randy.Next((int)(tra.BaseMayor-tra.BaseMenor), (int)(ElCanvas.ActualWidth - tra.BaseMayor)); //tra.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - tra.Altura)); //Figuritas.Add(tra); int salio = randy.Next(5); switch (salio) { case 0: Rectangulo R = new Rectangulo(randy.Next(10, 50), randy.Next(10, 50)); R.posX = randy.Next(0, (int)(ElCanvas.ActualWidth - R._base)); R.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - R.altura)); Figuritas.Add(R); break; case 1: Circulo c = new Circulo(randy.Next(10, 51)); c.posX = randy.Next(0, (int)(ElCanvas.ActualWidth - c.radio * 2)); c.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - c.radio * 2)); Figuritas.Add(c); break; case 2: TrianguloEquilatero te = new TrianguloEquilatero(randy.Next(10, 50)); te.posX = randy.Next(0, (int)(ElCanvas.ActualWidth - te.lado)); te.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - te.Altura)); Figuritas.Add(te); break; case 3: int k = randy.Next(10, 50); Trapecio tra = new Trapecio(randy.Next(10, 30), randy.Next(k, 60), k); tra.posX = randy.Next((int)(tra.BaseMayor - tra.BaseMenor), (int)(ElCanvas.ActualWidth - tra.BaseMayor)); tra.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - tra.Altura)); Figuritas.Add(tra); break; case 4: int w = randy.Next(10, 50); Rombo rom = new Rombo(randy.Next(w, 60), w); rom.posX = randy.Next(0, (int)(ElCanvas.ActualWidth - rom.DMenor)); rom.posY = randy.Next(0, (int)(ElCanvas.ActualHeight - rom.DMayor)); Figuritas.Add(rom); break; default: break; } while (Figuritas[i].DeltaX == 0) { Figuritas[i].DeltaX = randy.Next(-3, 4); } while (Figuritas[i].DeltaY == 0) { Figuritas[i].DeltaY = randy.Next(-3, 4); } } DibujaTodas(); Tiempos.Start(); }
//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"); } }