Simulación de Imanes en Unity

in #programming7 years ago (edited)

Simulación de Imanes en Unity

https://github.com/jscoobysnack/UnityMagnets

Motivación

Siempre pensé que los imanes eran interesantes. El año pasado traté de encontrar código para simulación de imanes pero no encontré nada. Decidí hacer mi propia simulación en Unity.

Empecé a aprender los fundamentos del electromagnetismo. Experimenté con varias ecuaciones de Wikipedia y decidí usar la fórmula de Gilbert para calcular la fuerza entre dos polos magnéticos.

Esta es la ecuación para la simulación.

https://en.wikipedia.org/wiki/Force_between_magnets#Force_between_two_magnetic_poles

Entonces el código de esa fórmula es:

Vector3 CalculateGilbertForce(Magnet magnet1, Magnet magnet2)
{
    var m1 = magnet1.transform.position;
    var m2 = magnet2.transform.position;
    var r = m2 - m1;
    var dist = r.magnitude;
    var part0 = Permeability * magnet1.MagnetForce * magnet2.MagnetForce;
    var part1 = 4 * Mathf.PI * dist;

    var f = (part0 / part1);

    if (magnet1.MagneticPole == magnet2.MagneticPole)
      f = -f;

    return f * r.normalized;
}

Para ejecutar una simulación de imanes basta con agregar el script MagnetWorld a un GameObject. Éste realiza todas las simulaciones magnéticas.

MagnetWorld Ajustes

Generalmente no se necesita cambiar esto.

Permeability: Permeabilidad del espacio libre. https://en.wikipedia.org/wiki/Permeability_(electromagnetism)
Max Force: Límite de la fuerza aplicada por cuadro.

Simulación

FixedUpdate

Primero todos los objetos de tipo Magnet son encontrados. Entonces la fuerza magnética es calculada y aplicada a los polos magnéticos.

Magnet

Magnet Force: La fuerza del imán.
Magnetic Pole: Uno de dos polos del imán. Polos similares se repelen. Los opuestos se atraen.

RigidBody: El objeto al que se aplicarán las fuerzas.

Configuración Sencilla

GameObjects y su componentes
Magnet Object - RigidBody
Pole - Imán con polo norte.
Pole - Imán con polo sur.

Escena básica:
1. GameObject con el componente MagnetWorld.
2. Dos objetos Magnet como se describió anteriormente.

Finito.

Los Casos de Uso

Mega Magnet

Magnetic Levitation

No es necesario tener ambos polos. Por ejemplo en la escena de Levitación Magnética:

MagLevSetup.PNG

Las esferas azules son polos magnéticos nortes. Ambos, el tren magnético y el objeto piso, tienen polos magnéticos norte. Los imanes del piso se mueven en sincronía con el tren magnético. Al pulsar las teclas de dirección, algunos de los imanes se debilitan causando un desequilibrio en las fuerzas que afectan al tren magnético resultando en movimiento.

Limaduras de Hierro

IronFilings.PNG

MagneticField.svg

Esta es una prueba comparando el campo magnético utilizando esta simulación frente a un campo magnético del mundo real. Las limaduras de hierro son imanes con RigidBodys que sólo pueden girar. El desplazamiento está inhabilitado.

Si creas algo con esto Tweet a @jscoobysnack o comenta con un video.

Los comentarios son muy apreciados, pero por favor agregue un insulto para que sea interesante. Aquí hay una plantilla para ayudar:

[comment body] and go fuck yourself.

Ejemplo:

I love magnets and go fuck yourself.

kubiak@protonmail.com

Sort:  

Congratulations @kubiak! You have received a personal award!

1 Year on Steemit
Click on the badge to view your Board of Honor.

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Congratulations @kubiak! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!