Russian Qt Forum
Апрель 19, 2024, 17:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Градиент (постановка)  (Прочитано 12531 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Сентябрь 28, 2015, 12:45 »

Добрый день

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

Есть поверхность (для простоты плоскость) на которой лежит N брусков. Все это полигонные 3D объекты. Юзер хочет управлять ориентацией брусков, напр сделать так чтобы все они развернулись к центру (левая картинка = ожидаемый рез-т). Для этого он берет кисточку и рисует круг на плоскости (правая картинка). Дальше в его представлении умная (моя) программа должна сделать все автоматычно.

Детали (для взыскательных постановщиков). Ну цвет задается в вертексах. Бруски не меняют своей позиции но могут быть повернуты вокруг своих центров. Что еще? Не вижу, пожалуй все.

И вот я не вижу как сделать то что хочет юзер. Подскажите

Спасибо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Сентябрь 28, 2015, 15:10 »

А что это должно быть "физически"? Какое-нибудь магнитное поле?
Записан

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 не волк, в лес не уйдёт
Bepec
Гость
« Ответ #2 : Сентябрь 28, 2015, 15:36 »

Задача поставлена неясно Веселый

Разворот брусков к центру. Центру чего?
Пользователь рисует круг на плоскости. Для чего?
Программа должна сделать автоматычно. Что сделать?

И каким макаром связан градиент и положение брусков? Веселый

Есть данные для начала, нет описания результата. Что в результате то получиться должно?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Сентябрь 28, 2015, 15:51 »

А что это должно быть "физически"? Какое-нибудь магнитное поле?
Ну а почему нет? Вполне удачная аналогия. Но она необязательна. Пользователь задает (рисует) градиент в и рассчитывает использовать его вектора/направления, а для чего - уже его дело. Ну вот напр для поворота/ориентации

Задача поставлена неясно Веселый

Разворот брусков к центру. Центру чего?
Пользователь рисует круг на плоскости. Для чего?
Программа должна сделать автоматычно. Что сделать?

И каким макаром связан градиент и положение брусков? Веселый

Есть данные для начала, нет описания результата. Что в результате то получиться должно?
Боже, ну почему при чтении Ваших ответов в моей памяти сразу оживают Бивис и Батхед?  Плачущий Плачущий
Ну как можно не сообразить чисто "по картинкам", даже не читая? Все, больше нет сил Вам отвечать  Плачущий
Записан
Bepec
Гость
« Ответ #4 : Сентябрь 28, 2015, 16:21 »

Не могу по мутному описанию вообразить тот самый вариант, что подразумеваете в глубинах разума вы Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Сентябрь 28, 2015, 16:27 »

А если пользователь нарисует 2 кружка, к какому центру должны развернуться бруски? К сильнейшему или к ближайшему?
Записан

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 не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Сентябрь 28, 2015, 18:38 »

В общем, если бруски не перемещаются по полю, а только вращаются, и вращение должно зависеть только от локального градиента (который находится в Bounding Box бруска, ну т.е. не бокс, а окружность, описывающая брусок), то я бы разбивал для каждого бруска его описывающую окружность на сегменты, скажем, с шагом в 1 градус и искал бы наиболее "сильный" градиент между началом и концом сегмента. Ну и соотв-но разворачивал бы брусок вдоль него. Но это только если в виду имеется именно это...
Записан

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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Сентябрь 29, 2015, 04:47 »

А если пользователь нарисует 2 кружка, к какому центру должны развернуться бруски? К сильнейшему или к ближайшему?
Я рассказал все что получил от пользователя. Да, задача еще не поставлена (см название топика).

Думается к ближайшему, существует градиент в точке, он локален. Там где градиент = 0 (черный цвет), он не должен применяться вообще (ну или "нечего применять"), там бруски остаются в исходном положении. Каких-то др разумных вариантов не видно, поэтому уточнять это у пользователя не нужно.  

В общем, если бруски не перемещаются по полю, а только вращаются, и вращение должно зависеть только от локального градиента (который находится в Bounding Box бруска, ну т.е. не бокс, а окружность, описывающая брусок), то я бы разбивал для каждого бруска его описывающую окружность на сегменты, скажем, с шагом в 1 градус и искал бы наиболее "сильный" градиент между началом и концом сегмента. Ну и соотв-но разворачивал бы брусок вдоль него. Но это только если в виду имеется именно это...
Плоскость - 3D модель, в данном случае состоит из квадратиков(полигонов), см сетку на правой картинке. Цвет задан в вертексах, это OpenGL его рисует плавно, на самом деле данные дискретны. Поэтому совершенно не понял причем здесь Bounding Box.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #8 : Сентябрь 29, 2015, 08:38 »

из постановки задачи можно понять, что бруски надо развернуть одним из концов к центру круга, вращая вокруг их центра - тут вроде все ясно как делать
если брусок не попал в круг полностью - не ккрутить его
если попал частично - повернуть частично
пользователя заставить подписать это "тз" и делать )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Сентябрь 29, 2015, 09:03 »

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

