Russian Qt Forum
Ноябрь 22, 2024, 20:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Сценарий действия сил
Страниц: [
1
]
2
3
...
6
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сценарий действия сил (Прочитано 35115 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Сценарий действия сил
«
:
Январь 16, 2016, 13:51 »
Добрый день
В симуляции участвуют 3D объекты которые движутся под воздействием разнообразных "сил". Напр в симуляции участвуют
Sphere1 // простой 3D объект - шарик
Sphere2 // еще 1 шарик
Cube1 // кубик
// любое число еще каких-то объектов
Force_Wind // простая сила типа "ветер", смещает 3D объекты в заданном направлении
Force_Path // сила двигающая объекты по заданному пути
Force_Seek // сила двигающая каждый объект к заданной точке
Сейчас никаких сценариев нет, просто все силы прилагаются ко всем объектам. И вот вылазит проблема - силы могут оказаться "несовместимы". Напр сумма сил Force_Path + Force_Seek дает в рез-те полную ерунду. Зато есть смысл применить их последовательно, напр: шарики сначала следуют по заданному пути (действует Force_Path). Когда шарики проходят весь путь, они начинают лететь к заданным точкам (Force_Seek). Достичь этого простыми средствами не удается - одни шарики могут уже закончить движение по пути, другие еще нет, а для третьих движение по пути еще и не начиналось. Поэтому обе силы должны быть по-разному активны/неактивны для разных шариков/объектов.
Также юзер может захотеть по-всякому использовать Force_Wind. Возможно он захочет добавить "легкий ветерок" действующий одновременно с 2 др силами. Но может и по-другому - только когда шарик достиг заданной (Force_Seek) точки - он сдувается штормовым ветром.
Конечно реализовать каждый конкретный случай "просто в коде" не составляет никакого труда - но это "hard-coded". А надо в общнм виде, дать юзеру возможность создать произвольный сценарий. Как это лучше сделать, и как это должно выглядеть в UI?
Спасибо
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Сценарий действия сил
«
Ответ #1 :
Январь 16, 2016, 17:36 »
Поставлю закладку, тоже интересует как это все делается.
ПС. У меня самого есть хотелка повозиться с такими вещами, сделать "каратиста" котроры бы на экране наносил бы удары в сторону смотрящего на экран. Хотелось бы знать как сделать.
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
ssoft
Программист
Offline
Сообщений: 584
Re: Сценарий действия сил
«
Ответ #2 :
Январь 17, 2016, 20:37 »
Цитата: Igors от Январь 16, 2016, 13:51
И вот вылазит проблема - силы могут оказаться "несовместимы". Напр сумма сил Force_Path + Force_Seek дает в рез-те полную ерунду. Зато есть смысл применить их последовательно,
Что значит "несовместимы"? Если имитация имеет физический смысл, то вектор результирующей силы как раз будет равен сумме всех действующих сил.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #3 :
Январь 18, 2016, 06:24 »
Цитата: ssoft от Январь 17, 2016, 20:37
Что значит "несовместимы"? Если имитация имеет физический смысл, то вектор результирующей силы как раз будет равен сумме всех действующих сил.
2 силы имеют нормальный смысл каждая - но не обе вместе. Напр для силы Force_Seek целевая точка = исходная позиция объекта. При последовательном применении все разумно - сначала объект проходит по заданному пути, затем возвращается в исходную точку, напр по прямой. Но при одновременном 2 силы просто мешают друг другу, получается ни то ни се
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Сценарий действия сил
«
Ответ #4 :
Январь 18, 2016, 08:02 »
Цитата: Igors от Январь 18, 2016, 06:24
2 силы имеют нормальный смысл каждая - но не обе вместе.
Если силы действуют при разных обстоятельствах, то у объекта должны быть состояния, с каждым из которых соотнесен перечень сил, действующих на него.
Переход из одного состояние в другое определяется фактом завершения какого либо сценария (объект проходит по заданному пути -> объект возвращается в исходную точку).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #5 :
Январь 18, 2016, 08:07 »
Цитата: ssoft от Январь 18, 2016, 08:02
Если силы действуют при разных обстоятельствах, то у объекта должны быть состояния, с каждым из которых соотнесен перечень сил, действующих на него.
Переход из одного состояние в другое определяется фактом завершения какого либо сценария (объект проходит по заданному пути -> объект возвращается в исходную точку).
С этим никто не спорит, но как это организовать, и как это должно выглядеть для юзера (UI) ?
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Сценарий действия сил
«
Ответ #6 :
Январь 18, 2016, 15:26 »
Да, наверное, как и в других подобных приложения (типа флэша, например).
У каждого объекта есть таймлайн, на определенные моменты времени вешаются определенные экшены (силы в данном случае), и их время действия. Двойной клик по экшену откроет его параметры. Как-то так, наверное.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #7 :
Январь 18, 2016, 15:38 »
Цитата: Racheengel от Январь 18, 2016, 15:26
Да, наверное, как и в других подобных приложения (типа флэша, например).
У каждого объекта есть таймлайн, на определенные моменты времени вешаются определенные экшены (силы в данном случае), и их время действия. Двойной клик по экшену откроет его параметры. Как-то так, наверное.
Как уже говорилось, это не катит
Цитата: Igors от Январь 16, 2016, 13:51
Достичь этого простыми средствами не удается - одни шарики могут уже закончить движение по пути, другие еще нет, а для третьих движение по пути еще и не начиналось. Поэтому обе силы должны быть по-разному активны/неактивны для разных шариков/объектов.
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Сценарий действия сил
«
Ответ #8 :
Январь 18, 2016, 15:51 »
Для юзера это может выглядеть так:
С каждым объектом связывается схема состояний и условий перехода между ними, ее можно представить в графическом виде.
В простейшем случае можно ограничится списком состояний (сценарием).
В качестве условий перехода можно предложить: временной интервал, достижение определенного положения в пространстве, может чего-то еще.
Сами схемы сценариев пользователь формирует отдельно, затем для разных объектов может задать разные или одинаковые сценарии.
В принципе, не зная конечного предназначения продукта, сложно посоветовать что-то удобное. То есть непонятно насколько функциональным должен быть такой инструмент.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #9 :
Январь 19, 2016, 09:52 »
Цитата: ssoft от Январь 18, 2016, 15:51
Для юзера это может выглядеть так:
С каждым объектом связывается схема состояний и условий перехода между ними, ее можно представить в графическом виде.
В простейшем случае можно ограничится списком состояний (сценарием).
Неясно в чем разница и что такое "просто список"? Как же обойтись без переходов?
Цитата: ssoft от Январь 18, 2016, 15:51
В качестве условий перехода можно предложить: временной интервал, достижение определенного положения в пространстве, может чего-то еще.
Сами схемы сценариев пользователь формирует отдельно, затем для разных объектов может задать разные или одинаковые сценарии.
Один из пользователей предложил такой вариант: каждая сила имеет параметр, целое число "приоритет". Значение -1 = "сила действует всегда", иначе силы применяются в порядке убывания приоритета. Напр если есть сила с приоритетом 10, то силы с приоритетом 9 неактивны до тех пор пока 10 не закончена для данного объекта (напр достигнут конец пути или точка назначения).
Это можно сделать "по-быстрому", но уж слишком чмошно. Все-таки "состояния" нужны, как говорится, это "сущность". С др стороны выплывает совсем немаленький редактор, и пока я очень смутно представляю как он должен выглядеть.
Да, кстати, а почему до сих пор еще не прозвучало (Q)StateMachine ?
Цитата: ssoft от Январь 18, 2016, 15:51
В принципе, не зная конечного предназначения продукта, сложно посоветовать что-то удобное. То есть непонятно насколько функциональным должен быть такой инструмент.
До боли знакомая песня
Мол, чтобы что-то решить - нужно знать все-все подробности проекта. В результате перегрузка информацией, 99% которой только мешает, суть дела просто тонет в ненужных деталях. Может это просто отсутствие абстрактного мЫшления?
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Сценарий действия сил
«
Ответ #10 :
Январь 19, 2016, 11:26 »
Цитата: Igors от Январь 19, 2016, 09:52
Неясно в чем разница и что такое "просто список"? Как же обойтись без переходов?
Список - это упрощенная форма. Переход к следующему состоянию в списке происходит сразу по окончанию предыдущего. В этом случае есть начало и конец, переход тривиальный, соответствует безусловному окончанию конкретного состояния.
Более сложный вариант - граф состояний, когда по разным условиям возможны переходы в разные состояния.
Список проще в реализации, можно обойтись, например, только табличным представлением. Граф потребует реализации уже какого-то графического редактора.
Цитата: Igors от Январь 19, 2016, 09:52
Да, кстати, а почему до сих пор еще не прозвучало (Q)StateMachine ?
QStateMachine - это всего лишь один из возможных инструментов, не факт что в данном случае удобный.
Цитата: Igors от Январь 19, 2016, 09:52
До боли знакомая песня
Мол, чтобы что-то решить - нужно знать все-все подробности проекта. В результате перегрузка информацией, 99% которой только мешает, суть дела просто тонет в ненужных деталях. Может это просто отсутствие абстрактного мЫшления?
К сожалению, 99% успеха зависит от понимания конечной цели, которая может быть выражена всего парой тезисов. Абстрактные вопросы порождают абстрактные ответы
.
Тем не менее, если мы обсуждаем серьезный продукт с возможностью пользователю управлять поведением объектов, то без состояний и редактора не обойтись.
* Каждое состояние может иметь 1 вход и N выходов, каждый из которых соответствует какому-либо условию выхода из данного состояния.
Например, 1 - закончилось заданное время, 2 - достигли точки назначения, 3 - нажатие кнопки мыши (условие с параметром) , и т.п.
* Соединить можно только выход и вход с одинаковыми выходными/входными параметрами.
* Каждый выход и вход может быть соединен только один раз.
* Пользователь должен задать начальное состояние для объекта.
* Пользователю доступны состояния только из библиотеки состояний.
* Каждое состояние, кроме входящих параметров, может иметь и индивидуальные настройки.
* С разными объектами может быть соотнесен как разные, так один и тот же граф состояний.
Можно попробовать обойтись переходами и без параметров, это будет немного проще.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #11 :
Январь 19, 2016, 12:11 »
Цитата: ssoft от Январь 19, 2016, 11:26
Например, 1 - закончилось заданное время, 2 - достигли точки назначения, 3 - нажатие кнопки мыши (условие с параметром) , и т.п.
Переход - это по существу реакция на "событие". Сейчас существуют такие события
1) Начало действия силы, которое может быть разным для разных объектов. Напр действует сила "Wander" (что-то типа броуновского движения). В какой-то момент времени появляется др сила действующая на объект, напр "Path" или "Seek". Очевидно нужно переключить объект в др состояние в котором "Wander" уже неактивна
2) Окончание действия силы - примеры уже были выше. Но только немногие силы имеют такую опции
3) Изменение поведения самой силы, напр сила Seek выдает событие когда объект приблизился к цели на заданное расстояние. Используется для "посадки" летящего объекта.
Да, возможно появятся и др события. Напр "истекло заданное время" вполне разумно. Кнопка мыши нет - симуляция не интерактивна. Ну и хорошо, появятся так появятся, что это меняет в общей схеме? По-моему ничего, ну добавится константа + строка. Также общее число сил невелико, обычно < 5. Ну десяток отсилы, хотя трудно представить для чего так городить.
По поводу "упрощенного списка" - ну как-то вряд ли, "окончание предыдущей" всего лишь один вариант.
Цитата: ssoft от Январь 19, 2016, 11:26
* Каждое состояние, кроме входящих параметров, может иметь и индивидуальные настройки.
Да
Записан
Bepec
Гость
Re: Сценарий действия сил
«
Ответ #12 :
Январь 19, 2016, 14:02 »
На деле опять идёт словоблудие в теме.
Как описать силы?
Список сил, для каждой силы период/время/усилие/условие завершения/условие начала.
Как описать взаимодействие сил?
Никак. Рассчитать пару тройку сценариев для объекта и их на выбор добавлять к силе. К примеру "прекращение других сил", "прекращение горизонтального/вертикального усилия", "остановка", "пауза".
Силы друг с другом не взаимодействуют и получается полный бред, как рассчитать?
Рассчитывается лишь общий сдвиг, основываясь на применяемых к объекту силах и взаимодействиях.
Как всё же сделать не взаимодействующие силы?
Придётся сесть и составить иерархию сил, их отношения, взаимодействие и добавить это свойство к свойствам силы.
Допустим "просто сила" - рассчитывается в совокупности сил, "уникальная сила" - игнорируются все остальные силы, "уникальная вертикальная сила" - игнор вертикальных сил и так далее.
Цитировать
Таймлайн не катит
Бред сивой кобылы. У вас симуляция растянутая по времени. Таймлайн у вас будет всегда в том или ином виде. Мб это будет счетчик тиков обработки, мб кратность симуляции, но в любом случае это будет ось времени для рассчитываемых объектов.
По сути получается следующие варианты для юзера.
Список общих сил
Список объектов
Список сил для каждого объекта
Список контрольных точек (дублирующихся на таймлайне и доступных для выбора в настройках сил)
Примерный список свойств силы: название силы, время, периодичность, усилие, направление, условие завершения, условие начала, контрольная точка начала, контрольная точка завершения.
Возможно добавление формулы расчёта в зависимости от переменных. К примеру "x=height/2" с направлением вниз, даст скорость падение в половину высоты, или же "x=time*0.1" - подобие усиливающегося ветерка.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сценарий действия сил
«
Ответ #13 :
Январь 19, 2016, 14:35 »
Цитата: Bepec от Январь 19, 2016, 14:02
На деле опять идёт словоблудие в теме.
От словоблуда слышу. Ну вот какого лезть если ни хрена не соображаете?
Цитата: Bepec от Январь 19, 2016, 14:02
Бред сивой кобылы.
Да еще так борзо
Цитата: Bepec от Январь 19, 2016, 14:02
У вас симуляция растянутая по времени. Таймлайн у вас будет всегда в том или ином виде. Мб это будет счетчик тиков обработки, мб кратность симуляции, но в любом случае это будет ось времени для рассчитываемых объектов.
Для особо одаренных еще раз повторяю.
Цитата: Igors от Январь 16, 2016, 13:51
Достичь этого простыми средствами не удается - одни шарики могут уже закончить движение по пути, другие еще нет, а для третьих движение по пути еще и не начиналось. Поэтому обе силы должны быть по-разному активны/неактивны для разных шариков/объектов.
А для Вас еще разжую: даже если я создам 1000 осей (для каждого из объектов) - юзер не сможет ими рулить. Поэтому ось времени одна
Ще раз: нема тями - слухай мовчки
Записан
Bepec
Гость
Re: Сценарий действия сил
«
Ответ #14 :
Январь 19, 2016, 15:03 »
Igors я вам о том же говорю. Таймлайн будет в любом случае. Одна ось. Она одна для всех объектов. Разниться будут только рассчитываемые силы.
Разность сил мы можем изобразить, используя иерархию и свойства сил для каждого объекта.
Одна ось, силы общие и силы персональные для объектов. Вот что получится в результате. Потому что они в исходных данных и более ничего.
Вы просите решение простой проблемы. Обобщить данные и создать на основе обобщения модель для расчётов. И для этого не нужно ни образования, ни великого ума или таланта, всего лишь нужно развитое мышление.
PS такую вот модельку любой студент напишет за пару часов. Основная проблема в том, что вы пытаетесь объять всё сразу и немедленно. Так не получится. Создайте основу, пускай простую, и дорабатывайте её.
Записан
Страниц: [
1
]
2
3
...
6
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...