![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Реализую в флеш игре взрыв.
Есть три переменные: power (сила), distance (дистанция), vec (нормированный вектор, указывает направление взрыва. Сейчас считаю итоговую силу взрыва (импульс) так: power / distance * vec. Не нравится, как получается затухание, чем ближе объект к источнику взрыва, тем более непропорционально увеличивается сила (особенно когда почти впритык). Подскажите? какую формулу в данном случае лучше использовать, для пропорционально силы взрыва в зависимости от дистанции (затухание). |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
Давайте для начала определимся с терминами - а уж с физикой справимся на раз-два).
во-первых, что есть вообще направленный взрыв? Вообще советовал бы даже не вдаваясь в подробности использовать экспоненту типа exp(-k*distance) для затухания (если взрыв направленный - как я его понимаю - плоская взрывная волна, затухает только за счет рассеяния). Для всенаправленного взрыва использовать distance^-1. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
>>Давайте для начала определимся с терминами - а уж с физикой справимся на раз-два).
>>во-первых, что есть вообще направленный взрыв? На самом деле взрыв у меня не направленный, а всенаправленный. Просто я перебираю физ объекты в сцене и направление задается как: позиция центр взрыва - позиция центра очередного объекта и все это нормирую. В реале же будет боаться не центр, а ближайшая точка формы объекта, но это сути не меняет. Для всенаправленного взрыва использовать distance^-1. Т.е. получается power / (distance ^ -1) * vec Мне вот посоветовали что-то подобное: power / (distance ^ k) * vec, где k подбираемое число из диапозона [1 : 2]. Объясните пожалуйста почему у вас возводится в степень -1, а во втором случае предлагается диапазон от 1-2? Последний раз редактировалось Alexmody; 24.11.2011 в 20:55. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Ну вот яркость света для наблюдателя рассчитывается, как яркостьИсточника / квадратРасстоянияДоНаблюдателя. Расстояние в метрах, яркость в люменах (по-моему).
Думаю и со взрывом будет наподобие вышеизложенного.
__________________
Загружаем картинки, минуя ошибки безопасности Последний раз редактировалось i.o.; 24.11.2011 в 21:33. |
|
|||||
|
Взрыв, все таки, не свет.
http://www.pirotek.info/Start/pascetmocnosti.htm
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 24.11.2011 в 23:57. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Все равно стоит ознакомиться с http://ru.wikipedia.org/wiki/%D0%97%...82%D0%BE%D0%B2
__________________
Загружаем картинки, минуя ошибки безопасности |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Вообще 1/(r*r) в физике растёт из того, что если вот есть сферический взрыв в вакууме, то число частиц, пролетающих через единицу площади сферы вокруг этого взрыва пропорциональна 1/r^2 (r - радиус сферы). В плоском случае (когда не сфера а круг и речь идёт о числе частиц, пролетающий через единицу длины окружности) - 1/r. В невесомости в вакууме импульс, который передадут эти частицы так же меняется с расстоянием (потому что частицы взрыва летят равномерно и прямолинейно).
PS: в игре на самом деле подойдёт почти любая неотрицательная убывающая функция) Только советую, если расстояние больше некоторого, то взрыв на тело не применять вообще.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 25.11.2011 в 03:09. |
|
|||||
|
Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
|
^ - ЭТО Я как раз возведение в степень имел ввиду, а -1 - так это я ошибся. В знаменателе квадрат конечно должен быть
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
Вообщем поэкспериментировал, построил графики с помощью ресурса: http://www.yotx.ru/default.aspx сделал следующие выводы:
В формулах опущу умножение на vec (направление). y = 1/(x^k) - меняем k в диапазоне 0-1, хорошая формула. Если подставлять в k отрицательные значения, то будет: "чем дальше объект от центра взрыва, тем сильнее он будет получать, что конечно неправильно" y = 1/sqrt(x^(k)) - меняем k в диапазоне 0-1, на основе вышеприведенной с корнем, тоже интересный результат выходит, хотя наверное лишнее ----------- y=1/sqrt(x) - не особо пропорциональное увеличение силы взрыва к центру + без настроек коэффициента, ниже два схожих варианта гораздо лучше y=1/(1+sqrt(x)), неплохой вариант, но еще лучше y=1/(k+sqrt(x)) - меняем k в диапазоне 0-1, вот эта формула очень понравилась, дает хороший и гибкий в настройке вариант. Победители: y = 1/(x^k) - меняем k в диапазоне 0-1 y=1/(k+sqrt(x)) - меняем k в диапазоне 0-1 Всем спасибо, великолепно помогли. |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|