¿Cómo puedo rotar un vector (fuerza centrípeta)?
– UnityAssets3Free
hola , me llamo josel luis y en esta ocasion os traigo
nueva pregunta
Estoy tratando de implementar la fuerza centrípeta en un lenguaje de programación.
Vi algunos videos enseñando la teoría. Pero no sé cómo aplicar esto en un lenguaje de programación.
Si entiendo que tengo que aplicar fuerza centrípeta ac = v²/r
al vector velocidad. Pero no sé exactamente cómo proceder.
Tengo dos objetos de juego, uno que representa la Tierra y el otro que representa la Luna. Lo que quería era trasladar la luna alrededor de la tierra y usar un botón para «cortar/cancelar» la fuerza centrípeta para que la luna saliera a la órbita terrestre.
No tengo idea de cómo empezar esto.
Todo lo que sé es rotar así:
velocity.x = Mathf.Cos(Time.time) * earth_moon_radius;
velocity.z = Mathf.Sin(Time.time) * earth_moon_radius;
moon.transform.position = velocity;
Pero, ¿cómo aplicar la fuerza centrípeta como se describe anteriormente?
2 respuestas 2
Si solo desea que la luna gire alrededor de la tierra y algún disparador para liberar la luna, es más fácil usar la rotación alrededor de un centro en lugar de las fuerzas. Dada la siguiente jerarquía de GameObject:
Centro (MoonRotator
en anexo)
— luna
— Tierra
public class MoonRotator : MonoBehaviour
public bool cancelCentripetalForce = false;
public Vector3 angularVelocity = new Vector3 (0f, 0f, 100f);
public GameObject moon;
void Update ()
if (cancelCentripetalForce)
Vector3 radius = moon.transform.position - transform.position;
Vector3 angularVelocityRadians = Mathf.Deg2Rad * angularVelocity;
moon.rigidbody.velocity = Vector3.Cross (angularVelocityRadians, radius);
moon.transform.parent = null;
Destroy (this);
else
Vector3 rot = transform.rotation.eulerAngles + angularVelocity * Time.deltaTime;
transform.rotation = Quaternion.Euler (rot);
si cancelCentripetalForce
se establece en verdadero La Luna deja de viajar alrededor de la Tierra, pero continúa con su velocidad tangencial actual. Esto se da como:
v = ω × r
la tierra tiene localPosition
(0, 0, 0) y la Luna en este ejemplo está ubicada en el plano xy girando alrededor del eje z.
Si desea cancelar la fuerza, agregue un vector de fuerza opuesto que se base en la velocidad lineal y la dirección actual de su objeto.
Así que tengo un objeto que apunta directamente a lo largo del eje Z. El vector ‘hacia adelante’ del objeto es 0, 0, 1. Haz 1 – Math.abs(forward.x), lo mismo para y y z para obtener 1, 1 , 0 cuando está apuntando hacia adelante a lo largo del eje Z. Desea que la dirección en la que está apuntando sea 0 para que la inercia de esa dirección no se amortigüe en absoluto. Ahora puede aplicar una fuerza de cancelación en cualquier dirección NO apuntada.
Esto significa que si su objeto se mueve en cualquier dirección en el espacio del mundo que no está orientado, puede aplicar fácilmente una fuerza de cancelación que se multiplica por la velocidad lineal del objeto para obtener un movimiento circular que usa fuerzas en lugar de establecer directamente la velocidad.
Otra forma de hacer esto es resolver V configurándolo manualmente y luego encontrar el radio usando V = RW. Debe saber V y R o W. Ahora puede encontrar la fuerza necesaria para mantener la órbita estable alrededor de un punto, en lugar de agregar inercia de cada cuadro.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te halla servido