Russian Qt Forum
Ноябрь 24, 2024, 02:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Относительные величины
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Относительные величины (Прочитано 6500 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Относительные величины
«
:
Май 27, 2015, 08:36 »
Добрый день
Есть 3 простецких параметра "смещение" вдоль каждой из осей. Эти значения добавляются напр к позиции/центру текстуры на объекте. Проблема в том что не всегда удобно использовать абсолютные значения. Напр текстура была copy/paste с одного объекта на другой - и приходится всякий раз подгонять ее смещения к размерам нового объекта. Напрашивается использовать величины относительно размера объекта. Пример;
- размеры объекта 10x20x50
- относительное смещение (1, 0.2, 0.5) соответствует абсолютному (10, 4, 25).
- теперь размеры объекта могут меняться как угодно, текстура остается на месте
И все хорошо, но как быть если размеры текущего объекта нулевые (или достаточно малы) вдоль одной или двух осей
Чисто для включения зрительной памяти прилагаю скриншот
Спасибо
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #1 :
Май 27, 2015, 12:19 »
Цитировать
если размеры текущего объекта нулевые (или достаточно малы) вдоль одной или двух осей
дизаблить поля ввода?
или что вообще требуется сделать?
Записан
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: Относительные величины
«
Ответ #2 :
Май 27, 2015, 12:33 »
Цитата: Racheengel от Май 27, 2015, 12:19
дизаблить поля ввода?
или что вообще требуется сделать?
Ага, ага
Цитировать
Чего там думать, вникать - это ж надо хотя бы внимательно прочитать. Закину вопрос - пусть все разжует, в конце-концов ему надо а не мне
Racheengel
, просьба воздух не гонять. Неясен вопрос - я как-нибудь проживу без Вашего ответа. Все Ваши последующие вопросы вынужден просто гонорировать. Спасибо за понимание.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #3 :
Май 27, 2015, 21:16 »
Цитировать
Чего там думать, вникать - это ж надо хотя бы внимательно прочитать. Закину вопрос - пусть все разжует, в конце-концов ему надо а не мне
- вообще-то это не я писал. Ошибочка вышла
ЗЫ. Чтобы получить ответ - надо сначала нормально задать вопрос. Тут же не телепаты сидят. А если вопрос задавать "просто так", не ожидая на него ответа - дык это не сюда...
Записан
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
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #4 :
Июнь 11, 2015, 00:24 »
Igors, я не злорадствую и не люблю этого, но - где же ответы? А может, просто вопроса никто не понял? Может же такое быть?
Записан
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
Гость
Re: Относительные величины
«
Ответ #5 :
Июнь 11, 2015, 01:12 »
Просто вопроса в сообщении ТСса нет, он где то в его мыслях остался.
Отвечать не на что.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Относительные величины
«
Ответ #6 :
Июнь 11, 2015, 10:56 »
Цитата: Racheengel от Июнь 11, 2015, 00:24
Igors, я не злорадствую и не люблю этого, но - где же ответы? А может, просто вопроса никто не понял? Может же такое быть?
Для начала примем Вашу версию "плохой вопрос" и попробуем еще упростить.
Есть окно размером 320x240 и в нем есть точка в позиции (100, 100). Я хочу хранить эту точку в относительных координатах QPointF(100 / 320.0, 100 / 240.0). Теперь если пользователь ресайзит окно я легко пересчитаю свою точку под новый размер окна. Такие вопросы не раз задавались начинающими.
В первом посте все то же самое только 3 измерения вместо 2. Вопрос как отрабатывать крайний случай. Это QImage не может иметь нулевые ширину/высоту, а 3D объект запросто может. Что тогда с относительными величинами, ведь делить на ноль низзя? Ну или не чистый ноль но какое-то мерзкое 1.0e-15
Вряд ли здесь "что-то непонятно". Просто нужно думать самому, а с готовыми удобными классами так не хочется
Вот если бы это было в букваре..... а так, какой-то "крайний случай" - та ну его, пусть сам разбирается. И вообще вопроса не было (как сказал набежавший хвостик
)
«
Последнее редактирование: Июнь 11, 2015, 10:58 от Igors
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #7 :
Июнь 11, 2015, 11:42 »
Ок, теперь понятно
Ну насколько я вижу - "крайний случай" - это бесконечно малый размер объекта, стремящийся к нулю. Я бы подобное дело опрашивал, сравнивая размеры по каждой из оси с какой-нибудь "дельтой", к примеру 0.01 или что там для Вас допустимо. Если размер меньше дельты - то координату точки приравнивать к 0 (иначе все равно не имеет смысл ее вычислять по причине невидимости).
Записан
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: Относительные величины
«
Ответ #8 :
Июнь 12, 2015, 11:41 »
Цитата: Racheengel от Июнь 11, 2015, 11:42
Ок, теперь понятно
Ну насколько я вижу - "крайний случай" - это бесконечно малый размер объекта, стремящийся к нулю. Я бы подобное дело опрашивал, сравнивая размеры по каждой из оси с какой-нибудь "дельтой", к примеру 0.01 или что там для Вас допустимо. Если размер меньше дельты - то координату точки приравнивать к 0 (иначе все равно не имеет смысл ее вычислять по причине невидимости).
Ну так не выходит. Напр размер бокса (x=0.000, y=5, z=5). Вид в проекции XY
Цитировать
|
| *
|
|
Точка (звездочка) имеет X координату, пользователь может ее менять. А вот размер объекта вдоль оси X нулевой или близкий к нему - хотя это совершенно нормальный объект (плоскость стоящая ребром)
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #9 :
Июнь 12, 2015, 13:35 »
Что-то не так здесь. Насколько я понимаю, точка должна принадлежать объекту (т.е. быть внутри него либо лежать на поверхности). Если размер бокса по x=0.000, то локальная координата точки x тоже должна быть вычислена как 0.000 (независимо от ее заданного относительного смещения), иначе получается, что точка вылезет за пределы бокса.
Записан
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: Относительные величины
«
Ответ #10 :
Июнь 12, 2015, 13:48 »
Цитата: Racheengel от Июнь 12, 2015, 13:35
... иначе получается, что точка вылезет за пределы бокса.
Да, вылезет, и что? Быть внутри она не обязана, такого ограничения никто не накладывал
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Относительные величины
«
Ответ #11 :
Июнь 12, 2015, 15:48 »
Если координата точки, допустим, по Х прямо пропорциональна размеру объекта по Х - то она будет редуцироваться в 0, если объект имеет размер x=0.000. Т.е. точка будет по-любому (визуально) лежать на объекте.
Ну к примеру: изначально задана ширина объекта по Х = 10, относительная координата точки xt = 5.
Тогда коэффициент xk = xt / X = 5/10 = 0.5.
Далее всегда будет верно: xt = X*xk.
Если объект увеличили вдвое: X = 20, xt = 10.
Если объект уменьшили вдвое: X = 5, xt = 2.5.
Если объект уменьшили в 100 раз: X = 0.01, xt = 0.005.
Если объект уменьшили в 10000 раз: X = 0.0001, xt = 0.00005.
Как мы видим, xt стремится к бесконечно малой величине - т.е. редуцируются практически в 0.
То есть при размере X = 0, xt = 0*0.5 = 0.
Записан
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: Относительные величины
«
Ответ #12 :
Июнь 13, 2015, 06:16 »
Цитата: Racheengel от Июнь 12, 2015, 15:48
Ну к примеру: изначально задана ширина объекта по Х = 10, относительная координата точки xt = 5.
Тогда коэффициент xk = xt / X = 5/10 = 0.5.
Далее всегда будет верно: xt = X*xk.
Ну вот видите - оказывается Вы прекрасно понимаете что такое относительные величины
И, не побоюсь предположить, другие тоже. Так зачем же играть в "непонятки"?
Только вот решения не видно. Юзверь может свободно двигать точку (звездочка на схеме выше), при этом в editBox X должно отображаться "нечто разумное" - и то что размер по X нулевой его совершенно не волнует. И если окно UI было закрыто и вновь открыто - точка должна оказаться в том же месте куда ее поставили. Поэтому лепить ноль не выход.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Относительные величины
«
Ответ #13 :
Июнь 13, 2015, 15:31 »
Ткну пальцем в жёпу. А если масштабирование объекта сделать отдельно, а размеры - отдельно. Т.е. есть у нас куб размера (1. 1. 1.). И есть точка (2. 1. -2.). Скейлим куб в 0.00001 раз, точка переходит в 0.00001*(2. 1. -2.). Юзверю показываем отскейленные цифры (возможно, ноль, если не хватает точности). Но сохраняем исходные корды+скейлфактор.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Относительные величины
«
Ответ #14 :
Июнь 14, 2015, 09:41 »
Цитата: Авварон от Июнь 13, 2015, 15:31
А если масштабирование объекта сделать отдельно, а размеры - отдельно. Т.е. есть у нас куб размера (1. 1. 1.). И есть точка (2. 1. -2.). Скейлим куб в 0.00001 раз, точка переходит в 0.00001*(2. 1. -2.). Юзверю показываем отскейленные цифры (возможно, ноль, если не хватает точности). Но сохраняем исходные корды+скейлфактор.
Oтскейленные цифры не относительные а абсолютные, поэтому изменятся при смене объекта. Получается UI которое само ставит цифры - ой нет.
Ладно, расскажу как я сделал. Вычисляю средний размер по 3 осям. Если размер по X(Y, Z) меньше среднего в 100 раз, то при переводе относительные/абсолютные задействуется средний, иначе просто размер по этой оси. При изменении объекта с вырожденного на нормальный (или наоборот) точка конечно "отлетает" но значение (X) остается разумным. А при обратном изменении попадает в исходное положение.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...