Страница 1 из 1

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

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

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

СообщениеДобавлено: 21 ноя 2017, 16:28
waruiyume
Мне вот, с центробежной силой не всё понятно, насколько я знаю, такой силы нет, ну она как бы есть, но не во всех системах отсчёта.
А так, вроде бы, чтобы что-то летало по кругу, достаточно одной силы.
Синтаксис:
Используется 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. Я не настоящий сварщик и нечего более вразумительного вряд ли добавлю.

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

СообщениеДобавлено: 21 ноя 2017, 17:11
Cr0c
waruiyume писал(а):А так, вроде бы, чтобы что-то летало по кругу, достаточно одной силы.

Там на выходе сумма всех, действующих на тело, сил. В результате да, всего одна сила остается.

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

СообщениеДобавлено: 21 ноя 2017, 17:21
Dymanski200
Вроде бы всё правильно, но меня напрягает то, что движение объекта всегда перпендикулярно "силе притяжения". Как тогда реализовать взлёт, изменение траектории ? (ракета будет управляться) :(

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

СообщениеДобавлено: 21 ноя 2017, 17:24
Dymanski200
У меня один скрипт в котором хранятся все данные о "космическом теле", там записаны масса и направление движения в виде Vector3, который представляет из себя сумму других векторов сил из других скриптов(скрипт силы тяготения, центробежной силы,)

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

СообщениеДобавлено: 21 ноя 2017, 17:48
Cr0c
Нужно две вещи: расстояние и масса. По ним считать силу к каждому телу, применять её, применять свои силы управления (тяга). Всё, осталось только размерности привести к единой системе, вписывающейся во флоат.

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

СообщениеДобавлено: 21 ноя 2017, 17:56
Dymanski200
Ладно, спасибо. Буду ковыряться

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

СообщениеДобавлено: 22 ноя 2017, 22:29
Dymanski200
Ничего в голову не приходит.
После ваших сообщения, я так понял что достаточно две силы - гравитация (тяготение) и сам вектор движения объекта.
Был накатан код тяготения(константа со значением 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

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

СообщениеДобавлено: 23 ноя 2017, 00:16
Cr0c
По факту, надо просто ввычислить константу, которую делить на квадрат расстояния и умножать на нормализованный вектор корабль-планета. Это будет сила притяжения планеты для AddForce.

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

СообщениеДобавлено: 23 ноя 2017, 07:50
Dymanski200
НУ а как с самим движение корабля ? По сути в момент взлёта - оно прямолинейное, а в момент движения по орбите - криволинейное. Такого же не может быть ?
И зачем гравитацию преобразовывать в AddForce ? Чем не угодило velocity ?

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

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

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

Потому что из-за F=m*a надо будет ручками высчитывать изменение скорости.

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

СообщениеДобавлено: 07 дек 2017, 11:49
Dymanski200
А есть предложения как графически показать орбиту тела ? Скиньте пожалуйста документацию какую-нить

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

СообщениеДобавлено: 07 дек 2017, 11:50
Dymanski200
Как узнать траекторию движения rigidbody тела ?

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

СообщениеДобавлено: 07 дек 2017, 12:27
Bill Gates
Dymanski200 писал(а):Как узнать траекторию движения rigidbody тела ?


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