CtrEditor/Documentation/MemoriadeEvolucion.md

3.1 KiB

Aqui se mantiene la memoria de evolucion de las distintas decisiones que fueron tomadas y porque

BEPU.cs : SimulationManagerBEPU gestor de la simulacion con el motor BEPUphysics y punto de creacion y modificacion de los objetos dentro del mundo que se derivan des simBase

simBase : Clase base que da un marco a el resto de los objetos simBarrera : Simula una fotocelula con un espejo usando RayCast simBotella : Simula una botella que puede transitar por los transportes simTransporte o simCurve simCurve : Simula una curva o arco de curva de transporte

  • Se usaron esferas en vez de cilindros para mejorar la eficiencia. En el Debug3D si se usan cilindros. Revertido: Se ha vuelto a usar Cylinder para las simBotella ya que el nuevo sistema de fricción debería prevenir la rotación indeseada que ocurría con los LinearAxisMotor.

  • Se reemplazó el sistema de LinearAxisMotor que actuaba sobre las simBotella por un sistema basado en fricción. Los transportes (simTransporte y simCurve) ahora son cuerpos cinemáticos que no se mueven de su sitio. Para lograr que arrastren a las botellas, se les asigna una velocidad (Velocity.Linear o Velocity.Angular) justo antes de que el solver se ejecute (en OnSubstepStarted) y se les quita justo después (en OnSubstepEnded). Esto permite que los cuerpos cinemáticos transmitan su velocidad a través de la fricción durante la simulación, pero evita que el PoseIntegrator los desplace de su posición original, ya que su velocidad es cero cuando se integra la pose.

  • Para aumentar la estabilidad de las simBotella y evitar que roten descontroladamente sobre su eje Z al ser arrastradas, se implementó un callback IntegrateVelocity personalizado. Este callback identifica las botellas durante la integración y les aplica un amortiguamiento angular (AngularDamping) adicional solo en el eje Z. Se descartó la idea inicial de modificar dinámicamente la masa de las botellas dentro de este callback, ya que la arquitectura de BEPUphysics no permite cambiar la masa o la inercia de un cuerpo durante la fase de integración de velocidad.

  • Originalmente se habia puesto todos los objetos en awaken para poder usar las colisiones constantemente incluso con objetos en modo sleep para que los simBarrera puedan detectar las colisiones. Ahora que se usar RayCast podemos dejar que las simBotellas se duerman

  • La unica clase que se ha terminado de refactorizar respecto a el cambio de coordenadas es simBarrera y ucPhotocell. El concepto es poder separar usando metodos de SimulationManagerBEPU y estructuras como BarreraData la conversion de coordenadas de WPF a coordenadas BEPU. Para esto se usa CoordinateConverter que permite bidireccionalmente convertir las coordenadas pero esto solo se debe usar en SimulationManagerBEPU las clases derivadas de osBase solo deben manejar coordenadas WPF, mientras que las clases dervadas de simBase solo deben almacenar y usar coordenadas BEPU. La z tambien es algo que se debe transferir a SimulationManagerBEPU ya que los objetos simBase deberian recibir tambien sus coordenadas de Z desde SimulationManagerBEPU y ser SimulationManagerBEPU el que gestione las Z.