Физика космической леталки

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Физика космической леталки

Сообщение Dymanski200 21 ноя 2017, 15:21

Здравствуйте! Решил запилить простенькую космическую леталку. Но не могу понять вот что :
Для удержания объекта на орбите любой планеты, требуется минимум 3 силы - сила тяготения, центробежная сила,
С силой тяготения всё понятно, - она направлена к центру планеты (в unity я из позиции планеты, отнял позицию "ракеты" и нормализовал полученный вектор).
С центробежной тоже всё понятно, - она перпендикулярна силе движения "ракеты" или обратна силе тяготения, а вот куда направлена сама сила движения и относительно чего она, и самое главное, как её задать в Unity, я не понимаю.
Можно конечно направить её перпендикулярно силе тяготения, но я думаю это будет неправильно. :-? При взлёте "ракеты" эта сила должна быть направлена вверх, т.е. против силы тяготения, значит она не должна быть относительна чего-либо. Или не так ? Может кто-нибудь пробовал такое замутить ? Подскажите пожалуйста :((
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение waruiyume 21 ноя 2017, 16:28

Мне вот, с центробежной силой не всё понятно, насколько я знаю, такой силы нет, ну она как бы есть, но не во всех системах отсчёта.
А так, вроде бы, чтобы что-то летало по кругу, достаточно одной силы.
Синтаксис:
Используется csharp
using System.Collections;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public Transform gavCenter;
    public float startForce = 1000;
    public float gravForce = 10000;

    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.AddForce(Vector3.Cross(gavCenter.position - transform.position, gavCenter.up).normalized * startForce);
    }

        void FixedUpdate()
        {
            Vector3 toCenter = gavCenter.position - transform.position;
        rb.AddForce(toCenter.normalized*gravForce/toCenter.sqrMagnitude);
        }
}
 


P.S. Я не настоящий сварщик и нечего более вразумительного вряд ли добавлю.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Физика космической леталки

Сообщение Cr0c 21 ноя 2017, 17:11

waruiyume писал(а):А так, вроде бы, чтобы что-то летало по кругу, достаточно одной силы.

Там на выходе сумма всех, действующих на тело, сил. В результате да, всего одна сила остается.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Физика космической леталки

Сообщение Dymanski200 21 ноя 2017, 17:21

Вроде бы всё правильно, но меня напрягает то, что движение объекта всегда перпендикулярно "силе притяжения". Как тогда реализовать взлёт, изменение траектории ? (ракета будет управляться) :(
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Dymanski200 21 ноя 2017, 17:24

У меня один скрипт в котором хранятся все данные о "космическом теле", там записаны масса и направление движения в виде Vector3, который представляет из себя сумму других векторов сил из других скриптов(скрипт силы тяготения, центробежной силы,)
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Cr0c 21 ноя 2017, 17:48

Нужно две вещи: расстояние и масса. По ним считать силу к каждому телу, применять её, применять свои силы управления (тяга). Всё, осталось только размерности привести к единой системе, вписывающейся во флоат.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Физика космической леталки

Сообщение Dymanski200 21 ноя 2017, 17:56

Ладно, спасибо. Буду ковыряться
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Dymanski200 22 ноя 2017, 22:29

Ничего в голову не приходит.
После ваших сообщения, я так понял что достаточно две силы - гравитация (тяготение) и сам вектор движения объекта.
Был накатан код тяготения(константа со значением 20 - это гравитационная постоянная :) ):
Синтаксис:
Используется csharp
public class GravitationForce : MonoBehaviour {
public GameObject AnotherObject;
private float Mass1;
private float Mass2;
public Vector3 VectorPrivate;
public Vector3 Force;
public float Distance;

        void Update () {
                Mass1 = gameObject.GetComponent<SpaceObject> ().Mass;
                Mass2 = AnotherObject.GetComponent<SpaceObject> ().Mass;
                VectorPrivate = (AnotherObject.transform.position - transform.position);
                VectorPrivate.Normalize ();
                Distance = Vector3.Distance (transform.position, AnotherObject.transform.position);
                Force = VectorPrivate*(20*(Mass1*Mass2)/(Distance*Distance));

        }
}

И код самого "Космического объекта", в котором указана Масса, Ссылки-переменные на другие силы, сумму которых ставлю в Force(сумму всех сил приложенных к объекту):
Синтаксис:
Используется csharp
public class SpaceObject : MonoBehaviour {
public bool Statick;
public float Magnitude;
public GravitationForce Gravitation;
public ReactiveForce Reactive;
public Vector3 Force;
public float Mass;
        void FixedUpdate () {
                Magnitude = rigidbody.velocity.magnitude;
                if (Statick == false) {
                        Force = Gravitation.Force+Reactive.Force;
                        rigidbody.velocity = Force * Time.deltaTime;


                }

                       
        }
}

Вроде всё ясно понятно, но я жутко торможу с силой движения "public ReactiveForce Reactive;" и куда она приложена вообще не понятно.
Просто хочу сделать леталочку со выводом ракеты на орбиту, без применения сопротивления воздуха и т.п. Стартанул с земли, взлетая, отбрасывая ненужные больше части (уже придумал как сделать), долетев до определённой высоты повернулся параллельно земле, продолжил разгон - выстроил орбиту. Или это совсем не простенько и требует больших знаний в области физики ? Помогите пожалуйста или хотя бы натолкните на нужную мыслю... :-s
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Cr0c 23 ноя 2017, 00:16

По факту, надо просто ввычислить константу, которую делить на квадрат расстояния и умножать на нормализованный вектор корабль-планета. Это будет сила притяжения планеты для AddForce.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Физика космической леталки

Сообщение Dymanski200 23 ноя 2017, 07:50

НУ а как с самим движение корабля ? По сути в момент взлёта - оно прямолинейное, а в момент движения по орбите - криволинейное. Такого же не может быть ?
И зачем гравитацию преобразовывать в AddForce ? Чем не угодило velocity ?
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Cr0c 23 ноя 2017, 10:21

Dymanski200 писал(а):НУ а как с самим движение корабля ? По сути в момент взлёта - оно прямолинейное, а в момент движения по орбите - криволинейное. Такого же не может быть ?

Движение корабля будет подчинено реальной физике, если правильно высчитать размерности массы/расстояния.
Dymanski200 писал(а):И зачем гравитацию преобразовывать в AddForce ? Чем не угодило velocity ?

Потому что из-за F=m*a надо будет ручками высчитывать изменение скорости.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: Физика космической леталки

Сообщение Dymanski200 07 дек 2017, 11:49

А есть предложения как графически показать орбиту тела ? Скиньте пожалуйста документацию какую-нить
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Dymanski200 07 дек 2017, 11:50

Как узнать траекторию движения rigidbody тела ?
Аватара пользователя
Dymanski200
UNIт
 
Сообщения: 147
Зарегистрирован: 28 ноя 2014, 19:19
Skype: dim4ik3908

Re: Физика космической леталки

Сообщение Bill Gates 07 дек 2017, 12:27

Dymanski200 писал(а):Как узнать траекторию движения rigidbody тела ?


Если вы знаете по каким законом движется ваше тело, то можно рассчитать траекторию. Если же не в курсе, то брать несколько предыдущих значений и экстраполировать каким-нибудь методом.
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 16