Exemple #1
0
		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;
		}
Exemple #2
0
		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);
			}
		}