если брусок не попал в круг полностью - не ккрутить его
если попал частично - повернуть частично
пользователя заставить подписать это "тз" и делать )
Тогда выходит круг "boolean", напр почти черный круг и тот что на рисунке выше - дадут одинаковый рез-т. Вообще круг здесь для примера, юзер может намазюкать все что хочет. Попал полностью или как - то для бруска просто, а для др фигуры (в общем виде) геморрой порядочный. Лучше обойтись центром который у фигуры всегда есть. Правда тогда хз как вычислять "частично".

С абстракцией напряженка. Круг - значит только круг, брусок - только брусок Улыбающийся Но все равно, хоть какие-то мысли есть - уже хорошо

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Сентябрь 30, 2015, 10:56 »

Цитировать
Поэтому совершенно не понял причем здесь Bounding Box.

Ну я как рассуждал. Есть брусок, который может вращаться только вокруг своего центра. Значит, максимальная область "воздействия" - это описанная им окружность диаметром в длину бруска.

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

Поэтому мы можем разбить окружность на Х диаметров с шагом в N градусов и посчитать градиент каждого полученного отрезка. Затем выбрать максимальный и расположить брусок вдоль него.
Записан

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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Сентябрь 30, 2015, 11:27 »

Ну я как рассуждал. Есть брусок, который может вращаться только вокруг своего центра. Значит, максимальная область "воздействия" - это описанная им окружность диаметром в длину бруска.
На мой взгляд - не очень естественно. Не забить ли нам на размеры объекта и использовать только его центр (точку)? Ведь круг в примере намного больше бруска, если наоборот то по-любому смысла нет. Кобыле-реализации станет явно легче Улыбающийся Но тогда возникает вопрос: а что считать "степенью воздействия"?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Сентябрь 30, 2015, 11:39 »

Ну а если мы возьмем только центр - как по одной точке градиент вычислять??

И как должен быть ориентирован брусок, если вдруг он попадет точно в центр зеленого круга?
Записан

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 Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Октябрь 01, 2015, 07:27 »

Ну а если мы возьмем только центр - как по одной точке градиент вычислять??

И как должен быть ориентирован брусок, если вдруг он попадет точно в центр зеленого круга?
Ну ясно, "задам вопрос, поддержу разговор, а там видно  будет" Улыбающийся Это нормально, корректно - но мне это как-то неинтересно. Хотелось бы получить мешок идей (пусть спорных), а не растолковывать что такое градиент.

Ладно, сейчас заканчиваю (отлаживаюсь), потом, если интересно, расскажу. (очередной раз обделался с математикой).
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Октябрь 01, 2015, 09:18 »

Дык я вроде бы и предлагаю -ориентировать бруски по их локальным градиентам. Все равно других вариантов пока я не вижу.
Записан

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 не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.