Интерполяция атрибута (Перспективная коррекция)

Всё, что не упомянуто выше.

Интерполяция атрибута (Перспективная коррекция)

Сообщение repeat » Чт май 21, 2020 2:55 am

Здравствуйте. Допустим у нас есть отрезок [tex]\vec{AB}[/tex] и мы хотим его спроецировать на линию(в 3D - плоскость). Задача состоит в том, чтобы зная экранные координаты (Ax', Bx') двух точек [tex]\vec{A}[/tex] и [tex]\vec{B}[/tex] путем интерполяции в пространстве экрана(серый отрезок) получить полноценные координаты точки [tex]\vec{C}[/tex].

[tex]\frac{Cz}{d} = \frac{Cx}{Cx'} \Rightarrow Cz = \frac{d}{\frac{Cx'}{Cx}}[/tex]

[tex]\frac{Az}{d} = \frac{Ax}{Ax'} \Rightarrow Ax' = \frac{dAx}{Az}[/tex]

[tex]\frac{Bz}{d} = \frac{Bx}{Bx'} \Rightarrow Bx' = \frac{dBx}{Bz}[/tex]

[tex]Cx = (1-t)Ax + tBx[/tex]

[tex]Cx' = (1-s)Ax' + sBx' \Rightarrow Cx' = (1-s)\frac{dAx}{Az} + s\frac{dBx}{Bz}[/tex]

[tex]Cz = \frac{d}{\frac{Cx'}{Cx}} = \frac{d}{\frac{(1-s)\frac{dAx}{Az} + s\frac{dBx}{Bz}}{(1-t)Ax + tBx}} = \frac{(1-t)Ax + tBx}{(1-s)\frac{Ax}{Az} + s\frac{Bx}{Bz}}[/tex]

Из логики я понимаю, что какие бы мы не брали Ax и Bx то Cz остается одна и та же. Но как это доказать незнаю.

(кроме как просто принять Ax = Bx): [tex]Cz = \frac{1}{(1-s)\frac{1}{Az} + s\frac{1}{Bz}}[/tex]

И даже когда я принимаю Ax = Bx, я не понимаю геометрический смысл такого решения. Я надеялся, что раз Cz не зависит от Ax и Bx то они сократятся, но я не могу понять как их можно сократить, или может я чтото упускаю?

[tex][/tex]
Вложения
Perspective.jpg
Perspective.jpg (31.79 КБ) Просмотров: 2035
repeat
 
Сообщения: 3
Зарегистрирован: Чт май 21, 2020 2:12 am

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение Rados » Чт май 21, 2020 1:28 pm

какие бы мы не брали Ax и Bx то Cz остается одна и та же. Но как это доказать незнаю

Алгебраическим методом ЭТО Вы и не докажете, потому что координаты "точек" А и В указаны только на оси "Х" и почему-то со стрелками (как векторы?).
А на экране ВИДНО, что точка А расположена ВЫШЕ точки В.
Плоскость, на которую "предполагается спроецировать" А и В обозначена серой линией, то есть эта плоскость ПАРАЛЛЕЛЬНА координатной плоскости XY, значит Z (высота) у всех трёх точек будет одинаковая (Z = d)!
Новые координаты точек в плоскости АВС на схеме указаны неправильно, они должны быть на пересечении серой линии и пунктиров из точек А, В и С (как проекций на ось "Х". Тогда соотношение (1 - t) : t будет соответствовать соотношению (1 - s) : s
Аватара пользователя
Rados
 
Сообщения: 3558
Зарегистрирован: Вт ноя 20, 2018 8:36 am
Откуда: РОССИЯ

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение repeat » Чт май 21, 2020 2:17 pm

Алгебраическим методом ЭТО Вы и не докажете, потому что координаты "точек" А и В указаны только на оси "Х" и почему-то со стрелками (как векторы?)

Ну я не загромождал рисунок специально, в действительности известны 2 точки A B и их координаты X и Z => A(Ax,Az); B(Bx,Bz);

Новые координаты точек в плоскости АВС на схеме указаны неправильно, они должны быть на пересечении серой линии и пунктиров из точек А, В и С (как проекций на ось "Х".

В центральном проецировании точки проекции находятся на пересечении плоскости проекции и линией между фокусом проецирования и точкой. В ортогональном проецировании ДА(ну или можно сказать фокус находится в бесконечности).

Вот допустим если мы знаем параметр t то можно найти:
[tex]Cz = (1-t)Az + tBz[/tex] и [tex]Cx = (1-t)Ax + tBx[/tex] затем можно найти:

[tex]Cz' = \frac{Cz}{Cz} = d[/tex] и [tex]Cx' = \frac{Cx}{Cz}[/tex] затем, зная (Ax,Az) и (Bx,Bz) аналогично находим:

[tex]Az' = \frac{Az}{Az} = d[/tex] и [tex]Ax' = \frac{Ax}{Az}[/tex]

[tex]Bz' = \frac{Bz}{Bz} = d[/tex] и [tex]Bx' = \frac{Bx}{Bz}[/tex] а далее зная Ax' Cx' и Bx' можно найти s:

[tex]s = \frac{Cx'-Ax'}{Bx'-Ax'}[/tex]

Это можно сказать прямая задача, а как решить обратную: Найти Cx,Сz зная (Ax,Az), (Ax,Az), s, (Ax',Az'= d), (Bx',Az' = d)?
Вот я пытаюсь идти в обратную сторону:

[tex]\frac{Cz}{d} = \frac{Cx}{Cx'} \Rightarrow Cz = \frac{d}{\frac{Cx'}{Cx}}[/tex]

[tex]\frac{Az}{d} = \frac{Ax}{Ax'} \Rightarrow Ax' = \frac{dAx}{Az}[/tex]

[tex]\frac{Bz}{d} = \frac{Bx}{Bx'} \Rightarrow Bx' = \frac{dBx}{Bz}[/tex]

[tex]Cx = (1-t)Ax + tBx[/tex]

[tex]Cx' = (1-s)Ax' + sBx' \Rightarrow Cx' = (1-s)\frac{dAx}{Az} + s\frac{dBx}{Bz}[/tex]

[tex]Cz = \frac{d}{\frac{Cx'}{Cx}} = \frac{d}{\frac{(1-s)\frac{dAx}{Az} + s\frac{dBx}{Bz}}{(1-t)Ax + tBx}} = \frac{(1-t)Ax + tBx}{(1-s)\frac{Ax}{Az} + s\frac{Bx}{Bz}}[/tex]

Но как сократить это выражение чтобы оно приняло вид: [tex]Cz = \frac{1}{(1-s)\frac{1}{Az} + s\frac{1}{Bz}}[/tex] незнаю.

(кроме как просто принять Ax = Bx): [tex]Cz = \frac{1}{(1-s)\frac{1}{Az} + s\frac{1}{Bz}}[/tex]
repeat
 
Сообщения: 3
Зарегистрирован: Чт май 21, 2020 2:12 am

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение Rados » Чт май 21, 2020 5:28 pm

Задачка сформулирована не очень понятными "терминами", но если на серой линии УЖЕ показана искомая проекция точек А, В и С, то тогда надо построить вспомогательную проекцию этих точек на плоскость YX.
Ось Y тогда будет перепендикулярна к оси Х.
Позицию точки С выбираем произвольно - по перпендикуляру от С(х), затем от этой точки отмерям дугой расстояние (1-t) на перпендикуляре от А (х), и так же дугой расстояние (t). Теперь все три проекции точек А, В и С лежат в плоскости YX.
Tеперь это как-то надо записть в "алгебраическом виде - через соотношения (1-t) : t или (1-s) : s
Вложения
Perspective.jpg
Perspective.jpg (48.59 КБ) Просмотров: 2019
Аватара пользователя
Rados
 
Сообщения: 3558
Зарегистрирован: Вт ноя 20, 2018 8:36 am
Откуда: РОССИЯ

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение repeat » Чт май 21, 2020 6:40 pm

В данном случае у нас 2D задача. Можно было рисовать в осях X и Y вместо X и Z (но мне удобнее воспринимать X и Z).
Кажется понял как прийти к такому решению [tex]Cz = \frac{1}{(1-s)\frac{1}{Az} + s\frac{1}{Bz}}[/tex]
Ниже из рисунка видно что [tex]\frac{a}{b} = \frac{a'}{b'} = \frac{a'}{b'} = t[/tex] (или [tex]1-t[/tex] смотря как нам легче), т.е параметр t (или 1-t) независит от x-координаты точки (при постоянной z-координате). Т.е зная параметр t => Сz выражается единым образом.

Мы нашли что [tex]Cz = \frac{(1-t)Ax + tBx}{(1-s)\frac{Ax}{Az} + s\frac{Bx}{Bz}}[/tex] Это выражение можно переписать еще так (выразив [tex]Bx = Ax + \triangle x)[/tex]:

[tex]Cz = \frac{Ax+t \triangle x}{(1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz}}[/tex]

Поскольку мы выше доказали, что Cz выражается единым образом при любых Cx (т.е при любых Ax и Bx, т.к Cx = f(Ax,Bx)), но постоянном параметре t, то справедливо будет следующее:

[tex]Cz = \frac{Ax+t \triangle x}{(1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz}} = \frac{Ax+tk \triangle x}{(1-s)\frac{Ax}{Az} + s\frac{Ax+tk \triangle x}{Bz}}[/tex]

Т.е мы приравняли функцию Cz = f(Ax,Bx,...) двух разных точек => [tex]Cz = f(Ax,Ax + \triangle x,...) = f(Ax,Ax + k \triangle x,...)[/tex]

Вычтем [tex]f(Ax,Ax + \triangle x,...) - f(Ax,Ax + k \triangle x,...) = 0[/tex]:

[tex]\frac{Ax+t \triangle x}{(1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz}} - \frac{Ax+tk \triangle x}{(1-s)\frac{Ax}{Az} + s\frac{Ax+tk \triangle x}{Bz}} = 0[/tex]

[tex]\frac{(Ax+t \triangle x)((1-s)\frac{Ax}{Az} + s\frac{Ax+tk \triangle x}{Bz}) - (Ax+tk \triangle x)((1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz})}
{((1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz})((1-s)\frac{Ax}{Az} + s\frac{Ax+tk \triangle x}{Bz})} = 0[/tex]

[tex](Ax+t \triangle x)((1-s)\frac{Ax}{Az} + s \frac{Ax+tk \triangle x}{Bz}) - (Ax+tk \triangle x)((1-s)\frac{Ax}{Az} + s\frac{Ax+t \triangle x}{Bz}) = 0[/tex]

в итоге после раскрытия скобок мы приходим к такому виду:

[tex]Ax \triangle x (1-k)((1-s)\frac{t}{Az}+s \frac{t-1}{Bz}) = 0 \Rightarrow (1-s)\frac{t}{Az}+s \frac{t-1}{Bz} = 0[/tex] выразив t получаем:

[tex]t = \frac{s \frac{1}{Bz}}{(1-s)\frac{1}{Az}+s \frac{1}{Bz}}[/tex]

В самом деле подставив t в [tex]Cz = \frac{(1-t)Ax + tBx}{(1-s)\frac{Ax}{Az} + s\frac{Bx}{Bz}}[/tex],

получаем искомое решение [tex]Cz = \frac{1}{(1-s)\frac{1}{Az} + s\frac{1}{Bz}}[/tex]


[tex][/tex]
Вложения
Podobie.jpg
Podobie.jpg (23.93 КБ) Просмотров: 2018
repeat
 
Сообщения: 3
Зарегистрирован: Чт май 21, 2020 2:12 am

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение Rados » Чт май 21, 2020 9:29 pm

Ваша последняя схема НЕ ПОКАЗЫВАЕТ вообще никаких координат.
Но если Вас устраивает такое решение, то никто его "оспаривать" не будет...

А вообще-то такие задачки в НАЧЕРТАТЕЛЬНОЙ геометрии решаются методом "замены плоскостей" для графического построение НАТУРАЛЬНОЙ ВЕЛИЧИНЫ геоматрических фигур.
Аватара пользователя
Rados
 
Сообщения: 3558
Зарегистрирован: Вт ноя 20, 2018 8:36 am
Откуда: РОССИЯ

Re: Интерполяция атрибута (Перспективная коррекция)

Сообщение Rados » Пт май 22, 2020 10:44 am

В данном случае у нас 2D задача.

Вот в этом как раз и кроется ОШИБКА!
Если БЫ не ТРЕТЬЯ ось координат (Y), которую мы дополнительно провели из точки пересечения ЗАДАННЫХ осей (X и Z), то и не смогли бы ОПРЕДЕЛИТЬ: ГДЕ находится точка С относительно отрезка АВ - ближе, дальше или НА красной линии!
Фактически (в 3D) точки А, В и С образуют замкнутую фигуру АВС, а точка С совпадает с отрезком АВ только на плоскости (2D), которая пересекает плоскость координат XZ по красной линии. А серая линия - это проекция плоскости какого-то ЭКРАНА (2D) которая расположена ПЕРПЕНДИКУЛЯРНО к плоскости координат XZ и одновременно ПАРАЛЛЕЛЬНО плоскости координат XY на расстоянии = 1d.
Но на числовых осях (на схеме) нет никаких ЧИСЛОВЫХ меток, кроме начала координат - в точке пересечения осей!
Единственным ЧИСЛОМ на этой схеме (как измерением 1D) можно принять только ДЛИНУ натуральную величину отрезка АВ, которая и является "атрибутом" - признаком ДЛИНЫ отрезка АВ именно как РАССТОЯНИЯ между точками А и В "в натуре"!
А "перспективная коррекция" - это отображение длины АВ сначала на экран (на серую плоскость), а затем с экрана - на фронтальную плоскость координат XZ.
Обратным построением мы как раз и "сделали интерполяцию атрибута", то есть НАШЛИ натуральную величину АВ и наглядно продемонстрировали, что точка С не лежит на отрезке АВ в трёхмерном пространстве координат (3D).
А как ЗАДАТЬ числовое значение ДЛИНЕ отрезка АВ?
Для этого в задачке указано РАССТОЯНИЕ на фрональной проекции МЕЖДУ точками А и С = 1 - t, а МЕЖДУ точками С и В = t.
Значит длина проекции АВ = |1 - t| + t = 1х.
Аналогично вычисляется и длина проекции АВ на сером экране: А(х) + В(х) = |1 - s| + s = 1у.
А в натуральную величину (на горизональной плоскости) длина АВ отображается на числовой оси как В(У) - А(у) = 1у, а расстояние от С (У) до А (у) = А(у) + В(у) = 1у
Если точку А не ставить в начало координат, то её координаты в 3D можно записать как (Ха; 0 ; d).
Тогда координаты точки В будут (Хb; 1-у ; d).
У точки С координаты будут (Хс; 1 ; d).
Таким образом осталась неизвестной только координата Хс, которая на первоначальной схеме указана как точка Сх.
Вх - Ах = 1х.

В данной задаче "постоянным параметром" является не числовое значение t, а именно ДЛИНА отрезка АВ, заданная (по условиям задачи) координатами Ах и Вх.
АВ = 1. Но так как единицы измерения в данной задаче не указаны (1 км? или 1 м? ... 1 см или 1 аршин?), то "атрибутом" - как исходным признаком ЛИНЕЙНОГО измерения (1D) очевидно является ОДИНАКОВОЕ расстояние всех трёх точек от горизонтальной плоскости = d
Если это ДАНО по условия задачи, то именно этот "единый параметр" = МОДУЛЬ (аршин = 1d) надо принимать при алгебраических вычислениях КООРДИНАТ - как равно-МЕРНЫХ отметок от начала координат на всех трёх осях координат: Х , Y и Z.
Аватара пользователя
Rados
 
Сообщения: 3558
Зарегистрирован: Вт ноя 20, 2018 8:36 am
Откуда: РОССИЯ


Вернуться в Геометрия



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

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