Using Lens Transformation to Draw 3D images on Screen
Draft. Used in some 3D applets.
basis in
base space V
/y . y'
/ .
Z,z| / . basis in function's
| / . domain space V'
| / a .
| / .
| /.
-------|----------------- x,X
|.
| .
| .
| .
| . x'
f: V' |--> |R
Counter clockwise rotation in plane xy:
x = cx' - sy'
y = sx' + cy'
z = z'
s=sin(alpha)
or r=Tr'.
Lens transformation in linear approximation,
x<<x0, z<<z0, y<<y0 (isometry?):
(X'',Y'') ~ (x+x0,z+z0)(1-y/y0)
x<<x0, z<<z0, y<<y0 (isometry?)
and with omitting constant members:
(X'',Y'') = const' * (x-by*,-gy+z)
or R''~Lr
L ~ 1 b 0 = K appended 0
0 g 1 1
b=-x0/y0
g=-z0/y0
(X'',Y'') are relative to screen's center.
Final coordinates:
X=xCenter+X''
Y=yCenter-Y''
Horizontal circles.
------------------
The radius h circle in |R^2 will have equation:
(QA,QA)=h^2 on screen,
Q = 1 -b/g = K^-1
0 1/g
Consider horizontal vectors, (X,Y), first.
(QA,QA)= (ggXX-2gbXY +bbYY) + YY.
To diagonalize the matrix Q, we will use method sketched here:
http://landkey.net/d/z/Essays/BetweenCurvedHills/
Note, we change notations:
A=gg
B=-gb
C=1+bb
M=(gg+bb+1)/2
D=(gg-bb-1)/2
GG=DD+BB=
4(MM-GG)=-4ggbb + MM-DD =-4ggbb+4ggbb+4gg greater than 0 if g is not 0.
Hence, following division is safe:
yCompression=ymax/xmax=sqrt(YCoeff/XCoeff)=sqrt( (M+G)/(M-G) )
Copyright (C) 2008 Konstantin Kirillov.