2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Стереометрия в программировании
Сообщение28.03.2023, 15:22 


28/03/23
7
Всем доброго времени суток!
Я сам программист, занимаюсь разработкой программы для дополненной реальности. Столкнулся со стереометрией. Я читал разные статьи и нашёл две, которые, как мне показалось, довольно хорошо описывают как и что делать, но я не понимаю их, много непонятных формул. Может быть есть, кто смог бы помочь мне разобраться?
Сами статьи:
https://habr.com/ru/post/130300/
https://itnan.ru/post.php?c=1&p=301522

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение28.03.2023, 15:37 
Заслуженный участник


23/05/19
1154
Так Вы напишите конкретные вопросы, а там видно будет.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 06:36 


28/03/23
7
Я буду опираться на статьи и задавать вопросы по ним.
Начнём со статьи хабра. Я буду задавать вопросы по пути чтения, может, мне дальше понятнее будет читать и вопросов будет меньше.

Цитата:
В то время как на обычной Евклидовой плоскости точки описываются парой координат (x,y)T, на проективной плоскости точки описываются трехкомпонентным вектором (x,y,w)T. При этом для любого ненулевого числа a, векторы (x,y,w)T и (ax, ay, aw)T соответствуют одной и той же точке. А нулевой вектор (0,0,0)T не соответствует никакой точке и выкидывается из рассмотрения.

Что обозначает "T"? Записана как степень, но, полагаю, это не она.
Почему используется "w"? Это просто обозначение вместо оси Z или подразумевается что-то другое?
Цитата:
для любого ненулевого числа a, векторы (x,y,w)T и (ax, ay, aw)T

Как понять запись
Цитата:
(ax, ay, aw)T
? Т.е. вместо "a" я возьму число 2. Будет выглядеть (2x, 2y, 2w)T. Что это значит?

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 08:10 


11/07/16
825
Возможно, в записи $(x,y,z)^T$ буква $T$ в показателе обозначает транспонирование. Из типографских соображений вектор-столбец записывается как транспонированный вектор-строка. Увы, запутывающий стиль изложения в духе Карла Маркса все еще встречается.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 08:48 


28/03/23
7
Да, скорее всего, Вы правы, транспонирование имеет место быть.
А по поводу "w" так и не понятно, потому что читая далее идёт абзац:
Цитата:
Трехмерное проективное пространство. По аналогии с проективной плоскостью, точки трехмерного проективного пространства определяются четырехкомпонентным вектором однородных координат (x,y,z,w)T. Опять же для любого ненулевого числа a, координатные вектора (x,y,z,w)T и (ax,ay,az,aw)T соответствуют одной и той же точке.


С x, y, z понятно, координаты в пространстве, всё же, что такое "w"?

И к чему относятся координатные вектора (x,y,z,w)T и (ax,ay,az,aw)T ? Как они могут соответствовать одной и той же точке, если вместо "a" подставить число, да хотя бы 2, то значения будут отличными от первого. Например, первый вектор будет (1,2,3,4)T, а второй получается (2,4,6,8)T, точка же получается в 2 раза дальше будет относительно первого вектора?

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 09:16 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
Ради этого и добавили четвёртую координату. Чтобы при умножении на число точка оставалась бы той же. Для перехода к эвклидовым - поделить на w (а если w=0, то точка в бесконечности, её особо обрабатывать)

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 09:48 
Заслуженный участник


23/05/19
1154
Цитата:
Как они могут соответствовать одной и той же точке, если вместо "a" подставить число, да хотя бы 2, то значения будут отличными от первого.

Значения будут отличны, но мы как бы говорим: нам пофиг, мы будем считать это одним и тем же. Там дальше идет картинка с камерой и проекцией на плоскость. Грубо говоря, если точку $X$ двигать вдоль луча (то есть, умножать все ее координаты на одно и то же число $a$), то точка $x$ ее проекции на плоскость изображения от этого не изменится.
А вообще в статье изложение очень сжатое. Я бы посоветовал скачать книгу "Multiple View Geometry in Computer Vision" by Hartley, R. I. and Zisserman, A., на которую ссылается автор. Там гораздо подробнее разобрано, с примерами и с явным оговариванием обозначений вроде транспонирования.
Кроме того, именно про проективную геометрию, на мой взгляд, хорошо написано в Курант Р., Роббинс Г. "Что такое математика". Вам нужен параграф 6 главы 4 (в издании 2000 года). Там как раз про координаты и аналитический подход. Но можете прочитать и предыдущие из этой главы.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 10:29 


