Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35

Рассчитать точку падения снаряда

06.01.2015, 13:53. Показов 4609. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Кто знает как рассчитать точку падения снаряда. Пушка стоит на рельефном террейне, когда игрок в зоне видимости пушки она начинает стрелять по нему снарядами, тоесть с заданой точки вылетают снаряды с заданой силой под углом к горизонту. Как в момент вылета снаряда узнать дистанцию от точки его падения до места его вылета?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.01.2015, 13:53
Ответы с готовыми решениями:

Расчёт падения артиллерийского снаряда
Всем привет. Unity C#. Возможно мой вопрос кому то покажется глупым, но никак не могу сообразить как рассчитать дальность полёта снаряда...

Рассчитать расстояние полёта снаряда и координаты его падения
Создать программу, рассчитывающую расстояние полёта снаряда и координаты его падения. Исходные параметры: скорость снаряда в момент...

Вычислить расстояние между точками падения осколков снаряда на Землю
Снаряд выпущен под углом к горизонту и в верхней точке траектории, соответствующей высоте 100 м, разорвался на две части массами 1 кг. и...

13
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
06.01.2015, 17:20
Ну ты же понимаешь, что это физика, и что все это можно рассчитать по формулам, ага?
Я бы не использовал встроенный физический движок для этих целей, а написал бы рассчет траектории сам, тогда можно было бы сначала рассчитать траекторию, а потом пускать по ней объект. То есть перед запуском объекта мы бы уже знали, как и куда он полетит. Но если рельеф кривой, то это тоже нужно как-то учитывать. Тут уже нужно подумать.
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
06.01.2015, 20:10  [ТС]
Долго объяснять, но у меня сначала считается угол вылета снаряда к горизонту, и когда снаряд вылетает нужно расчитать расстояние от места его падения до игрока. Да, согласен, формулами можно, но это будет примерное значение потому что террейн рельефный.

Добавлено через 5 минут
Да и тогда еще один вопрос, у меня снаряды вылетают с заданной силой, я гуглил, но так доконца и не понял, можно ли как то силу заменить на скорость, то есть чтобы снаряды вылетали с заданной скоростью.
0
17 / 5 / 3
Регистрация: 22.03.2011
Сообщений: 329
06.01.2015, 22:56
cheburashkka, опять же, наверняка, если знать массу объекта, силу, угол и коэфициент трения, то можно и скорость вычеслить. Ну а потом задавать скорость, и получать нужно значение силы.
Можешь погуглить че-то типа rigidbody velocity, и попробуй разные режимы силы, там их вроде два, Force и Impulse
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
07.01.2015, 01:35  [ТС]
lawliet93, не знаю понял ли ты меня, у меня снаряды появляются методом Instantiate и я к ним добавляю силу методом AddForce, так вот, можно ли место AddForce писать AddVelocity? Я просто сейчас думаю физикой расчитать дистанцию от места падения снаряда до места его вылета, ну а для этого надо скорость вылета снаряда.
0
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
07.01.2015, 13:15
В аттаче пример.
Вся суть в методе CalcData
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    void CalcData()
    {
        debugData.Clear();
 
        Vector3 originPosition = transform.position;
        Vector3 speed = transform.forward * BulletSpeed;
        Vector3 prevPosition = originPosition;
 
        debugData.Add(originPosition);
        RaycastHit hit = new RaycastHit();
 
        int itCount = 0;
        while (prevPosition.y > MinY)
        {
            itCount += 1;
            float stepTime = (float)itCount * Step;
            Vector3 currentPosition = originPosition + speed * stepTime + Physics.gravity * stepTime * stepTime / 2f;
            if (Physics.Raycast(prevPosition, currentPosition - prevPosition, out hit, Mathf.Abs((prevPosition - currentPosition).magnitude)))
            {
                debugData.Add(hit.point);
                break;
            }
            else
            {
                debugData.Add(currentPosition);
                prevPosition = currentPosition;
            }
        }
    }
Вкратце мы по формуле с заданым шагом по времени считаем точку и рейкастим из предыдущей точки в текущую. чем меньше шаг тем точнее точка пересечения с колайдером и сложнее вычисления.
Вложения
Тип файла: zip gravityTest.zip (1.63 Мб, 24 просмотров)
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
11.01.2015, 21:54  [ТС]
Спасибо за скрипт, только а за что отвечает переменная Step
0
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
12.01.2015, 09:12
cheburashkka, частота итераций при просчёте - чем меньше, тем точнее точка падения
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
12.01.2015, 16:27  [ТС]
А как тогда Step посчитать, или оно рандомное значение от руки вводиться?
0
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
13.01.2015, 00:52
cheburashkka, задано от руки. 0.2 0.5 вполне достаточно
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
15.01.2015, 23:14  [ТС]
arrjj, насколько я понял, то после вылета снаряда, каждые 0.3 секунды(например) считаеться примерное пересичение сферы с колайдером и выводиться координаты столкновение. А если мне нужно чтобы координаты пересичения выводились сразу же после вылета снаряда. Я создал объект, чтобы когда снаряд вылетал с пушки и пересекал объект переменная K становилась тру, и тогда считалась точка пересечения(1 раз для каждого снаряда). Только почему то вообще результаты перестали выводиться. Не подскажешь что не так пожалуйста?
0
211 / 201 / 63
Регистрация: 24.09.2014
Сообщений: 532
15.01.2015, 23:29
каждые 0.3 это шаг расчётов. у тебя сразу после вызова CalcData в списке debugData последней будет точка пересечения.
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
16.01.2015, 21:24  [ТС]
arrjj, извини, я тебя еще позадалбую, debugData.Add(hit.point); это то же самое что Debug.Log(hit.point); ?
0
1 / 1 / 0
Регистрация: 06.01.2015
Сообщений: 35
19.01.2015, 00:40  [ТС]
А если скрипт находит столкновения то на экран выводиться hit.point или currentPosition?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2015, 00:40
Помогаю со студенческими работами здесь

Найти максимальную высоту подъёма h, расстояние падения l, время полёта снаряда τ
Кто может решить, помочь решить или хотя-бы натолкнуть на решение, отпишитесь пожалуйста Составить программу для решения задачи:...

Рассчитать вес по ускорению свободного падения
Только начинаю изучать программирование, помогите решить задачу, желательно вкратце объяснив принцип создания методов :) Ускорение...

Рассчитать зависимость скорости падения спускаемого аппарата от времени
Помогите пожалуйста решить в Маткад задачу номер 6. Буду очень благодарна!

Рассчитать траекторию падения шарика под углом к горизонту
составить падение шарика под углом

Вычислить расстояние полёта снаряда по углу возвышения ствола и начальной скорости полёта снаряда
Стрельба из гаубицы. Дан угол возвышения ствола а и начальная скорость полёта снаряда. v км/ч. Вычислить расстояние полёта снаряда....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru