Как сымитировать траекторию движения по эллипсу под силой тяжести? Имеется два тела, у одного огромная масса, у другого единичная. Имеется код: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
175 +1
0
Ответы
1

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

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

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

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

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

20 Апр в 13:20
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир