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
1427
Так Вы напишите конкретные вопросы, а там видно будет.

 Профиль  
                  
 
 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
828
Возможно, в записи $(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
10232
Москва
Ради этого и добавили четвёртую координату. Чтобы при умножении на число точка оставалась бы той же. Для перехода к эвклидовым - поделить на w (а если w=0, то точка в бесконечности, её особо обрабатывать)

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


23/05/19
1427
Цитата:
Как они могут соответствовать одной и той же точке, если вместо "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
10232
Москва
"Приклеивают" вектор к матрице, как столбец расширенной матрицы.

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


23/05/19
1427
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
1427
User312 в сообщении #1587333 писал(а):
матрица имеет вид [0,0,0], мы её транспонируем и получаем уже столбец

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

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


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

 Профиль  
                  
 
 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
1427
User312 в сообщении #1587337 писал(а):
Правильно я понял?
И какое действие с этими матрицами? Они перемножаются?

Да.

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

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



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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