September 23rd, 2014

404

перспективное

А вот такой вопрос: какими цифрами описывается перспектива? У меня дано: размер canvas, положение линии горизонта относительно canvas, точка схождения.

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

Но как определить степень сжатия квадрата? В принципе, это зависит от расстояния от глаза (точечного наблюдателя) до виртуального прямоугольника (поля зрения).

Вот два тривиальных случая.



Вопрос: могу ли я как-то определить расстояние от глаза до "экрана" (то есть угол зрения) на основании только уходящих в перспективу линий?

В принципе, поскольку расстояние между прямыми постоянно, а передняя линия нам видна, то можно ли по изменению расстояния между линиями на проекции понять, какой угол зрения? Для интереса будем думать про центральную линию и отрезок на нём M.


Если нам дан L, то мы легко можем найти точку, где тот же отрезок будет выглядеть как L/2, но будет ли это квадрат?

Я пока полностью застрял. С одной стороны я могу заявить, что это произвольное число и задавать его в конфиге (для генерации), но я не могу отделаться ощущения, что задав линию горизонта, размер canvas и единичный отрезок на осях x/y, я угол зрения уже задал и его надо найти. Или нет?

Как по единичному отрезку по оси Z построить дальнейшие - я уже нашёл. А вот как посчитать единичный отрезок-то? Что-то мне подсказывает, что это задача поворота квадрата на 45°, которую я недавно решал вручную...

Ведь если эту задачу спустить до "поворот отрезка" (то есть исключить 'z' грани), то мы получим искомое. Или нет?