Преобразование 3D-координат точки в 2D-координаты в перспективе
Falk0ner, вс, 06/07/2008 - 15:35.
Преобразование 3D-координат точки в 2D-координаты в перспективе
{ **** UBPFD *********** by kladovka.net.ru ****
>>
Процедура преобразует 3D-координаты точки в 2D-координаты на "картинной
плоскости" в перспективе. В качестве параметров процедура принимает
координаты точки в пространстве (X - горизонтальная перпендикулярно
лучу зрения, Y - горизонтальная вдоль луча зрения, Z - вертикальная)
начало координат - точка пересечения луча зрения с картинной плоскостью;
Height - высоту наблюдателя;
Basis - расстояние от наблюдателя до картинной плоскости;
результаты вычисления записываются в переменные XP и YP - координаты
точки на картинной плоскости.
Зависимости: нет
Автор: Dimka Maslov, <a href="mailto:mainbox@endimus.ru">mainbox@endimus.ru</a>, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov, 1995
Дата: 29 апреля 2002 г.
********************************************** }
procedure Perspective(const X, Y, Z, Height, Basis: Double;
var XP, YP: Double);
var
Den: Double;
begin
Den:=Y+Basis;
if Abs(Den)<1e-100 then Den:=1e-100;
XP:=Basis*X/Den;
YP:=(Basis*Z+Height*Y)/Den;
end;
>>
Процедура преобразует 3D-координаты точки в 2D-координаты на "картинной
плоскости" в перспективе. В качестве параметров процедура принимает
координаты точки в пространстве (X - горизонтальная перпендикулярно
лучу зрения, Y - горизонтальная вдоль луча зрения, Z - вертикальная)
начало координат - точка пересечения луча зрения с картинной плоскостью;
Height - высоту наблюдателя;
Basis - расстояние от наблюдателя до картинной плоскости;
результаты вычисления записываются в переменные XP и YP - координаты
точки на картинной плоскости.
Зависимости: нет
Автор: Dimka Maslov, <a href="mailto:mainbox@endimus.ru">mainbox@endimus.ru</a>, ICQ:148442121, Санкт-Петербург
Copyright: Dimka Maslov, 1995
Дата: 29 апреля 2002 г.
********************************************** }
procedure Perspective(const X, Y, Z, Height, Basis: Double;
var XP, YP: Double);
var
Den: Double;
begin
Den:=Y+Basis;
if Abs(Den)<1e-100 then Den:=1e-100;
XP:=Basis*X/Den;
YP:=(Basis*Z+Height*Y)/Den;
end;
Отправить комментарий