physics физика

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

physics физика

Сообщение strelec » 09.10.2015 (Пт) 11:51

доброй времени суток всем.есть 2 объекта А . Б, объекта А должен прыгнут на объект Б, с помощью силы , как рассчитать какая сила и градус надо будет для прыжка чтобы он не упал
суть в том что я нашел формулы но оно дает градус попадание а не прыжка то есть объект А попадает в объект Б но мне надо чтобы он пригнул на объект Б

Код: Выделить всё
const double g = 10; //гравитация
float L = 1500;//дистанция
float h = 0;// высота
float v0 = 200;// скорость
double tmp1 = Math.Pow(L, 2) * Math.Pow(v0, 4) - g * Math.Pow(L, 2) * (2 * h * Math.Pow(v0, 2) + g * Math.Pow(L, 2));
if(tmp1 > 0) {
double tmp2 = L * Math.Pow(v0, 2);

double tmp3 = tmp2 - Math.Sqrt(tmp1);
double tmp4 = tmp3 / (g * Math.Pow(L, 2));

double result = Math.Atan(tmp4);
Console.WriteLine("L={0} , result ={1} ", L, result * 180 / Math.PI);

как переделать формулу или по какой формуле надо рассчитать какой градус мне надо чтобы он пригнул
,заранее всем спс
Изображение

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.10.2015 (Пт) 13:37

Вместо градуса используй вертикальную и горизонтальную составляющие отдельно - получится 2 простеньких уравнения.

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

Re:

Сообщение strelec » 09.10.2015 (Пт) 16:51

Qwertiy писал(а):Вместо градуса используй вертикальную и горизонтальную составляющие отдельно - получится 2 простеньких уравнения.

привет Qwertiy , если не трудно можешь скинут формулы?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.10.2015 (Пт) 18:46

Горизонтальная скорость постоянна - берёшь расстояние по горизонтали и делишь на неё - получается время в полёте.
Это время подставляешь в уравнение вертикального перемещения, откуда получаешь вертикальную начальную скорость.
Если очень хочется именно угол (но он тебе не нужен), считаешь его по двум компонентам начальной скорости.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: physics физика

Сообщение Mikle » 10.10.2015 (Сб) 9:28

strelec писал(а):по какой формуле надо рассчитать какой градус мне надо чтобы он пригнул

Условия задачи недостаточны. Существует бесконечное количество ответов. Тебе нужен самый короткий вариант при минимальной начальной скорости? Или начальная скорость фиксирована, как часто бывает в играх?

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

Re: physics физика

Сообщение strelec » 10.10.2015 (Сб) 12:17

Mikle писал(а):
strelec писал(а):по какой формуле надо рассчитать какой градус мне надо чтобы он пригнул

Условия задачи недостаточны. Существует бесконечное количество ответов. Тебе нужен самый короткий вариант при минимальной начальной скорости? Или начальная скорость фиксирована, как часто бывает в играх?


если честно мне оба варианта подходить, но я думаю у меня будет начальная скорость,но можно и без начального скорости

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: physics физика

Сообщение Mikle » 10.10.2015 (Сб) 21:43

strelec писал(а): можно и без начального скорости

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

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.10.2015 (Пн) 13:07

Mikle, насколько я понимаю, он хочет по двем точкам определить минимальную скорость, с которой надо прыгнуть. Т. е. попасть чётко из одной крайней точки в другую крайнюю.

strelec
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 28.02.2009 (Сб) 22:04

Re: physics физика

Сообщение strelec » 12.10.2015 (Пн) 15:11

всем спасибо ,нашел в интернете формулу и чуть переделал, вот код может кому понадобится


Код: Выделить всё
       private Vector3 findInitialVelocity(Vector3 startPosition, Vector3 finalPosition, float maxHeightOffset = 0.6f, float rangeOffset = 0.11f) {
            float correctY = startPosition.y;
            startPosition.y = startPosition.y - correctY;
            finalPosition.y = finalPosition.y - correctY;

            Vector3 newVel = new Vector3();
            Vector3 direction = new Vector3(finalPosition.x, 0f, finalPosition.z) - new Vector3(startPosition.x, 0f, startPosition.z);
            float range = direction.magnitude;
            range += rangeOffset;
            Vector3 unitDirection = direction.normalized;
            float maxYPos = startPosition.y + maxHeightOffset;

            if (range / 2f > maxYPos)
                maxYPos = range / 2f;

            newVel.y = Mathf.Sqrt(-2.0f * Physics.gravity.y * (maxYPos - startPosition.y));
            float timeToMax = Mathf.Sqrt(-2.0f * (maxYPos - startPosition.y) / Physics.gravity.y);
            float timeToTargetY = Mathf.Sqrt(-2.0f * (maxYPos - finalPosition.y) / Physics.gravity.y);
            float totalFlightTime = timeToMax + timeToTargetY;
            float horizontalVelocityMagnitude = range / totalFlightTime;
            newVel.x = horizontalVelocityMagnitude * unitDirection.x;
            newVel.z = horizontalVelocityMagnitude * unitDirection.z;
            return newVel;
        }
 
 


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList