public Figura2D(params Punto2D[] Vertices) : base(Vertices) { Transformacion = new Transformacion2D(); Movimiento = new Transformacion2D(); Giro = new Transformacion2D(); Centro = new Transformacion2D(); Timer = new Timer(); Timer.Interval = 10; Timer.Enabled = false; Frecuencia = 100; mVelocidad = new Vector2D(); mVelocidadAngular = 0; mRozamiento = 0; mRozamientoActivado = false; Actualizar(); Timer.Elapsed += TimerTick; }
public void Actualizar() { Punto2D Bar = Baricentro; Punto2D Punto = null; double maxX = 0; double MaxY = 0; double minX = 0; double minY = 0; if (mRozamientoActivado) { if (Math.Abs(mVelocidad.X) - mRozamiento >= 0) mVelocidad.X += (-Math.Sign(mVelocidad.X) * mRozamiento); else mVelocidad.X = 0; if (Math.Abs(mVelocidad.Y) - mRozamiento >= 0) mVelocidad.Y += (-Math.Sign(mVelocidad.Y) * mRozamiento); else mVelocidad.Y = 0; if (Math.Abs(mVelocidadAngular) - mRozamiento >= 0) mVelocidadAngular += (-Math.Sign(mVelocidadAngular) * mRozamiento); else mVelocidadAngular = 0; Movimiento = Transformacion2D.Traslacion(mVelocidad); Giro = Transformacion2D.Rotacion(mVelocidadAngular); } Centro = Transformacion2D.Traslacion(-Bar.X, -Bar.Y); VueltaCentro = Transformacion2D.Traslacion(Bar.X, Bar.Y); Transformacion = Centro + Giro + VueltaCentro + Movimiento; for (int i = 0; i <= base.Segmentos.GetUpperBound(0); i++) { Punto = Transformacion * base.Segmentos[i].ExtremoInicial; if (i == 0) { minX = Punto.X; minY = Punto.Y; maxX = Punto.X; MaxY = Punto.Y; base.Segmentos[i].ExtremoInicial = Punto; } else { if (i < base.Segmentos.GetUpperBound(0)) { base.Segmentos[i - 1].ExtremoFinal = Punto; base.Segmentos[i].ExtremoInicial = Punto; } else { base.Segmentos[i - 1].ExtremoFinal = Punto; base.Segmentos[i].ExtremoInicial = Punto; base.Segmentos[i].ExtremoFinal = base.Segmentos[0].ExtremoInicial; } } if (Punto.X < minX) minX = Punto.X; if (Punto.X > maxX) maxX = Punto.X; if (Punto.Y < minY) minY = Punto.Y; if (Punto.Y > MaxY) MaxY = Punto.Y; } mCaja = new Caja2D(minX, minY, Math.Abs(maxX - minX), Math.Abs(MaxY - minY)); if (Modificado != null) { Modificado(this); } }