28/03/23
7
Возможно, я доберусь до этих книг. Чтобы их начать читать, хотелось бы разобраться в формах записи.

Дальше по статье идёт формула K = [R|t].

Возьму цитату из второй статьи
Цитата:
R — матрица поворота размером 3x3, t — трехмерный вектор смещения — вместе они составляют матрицу перехода [R|t] (размером 3x4), она определяет положение камеры в кадре.


С этой цитатой понятно, получается что-то вроде:
[ 0,0,0, | 0,
0,0,0, | 0,
0,0,0 | 0 ]

Что означает вертикальная черта?

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 10:54 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
"Приклеивают" вектор к матрице, как столбец расширенной матрицы.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 10:56 
Заслуженный участник


23/05/19
1154
User312 в сообщении #1587328 писал(а):
Возможно, я доберусь до этих книг. Чтобы их начать читать, хотелось бы разобраться в формах записи.

Ровно наоборот. Потому что в книгах нужную нотацию (кроме самой общепринятой) вводят по ходу изложения, а в таких статьях она уже подразумевается известной.

User312 в сообщении #1587328 писал(а):
Что означает вертикальная черта?

Она просто показывает, что блоки этой результирующей матрицы имеют разное происхождение. После того, как матрица составлена, черту можно убрать и обращаться с матрицей как с обычной размером 3 на 4.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 11:53 


28/03/23
7
Теперь становится куда понятнее! :-)

Теперь хотелось бы понять запись в статье хабра под пунктом 3 "Пара камер".

На рисунке 2 (из статьи) используются две камеры которые расположены, допустим, под углом 90 градусов. В моём же случае камеры находятся параллельно на таком же расстоянии друг от друга, как глаза у человека(возможно, расстояние будет меняться). Естественно, если смотреть на изображения с правой и левой камер, будет видно, что изображения с обеих камер будут немного разниться. Но, как я понимаю, принцип остаётся тем же, как и описано в статье.

Мне не понятна запись
Цитата:
x'T F x = 0


x' - это координаты точки на правой камере, матрица имеет вид [0,0,0], мы её транспонируем и получаем уже столбец
Код:
[0,
0,
0,]

Далее идёт матрица F размером 3x3, получается вид
Код:
[0,  [0,0,0,
0,   0,0,0,
0,]  0,0,0]

И дальше идёт не транспонированная матрица x [0,0,0].
В итоге получается вид:
Код:
[0,  [0,0,0,
0,   0,0,0,  [0,0,0] = 0
0,]  0,0,0]


Между матрицами подразумевается знак умножения же?

Это нормальный вид? Или я не так понимаю запись?

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 12:01 
Заслуженный участник


23/05/19
1154
User312 в сообщении #1587333 писал(а):
матрица имеет вид [0,0,0], мы её транспонируем и получаем уже столбец

Нет. Вектор координат изначально всегда имеет вид вектор-столбца. [0,0,0] - это уже транспонированный вид Вашего x'.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 12:04 


11/07/16
825
Посмотрите "Гомогенные координаты" в Вики.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 12:13 


28/03/23
7
Dedekind, т.е. конечный вид получается зеркальным...

Код:
            [0,0,0,   [0,
[0,0,0]   0,0,0,    0,  = 0
             0,0,0]    0,]


Правильно я понял?
И какое действие с этими матрицами? Они перемножаются?

-- 29.03.2023, 16:16 --

Markiyan Hirnyk, спасибо за подсказку! Я пока что бегло прочитал, более менее понятно о чём пишут. Как будет время, обязательно прочитаю всё досконально.

 Профиль  
                  
 
 Re: Стереометрия в программировании
Сообщение29.03.2023, 12:17 
Заслуженный участник


23/05/19
1154
User312 в сообщении #1587337 писал(а):
Правильно я понял?
И какое действие с этими матрицами? Они перемножаются?

Да.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group