Как сымитировать траекторию движения по эллипсу под силой тяжести? Имеется два тела, у одного огромная масса, у другого единичная. Имеется код:using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class force : MonoBehaviour {
public Vector2 force1;
public Rigidbody2D myRigidbody;
public Rigidbody2D myRigidbody2;
public float f12;
public GameObject myObject1;
public GameObject myObject2;
public int nObject;
public float inputX;
public float inputY;
public float inputX2;
public float inputY2;
public float y;
// Use this for initialization
void Start () {
if (nObject == 1) {
myObject1 = GameObject.Find ("Sphere1");
myObject2 = GameObject.Find ("Sphere2");
myRigidbody = myObject1.GetComponent ();
myRigidbody2 = myObject2.GetComponent ();
}
if (nObject == 2) {
myObject1 = GameObject.Find ("Sphere2");
myObject2 = GameObject.Find ("Sphere1");
myRigidbody= myObject1.GetComponent ();
myRigidbody2= myObject2.GetComponent ();
}
}
// Update is called once per frame
void Update () {
}
void FixedUpdate()
{
if (nObject == 1) {
Vector2 ve = new Vector2 ();
ve.y = y;
ve.x = 0;
myRigidbody.AddForce (ve, ForceMode2D.Impulse);
}
Vector2 input = new Vector2 ();
input = myObject1.transform.position;
inputX = input.x;
inputY = input.y;
input = myObject2.transform.position;
inputX2 = 0;
inputY2 = 0;
float r12 = Mathf.Sqrt (Mathf.Pow (inputX2 - inputX, 2) + Mathf.Pow (inputY2 - inputY, 2));
float cosq12 = (inputX2 - inputX) / (r12);
float sinq12 = (inputY2 - inputY) / (r12);
float G = 7 * Mathf.Pow(10,-1);
f12 = (G * myRigidbody.mass * myRigidbody2.mass) * (Mathf.Pow (r12, -2));
force1 = new Vector2 ();
force1.x = f12 * cosq12;
force1.y = f12 * sinq12;
myRigidbody.AddForce(force1,ForceMode2D.Force);
}
}
Если не присваивать маленькому телу ForceMode2D.Impulse, то оно просто притянется к большему(что по-идее и должно быть). Но мне нужно получить вращение вокруг большего по эллипсу. Так что, если прикладываю моментальную силу, шар начинает двигаться по неведомой траектории. То есть сначала вращается в одну сторону, потом в другую, потом притягивается, а затем улетает.
Извиняюсь за данный код сразу) Думаю два варианта: проблема в физике или проблема в методах, которые я использую. Но я гуглил и читал документацию:(

21 Авг 2019 в 06:17
224 +1
0
Ответы
1

Для симуляции движения по эллипсу под воздействием силы тяжести, вам нужно учитывать не только расстояние между телами и их массы, но также угловую скорость и направление движения.

Одним из способов достичь желаемого эффекта вращения вокруг большего тела по эллипсу, может быть использование уравнений движения и законов сохранения энергии и момента импульса.

В вашем коде, в методе FixedUpdate(), вместо простого притягивания маленького тела к большему, попробуйте добавить учет угловой скорости и направления движения, чтобы имитировать вращение по эллипсу.

Также, возможно, стоит изменить способ применения силы к маленькому телу, чтобы обеспечить более плавное движение вокруг большего. Может быть стоит попробовать различные значения ForceMode2D и угловые скорости.

Надеюсь, это поможет вам решить проблему симуляции движения по эллипсу под силой тяжести в вашем проекте.

20 Апр 2024 в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир