Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/86: Рейтинг темы: голосов - 86, средняя оценка - 4.64
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532

Проекция 3Д на 2Д

08.01.2014, 22:58. Показов 18370. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ну извиняйте Много прогуливал в школе Разъясните пожалуйста на яблоках и пальцах, как вывелась формула такого вида для проецирования 3Д точки на 2Д плоскости
sx = xSize/2+x*dist/(z+dist)
sy = ySize/2-y*dist/(z+dist)
Очень жду от вас подробный разъяснений, рисунков.....
Вот ссылка на статью http://www.enlight.ru/faq3d/articles/11.htm



Добавлено через 1 час 34 минуты
Вот еще на эту тему http://compgraph.tpu.ru/projections.htm

 Комментарий модератора 
Кросспостинг и дублирование тем запрещены.
Не стоит дожидаться того, что Вас, все-таки, забанят.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2014, 22:58
Ответы с готовыми решениями:

Проекция
Не понимаю как использовать glOrtho на кубе в opengl, прошу помогите разобраться как построить изометрическую проекцию. case WM_SIZE: ...

Проекция контуров
Добрый день! Есть задача достроить контуры нужного количества между двумя существующими. Т.е. промежуточные контуры должны быть...

Стереографическая проекция
Здравствуйте, друзья! Мне нужна помощь со стереографической проекцией для интерфейса. Задача простая: нужно спроецировать точку сферы...

9
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
09.01.2014, 23:03
С обозначениям первой ссылки:
Составляется каноническое уравнение прямой в пространстве, соединяющий точку (0;0;-dist) (камеру) и точку (x0;y0;z0) и ищется пересечение этой прямой с плоскостью экрана, т.е. с z=0. Для этого в каноническое уравнение вместо z подставляется 0 и получается проекция исходной точки (x0;y0;z0) на эту плоскость: https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\frac{x_0\cdot dist}{z_0+dist}; \frac{y_0\cdot dist}{z_0+dist}\right)
Начало такой выбранной системы координат (X;Y) - в центре экрана, ось Х идет вправо, ось Y - вверх. Дальше нужно перевести это в пиксели. Чтобы рисовать, компьютер должен получить пиксельные координаты экрана, а эта система координат имеют другое расположение осей: начало координат экрана в левом верхнем углу, ось sX идет тоже вправо, как ось Х, а ось sY - вниз, а не вверх, как у нашей системы координат (X;Y). В статье еще не указан один параметр - какому количеству пикселей соответствует единичный отрезок в системе координат (X;Y) (иными словами, масштаб). Пусть это количество пикселей https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta. Тогда в системе (X;Y) отклонение вдоль какой-либо оси на 1 равносильно отклонению в пикселях от центра экрана на https://www.cyberforum.ru/cgi-bin/latex.cgi?\delta пикселей. Поэтому в пикселях отклонение от центра экрана будет https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\frac{\delta \cdot x_0\cdot dist}{z_0+dist}; \frac{\delta \cdot y_0\cdot dist}{z_0+dist}\right)
Поскольку центр экрана имеет в пикселях координаты https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\frac {xSize}{2};\frac{ySize}{2} \right), то для горизонтального направления пиксельная координата будет https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac {xSize}{2}+\frac{\delta \cdot x_0\cdot dist}{z_0+dist}, а для вертикального направления https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac {ySize}{2}-\frac{\delta \cdot y_0\cdot dist}{z_0+dist}. Отнимать нужно, потому что напрвление вертикальной оси нашей системы координат (X;Y) и пиксельной противоположны.
2
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
10.01.2014, 21:28  [ТС]
Где на рисунке все это ???

