Название: Относительные величины Отправлено: Igors от Май 27, 2015, 08:36 Добрый день
Есть 3 простецких параметра "смещение" вдоль каждой из осей. Эти значения добавляются напр к позиции/центру текстуры на объекте. Проблема в том что не всегда удобно использовать абсолютные значения. Напр текстура была copy/paste с одного объекта на другой - и приходится всякий раз подгонять ее смещения к размерам нового объекта. Напрашивается использовать величины относительно размера объекта. Пример; - размеры объекта 10x20x50 - относительное смещение (1, 0.2, 0.5) соответствует абсолютному (10, 4, 25). - теперь размеры объекта могут меняться как угодно, текстура остается на месте И все хорошо, но как быть если размеры текущего объекта нулевые (или достаточно малы) вдоль одной или двух осей ??? Чисто для включения зрительной памяти прилагаю скриншот :) Спасибо Название: Re: Относительные величины Отправлено: Racheengel от Май 27, 2015, 12:19 Цитировать если размеры текущего объекта нулевые (или достаточно малы) вдоль одной или двух осей дизаблить поля ввода? или что вообще требуется сделать? Название: Re: Относительные величины Отправлено: Igors от Май 27, 2015, 12:33 дизаблить поля ввода? Ага, агаили что вообще требуется сделать? Цитировать Чего там думать, вникать - это ж надо хотя бы внимательно прочитать. Закину вопрос - пусть все разжует, в конце-концов ему надо а не мне Racheengel, просьба воздух не гонять. Неясен вопрос - я как-нибудь проживу без Вашего ответа. Все Ваши последующие вопросы вынужден просто гонорировать. Спасибо за понимание.Название: Re: Относительные величины Отправлено: Racheengel от Май 27, 2015, 21:16 Цитировать Чего там думать, вникать - это ж надо хотя бы внимательно прочитать. Закину вопрос - пусть все разжует, в конце-концов ему надо а не мне - вообще-то это не я писал. Ошибочка вышла :)ЗЫ. Чтобы получить ответ - надо сначала нормально задать вопрос. Тут же не телепаты сидят. А если вопрос задавать "просто так", не ожидая на него ответа - дык это не сюда... Название: Re: Относительные величины Отправлено: Racheengel от Июнь 11, 2015, 00:24 Igors, я не злорадствую и не люблю этого, но - где же ответы? А может, просто вопроса никто не понял? Может же такое быть?
Название: Re: Относительные величины Отправлено: Bepec от Июнь 11, 2015, 01:12 Просто вопроса в сообщении ТСса нет, он где то в его мыслях остался.
Отвечать не на что. Название: Re: Относительные величины Отправлено: Igors от Июнь 11, 2015, 10:56 Igors, я не злорадствую и не люблю этого, но - где же ответы? А может, просто вопроса никто не понял? Может же такое быть? Для начала примем Вашу версию "плохой вопрос" и попробуем еще упростить.Есть окно размером 320x240 и в нем есть точка в позиции (100, 100). Я хочу хранить эту точку в относительных координатах QPointF(100 / 320.0, 100 / 240.0). Теперь если пользователь ресайзит окно я легко пересчитаю свою точку под новый размер окна. Такие вопросы не раз задавались начинающими. В первом посте все то же самое только 3 измерения вместо 2. Вопрос как отрабатывать крайний случай. Это QImage не может иметь нулевые ширину/высоту, а 3D объект запросто может. Что тогда с относительными величинами, ведь делить на ноль низзя? Ну или не чистый ноль но какое-то мерзкое 1.0e-15 Вряд ли здесь "что-то непонятно". Просто нужно думать самому, а с готовыми удобными классами так не хочется :) Вот если бы это было в букваре..... а так, какой-то "крайний случай" - та ну его, пусть сам разбирается. И вообще вопроса не было (как сказал набежавший хвостик :)) Название: Re: Относительные величины Отправлено: Racheengel от Июнь 11, 2015, 11:42 Ок, теперь понятно :) Ну насколько я вижу - "крайний случай" - это бесконечно малый размер объекта, стремящийся к нулю. Я бы подобное дело опрашивал, сравнивая размеры по каждой из оси с какой-нибудь "дельтой", к примеру 0.01 или что там для Вас допустимо. Если размер меньше дельты - то координату точки приравнивать к 0 (иначе все равно не имеет смысл ее вычислять по причине невидимости).
Название: Re: Относительные величины Отправлено: Igors от Июнь 12, 2015, 11:41 Ок, теперь понятно :) Ну насколько я вижу - "крайний случай" - это бесконечно малый размер объекта, стремящийся к нулю. Я бы подобное дело опрашивал, сравнивая размеры по каждой из оси с какой-нибудь "дельтой", к примеру 0.01 или что там для Вас допустимо. Если размер меньше дельты - то координату точки приравнивать к 0 (иначе все равно не имеет смысл ее вычислять по причине невидимости). Ну так не выходит. Напр размер бокса (x=0.000, y=5, z=5). Вид в проекции XYЦитировать | Точка (звездочка) имеет X координату, пользователь может ее менять. А вот размер объекта вдоль оси X нулевой или близкий к нему - хотя это совершенно нормальный объект (плоскость стоящая ребром)| * | | Название: Re: Относительные величины Отправлено: Racheengel от Июнь 12, 2015, 13:35 Что-то не так здесь. Насколько я понимаю, точка должна принадлежать объекту (т.е. быть внутри него либо лежать на поверхности). Если размер бокса по x=0.000, то локальная координата точки x тоже должна быть вычислена как 0.000 (независимо от ее заданного относительного смещения), иначе получается, что точка вылезет за пределы бокса.
Название: Re: Относительные величины Отправлено: Igors от Июнь 12, 2015, 13:48 ... иначе получается, что точка вылезет за пределы бокса. Да, вылезет, и что? Быть внутри она не обязана, такого ограничения никто не накладывалНазвание: Re: Относительные величины Отправлено: Racheengel от Июнь 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. Название: Re: Относительные величины Отправлено: Igors от Июнь 13, 2015, 06:16 Ну к примеру: изначально задана ширина объекта по Х = 10, относительная координата точки xt = 5. Ну вот видите - оказывается Вы прекрасно понимаете что такое относительные величины :) И, не побоюсь предположить, другие тоже. Так зачем же играть в "непонятки"? :)Тогда коэффициент xk = xt / X = 5/10 = 0.5. Далее всегда будет верно: xt = X*xk. Только вот решения не видно. Юзверь может свободно двигать точку (звездочка на схеме выше), при этом в editBox X должно отображаться "нечто разумное" - и то что размер по X нулевой его совершенно не волнует. И если окно UI было закрыто и вновь открыто - точка должна оказаться в том же месте куда ее поставили. Поэтому лепить ноль не выход. Название: Re: Относительные величины Отправлено: Авварон от Июнь 13, 2015, 15:31 Ткну пальцем в жёпу. А если масштабирование объекта сделать отдельно, а размеры - отдельно. Т.е. есть у нас куб размера (1. 1. 1.). И есть точка (2. 1. -2.). Скейлим куб в 0.00001 раз, точка переходит в 0.00001*(2. 1. -2.). Юзверю показываем отскейленные цифры (возможно, ноль, если не хватает точности). Но сохраняем исходные корды+скейлфактор.
Название: Re: Относительные величины Отправлено: Igors от Июнь 14, 2015, 09:41 А если масштабирование объекта сделать отдельно, а размеры - отдельно. Т.е. есть у нас куб размера (1. 1. 1.). И есть точка (2. 1. -2.). Скейлим куб в 0.00001 раз, точка переходит в 0.00001*(2. 1. -2.). Юзверю показываем отскейленные цифры (возможно, ноль, если не хватает точности). Но сохраняем исходные корды+скейлфактор. Oтскейленные цифры не относительные а абсолютные, поэтому изменятся при смене объекта. Получается UI которое само ставит цифры - ой нет.Ладно, расскажу как я сделал. Вычисляю средний размер по 3 осям. Если размер по X(Y, Z) меньше среднего в 100 раз, то при переводе относительные/абсолютные задействуется средний, иначе просто размер по этой оси. При изменении объекта с вырожденного на нормальный (или наоборот) точка конечно "отлетает" но значение (X) остается разумным. А при обратном изменении попадает в исходное положение. |