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

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

Страниц: 1 ... 5 6 [7] 8 9 ... 24   Вниз
  Печать  
Автор Тема: Геометрия (задачки)  (Прочитано 208882 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #90 : Декабрь 05, 2014, 18:21 »

#9) Какой геометрический смысл следующих выражений
Код
C++ (Qt)
QVector3D v0, v1;
..
float a1 = QVector3D::dotProduct(v0, v1) / (v0.length() * v1.length());
float a2 = QVector3D::dotProduct(v0, v1) / v0.length();
float a3 = QVector3D::dotProduct(v0, v1) / v0.lengthSquared();
QVector v2 = v0 * a3;
QVector v3 = v1 - v2;
 
Др словами кто такие a1, a2, a3, v2. v3. чему они соответствуют?
« Последнее редактирование: Декабрь 05, 2014, 18:31 от Igors » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #91 : Декабрь 05, 2014, 18:38 »

a1 — косинус угла между v0 и v1, остальное вроде с проекцией связано
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #92 : Декабрь 05, 2014, 22:39 »

v3 - вектор между точками, начало которого в 0. То есть, известно направление и длина.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #93 : Декабрь 06, 2014, 10:24 »

a1 — косинус угла между v0 и v1, остальное вроде с проекцией связано
Неплохо, обычно выпускник и косинуса не помнит Улыбающийся
Кстати, а что Вы думаете о классе QVector3D?

v3 - вектор между точками, начало которого в 0. То есть, известно направление и длина.
Неожиданный ответ, поясните ход рассуждений
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #94 : Декабрь 06, 2014, 13:46 »

а а2 (длина вектора умножить на косинус) — это не направляющий косинус? (в памяти всплыло)
Кстати, а что Вы думаете о классе QVector3D?
никогда им не пользовался, так что толком ничего сказать не могу. беглый просмотр показал наличие классических векторных операций.

P.S. вспомнилась тема про поворот вектора вокруг оси: а с этим мог бы справиться кватернион?
Цитировать
The QQuaternion class represents a quaternion consisting of a vector and scalar.

Quaternions are used to represent rotations in 3D space, and consist of a 3D rotation axis specified by the x, y, and z coordinates, and a scalar representing the rotation angle.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #95 : Декабрь 06, 2014, 14:43 »

Кстати, а что Вы думаете о классе QVector3D?

v3 - вектор между точками, начало которого в 0. То есть, известно направление и длина.
Неожиданный ответ, поясните ход рассуждений
Почему-то QVector3D/4D использую только для передачи в матрицу столбца. Всё остальное делаю своими inline (наверное, быстрее работают - но не проверял). Просто мало доверяю.

Я рассуждаю, что v1 и v2 это координаты точек в пространстве. Между ними заточён вектор, начало которого в v2. Если мы возьмем координаты точек этого вектора и вычтем из обеих v2, то получим v1 - v2; v2 - v2, точки, между которых заточён вектор с тем же направлением и длиной. Так как v2 - v2 = 0, его начало находится в 0.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #96 : Декабрь 07, 2014, 10:57 »

P.S. вспомнилась тема про поворот вектора вокруг оси: а с этим мог бы справиться кватернион?
Конечно, ведь он для вращения и предназначен

Ладно, вернемся к теме
Цитировать
float a2 = QVector3D::dotProduct(v0, v1) / v0.length();
Это проекция вектора v1 на направление заданное вектором v0. Или, точнее, знаковая длина проекции, т.к. a2 скаляр. Заметим что смыслов/интерпретаций может быть много. Не надо считать что "если это верно - значит другое неверно". Напр можно и по-другому

a2 - это косинус угла между векторами помноженный на длину v1 (как бы с точки зрения алгебры)
a2 - это координата точки v1 на оси v0 (так v1 вектор или точка? Имеем право считать так и так  Улыбающийся)

Цитировать
float a3 = QVector3D::dotProduct(v0, v1) / v0.lengthSquared();
QVector v2 = v0 * a3;
QVector v3 = v1 - v2;
a3 - тоже длина проекции но относительно длины вектора направления. Вектор v2 - вектор проекции (кстати вычисленный без вызова sqrt). И наконец v3 - вектор второй проекции перпендикулярный v2. В итоге исходный v1 разложен на 2 составляющих v2 и v3 (ну конечно имена им надо дать поприличнее)

Этот простейший прием используется очень часто. Пример
Цитировать
Есть отрезок заданный точками p0 и p1. Найти на нем точку с минимальным расстоянием до заданной точки pt
Разумеется мы открываем описание QVector3D
Цитировать
Чебоксары... чебуреки... а Чебурашки нет
Да, вот есть метод distanceToLine, но это не то..

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

Сообщений: 11445


Просмотр профиля
« Ответ #97 : Февраль 05, 2015, 11:26 »

#10) "Шейдеры" сейчас очень модны, их хотят подключать, иметь Улыбающийся Увы, дальше тупенького переписывания дело обычно не идет (впрочем такова природа OpenGL). Ладно, попробуем "копнуть". Вот неплохое изложение, где есть чертеж и формула
Цитировать
float diffuse = k_diffuse * max(dot(n_normal, lightvector), 0.0);
которая является базовой (канонической) и так или иначе присутствует практически в любом fragment shader'е. Однако в реальном мире эта формула далеко не всегда применима. Приведите пример(ы) где эта формула неверна.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #98 : Февраль 05, 2015, 13:02 »

дальше тупенького переписывания дело обычно не идет
не соглашусь. формула описывает один источник света. Если требуется N источников, то модифицируем.
Вопрос чем-то похож на моделирование солнца... Вопрос, только в каком масштабе вы работаете. В макрообъёме можно, учитывать шероховатость поверхности и другие параметры. В микрообъёме конфигурацию и тип зёрен (если для металла), но там и расчёты будут немного тяжелее.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #99 : Февраль 05, 2015, 13:25 »

не соглашусь. формула описывает один источник света. Если требуется N источников, то модифицируем.
С этим никто не спорит, более того, принимаем что свет имеет направление упрощенно описываемое вектором (в жизни это не так - ну да ладно).

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

Сообщений: 2130



Просмотр профиля
« Ответ #100 : Февраль 05, 2015, 13:35 »

Она ни к чему не применима если критерии адекватности модели будут жесткими.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #101 : Февраль 05, 2015, 13:39 »

Применима, наверное, к однородному, цельному куску материала.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #102 : Февраль 05, 2015, 13:52 »

... критерии адекватности модели будут жесткими.
Ага, блистаем академическим образованием - это хорошо  Улыбающийся

Применима, наверное, к однородному, цельному куску материала.
Давайте рассматривать объекты которые Вы можете нормально держать в руке (и часто делаете это), то есть да - однородные, цельные
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #103 : Февраль 05, 2015, 14:48 »

Однородность это http://www.ngpedia.ru/id206466p1.html
Те предметы, которые можно взять со стола, имеют, по крайней мере, переменный k_diffuse
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #104 : Февраль 05, 2015, 15:04 »

Те предметы, которые можно взять со стола, имеют, по крайней мере, переменный k_diffuse
Не надо так доверчиво воспринимать все что пишут в OpenGL. То k_diffuse - совсем не число, а цвет/фильтр. Напр "предмет красный" - значит он отражает красные лучи (часть спектра) а остальные поглощает. Если "темно-красный" - ну поглощает и часть  красных. Однако это не имеет отношения к вопросу.
 
Записан
Страниц: 1 ... 5 6 [7] 8 9 ... 24   Вверх
  Печать  
 
Перейти в:  


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