соединяющий точку (0;0;-dist) (камеру) и точку (x0;y0;z0) и ищется пересечение этой прямой с плоскостью экрана, т.е. с z=0.
Миниатюры
Проекция 3Д на 2Д  
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
11.01.2014, 00:50
Рисунки я сюда выкладывать не стану - много телодвижений и времени. Я ориентируюсь на ваши рисунки.
Посмотрим на вашу последнюю миниатюру.
1) Так как вы видите ось OZ, то камера находится не на этой оси (как рассматривалось в посте #2), а сдвинута по двум другим осям, например, в точку https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_{kam};y_{kam};-dist \right). Направление камеры - перпендикулярно плоскости XOY (и смотрит камера уже не на начало координат, а на точку https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_{kam};y_{kam};0 \right) на этой плоскости). Возьмем некоторую прямую, параллельную оси OZ и вычислим точку схождения, как у вас нарисовано. Параметрические координаты точки на этой прямой https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_0;y_0;z_0+at \right),t\in R. Опять (как в посте #2) соединив точку на прямой и камеру, ищем пересечение прямой через эти две точки с плоскостью XOY, подставив в уравнение этой соединительной прямой https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{x-x_{kam}}{x_0-x_{kam}}=\frac{y-y_{kam}}{y_0-y_{kam}}=\frac{z+dist}{z_0+at+dist} вместо z 0, получаем координаты проекции на плоскость XOY: https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_{kam}+dist\frac{x_0-x_{kam}}{z_0+at+dist};y_{kam}+dist\frac{y_0-y_{kam}}{z_0+at+dist} \right). Если параметр a>0, то при возрастании t мы отдаляемся по прямой || OZ, от камеры вперед. Нетрудно взять предел каждой дроби в скобках при https://www.cyberforum.ru/cgi-bin/latex.cgi?t\rightarrow +\infty, который равен 0, и тогда проекция точки на прямой, которая || OZ, стремится к https://www.cyberforum.ru/cgi-bin/latex.cgi?\left(x_{kam};y_{kam} \right). Вот и доказано аналитически то, что у вас нарисовано - что любая прямая, || OZ, при таком расположении камеры удаляется в одну и ту же точку, а именно в центр экрана (камера смотрит на плоскость XOY именно в эту точку). Это у вас называется точкой схождения.
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
11.01.2014, 01:19  [ТС]
Цитата Сообщение от jogano Посмотреть сообщение
Так как вы видите ось OZ, то камера находится не на этой оси
А можно вообще без камеры? Просто плоскость?

Есть Плоскость, есть фигура. x -известен, y-известен Исходя из x,y надо вычислить z

Для точек (x,y,z), проекцией которых является (sx,sy) имеем:

sx = xSize/2+x*dist/(z+dist),
sy = ySize/2-y*dist/(z+dist).
Для упрощения формул будем использовать обозначения

i = sx-XSize/2,
j = YSize/2-sy,
Z = z+dist.
Тогда эти формулы примут вид

i = x*dist/Z,
j = y*dist/Z,
Тут получается, что 3д точка находится по x*dist/z. Вот вы можете это объяснить на прикрепленном рисунке?
Миниатюры
Проекция 3Д на 2Д  
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
11.01.2014, 01:42  [ТС]
dist это расстояние от плоскости до точки фигуры? Или до точки схода?

Добавлено через 17 минут
эт вообще чтоо??
Я использовал формулы:

Выделить всёБез подсветки
1:
2:
sX = x/(1 - z/z0)
sY = y/(1 - z/z0)

Здесь sX, sY - экранные координаты, x, y, z - координаты в пространстве. Ось Oz направлена "вглубь" экрана. Наблюдатель находится в точке (0, 0, z0).

Это те же формулы но без xSize и ySize.
Добавлено через 3 минуты
может топик из геометрии в математику перенести?
0
Эксперт по математике/физике
 Аватар для jogano
6360 / 4067 / 1512
Регистрация: 09.10.2009
Сообщений: 7,550
Записей в блоге: 4
11.01.2014, 01:57
Цитата Сообщение от ilja123 Посмотреть сообщение
А можно вообще без камеры? Просто плоскость?
Вообще без камеры нельзя - вы откуда-то же смотрите ни 3D-фигуру. Единственных случай, когда можно обойтись без координат камеры - это когда вы фигуру проектируете ортогонально и параллельно на плоскость, но это не ваша тема. Вас интересует именно центральная проекция. Так вот центр нужно знать (где камера/глаз).
Цитата Сообщение от ilja123 Посмотреть сообщение
Есть Плоскость, есть фигура. x -известен, y-известен Исходя из x,y надо вычислить z
У 3D-фигуры 3 координаты, а не 2. По этим 3-м координатам вычисляются 2 координаты на плоскости экрана. Должны быть известны x,y,z 3D-фигуры.

Цитата Сообщение от ilja123 Посмотреть сообщение
Тут получается, что 3д точка находится по x*dist/z. Вот вы можете это объяснить на прикрепленном рисунке?
x*dist/Z (Z большое, они ж там переобозначали координаты) - это слагаемое, по которому ищется первая координата не 3D-фигуры, а ее 2D-проекции на экран.
Судя по вашему рисунку, вам нужно по плоским координатам (x;y) изображения куба при найти высоту на левой вертикальной прямой, если цент проекции - точка справа. Так?
0
3 / 3 / 2
Регистрация: 04.11.2013
Сообщений: 23
11.01.2014, 04:43
Google!!!
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
11.01.2014, 10:24  [ТС]
Ясно, что изображения объектов, находящиеся между началом координат и плоскостью проекции увеличиваются, а изображения объектов, расположенных дальше от начала координат, чем плоскость проекции уменьшаются.
То, что объекты расп. между нач. коорд. и плоскостью увеличиваются - это действ. ясно.
Но что значит
а изображения объектов, расположенных дальше от начала координат, чем плоскость проекции уменьшаются.
с какого перепуга они уменьшаться начинают???
Миниатюры
Проекция 3Д на 2Д  
0
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 532
11.01.2014, 10:48  [ТС]
В общем топик бесполезный Надо его удалять
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2014, 10:48
Помогаю со студенческими работами здесь

Перспективная проекция
Как сделать в Delphi перспективную проекцию домика. Чтобы координаты домика менялись, при нажатии клавиши, относительно наблюдателя,...

Проекция точки
Помогите пожалуйста решить, нужно Найти проекцию точки А , на прямую образованную пересечением плоскостей x+2y+37=12 и x-y=0

Аксонометрическая проекция
Доброго времени суток! Необходимо построить аксонометрическую проекцию небольшой детальки (новичек в автокаде, да и с пространственным...

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

ортогональная проекция
Найти ортогональную проекцию функции у = x ^ 3 пространства С (0,1) на подпространство Е=L(1,x). Пожалуйста помогите!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника Номенклатура по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника Сотрудники по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru