注:教材原第6章编写者在6.3.3透视投影章节部分有一些地方介绍不清,另外在推导透视投影时所构建的坐标系也并非最佳方式,因此有可能会造成一些理解困难,在此表示抱歉。关于透视投影的推导及有关知识,可以在本博客上下载我本人的教学课件来学习了解。我构建的坐标系目前应该比较合理,同时也会得出比较漂亮的透视结论。有问题欢迎邮件联系我:[email protected]
T 2 = [ c o s 60 0 ∘ s i n 60 0 ∘ 0 − s i n 60 0 ∘ c o s 60 0 ∘ 0 0 0 1 ] = [ − 1 / 2 − 3 / 2 0 3 / 2 − 1 / 2 0 0 0 1 ] T_2= \left[ \begin{matrix} cos600^\circ & sin600^\circ & 0 \\ -sin600^\circ & cos600^\circ & 0 \\ 0 & 0 & 1 \end{matrix} \right] =\left[ \begin{matrix} -1/2 & -\sqrt{3}/2 & 0 \\ \sqrt{3}/2 & -1/2 & 0 \\ 0 & 0 & 1 \end{matrix} \right] T2=⎣⎡cos600∘−sin600∘0sin600∘cos600∘0001⎦⎤=⎣⎡−1/23/20−3/2−1/20001⎦⎤
T 3 = [ 1 0 0 0 1 0 2 4 1 ] T_3= \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 2 & 4 & 1 \end{matrix} \right] T3=⎣⎡102014001⎦⎤
T = T 1 T 2 T 3 = [ − 1 / 2 − 3 / 2 0 3 / 2 − 1 / 2 0 3 − 2 3 6 + 3 1 ] T= T_1T_2T_3= \left[ \begin{matrix} -1/2 & -\sqrt{3}/2 & 0\\ \sqrt{3}/2 & -1/2 & 0 \\ 3-2 \sqrt{3} & 6+ \sqrt{3} & 1 \end{matrix} \right] T=T1T2T3=⎣⎡−1/23/23−23−3/2−1/26+3001⎦⎤
由 $ P^{’}= PT$ 可得: [ A ′ B ′ C ′ ] = [ A B C ] T = [ 2 4 1 4 4 1 4 1 1 ] T = [ 2 4 1 1 4 − 3 1 1 − 3 3 / 2 11 / 2 − 3 1 ] \left[ \begin{matrix} A^{'} \\ B^{'} \\ C^{'} \end{matrix} \right] =\left[ \begin{matrix} A \\ B \\ C \end{matrix} \right] T = \left[ \begin{matrix} 2 & 4 & 1 \\ 4 & 4 & 1 \\ 4 & 1 & 1 \end{matrix} \right] T= \left[ \begin{matrix} 2 & 4 & 1 \\ 1 & 4-\sqrt{3} & 1 \\ 1-3\sqrt{3}/2 & 11/2-\sqrt{3} & 1 \end{matrix} \right] ⎣⎡A′B′C′⎦⎤=⎣⎡ABC⎦⎤T=⎣⎡244441111⎦⎤T=⎣⎡211−33/244−311/2−3111⎦⎤
P350, 模拟试题1,第四大题第4小题答案:
由相似三角形关系可得 x ′ x = d d − z \frac{x^{'}} {x} = \frac{d} {d-z} xx′=d−zd于是
x ′ = x d d − z = x 1 − z d x^{'} = \frac{xd} {d-z}= \frac{x} {1-\frac{z}{d}} x′=d−zxd=1−dzx
同理有: y ′ = y 1 − z d y^{'} = \frac{y} {1-\frac{z}{d}} y′=1−dzy
另外, z ′ = 0 z^{'}=0 z′=0.
于是有:
P ′ = [ x ′ y ′ z ′ 1 ] = [ x 1 − z d y 1 − z d 0 1 ] ≡ [ x y 0 1 − z d ] = [ 1 0 0 0 0 1 0 0 0 0 0 0 0 0 − 1 d 1 ] [ x y z 1 ] = T P P^{'} = \left[ \begin{matrix} x^{'} \\ y^{'} \\ z^{'} \\ 1 \end{matrix} \right] =\left[ \begin{matrix} \frac{x} {1-\frac{z}{d}} \\ \frac{y} {1-\frac{z}{d}} \\ 0 \\ 1 \end{matrix} \right] \equiv \left[ \begin{matrix} x \\ y \\ 0 \\ 1-\frac{z}{d} \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & -\frac{1}{d} & 1 \\ \end{matrix} \right] \left[ \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right] = TP P′=⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=⎣⎢⎢⎡1−dzx1−dzy01⎦⎥⎥⎤≡⎣⎢⎢⎡xy01−dz⎦⎥⎥⎤=⎣⎢⎢⎡10000100000−d10001⎦⎥⎥⎤⎣⎢⎢⎡xyz1⎦⎥⎥⎤=TP
上式中 T T T即为透视变换矩阵,其中$ \equiv$表示齐次坐标转化。
顶点坐标计算:以G点为例,G点齐次坐标为(1,1,-1,1),则由透视变换可知:
G ′ = T G = T [ 1 1 − 1 1 ] = [ 1 0 0 0 0 1 0 0 0 0 0 0 0 0 − 1 d 1 ] [ 1 1 − 1 1 ] = [ 1 1 0 1 + 1 d ] ≡ [ d d + 1 d d + 1 0 1 ] G^{'} = TG =T \left[ \begin{matrix} 1 \\ 1 \\ -1 \\ 1 \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & -\frac{1}{d} & 1 \\ \end{matrix} \right] \left[ \begin{matrix} 1 \\ 1 \\ -1 \\ 1 \end{matrix} \right] = \left[ \begin{matrix} 1 \\ 1 \\ 0 \\ 1+\frac{1}{d} \end{matrix} \right] \equiv \left[ \begin{matrix} \frac{d}{d+1} \\ \frac{d}{d+1} \\ 0 \\ 1 \end{matrix} \right] G′=TG=T⎣⎢⎢⎡11−11⎦⎥⎥⎤=⎣⎢⎢⎡10000100000−d10001⎦⎥⎥⎤⎣⎢⎢⎡11−11⎦⎥⎥⎤=⎣⎢⎢⎡1101+d1⎦⎥⎥⎤≡⎣⎢⎢⎡d+1dd+1d01⎦⎥⎥⎤
故透视变换后G点变为 G ′ = ( d d + 1 , d d + 1 , 0 ) G^{'}=( \frac{d}{d+1}, \frac{d}{d+1}, 0) G′=(d+1d,d+1d,0).
P351, 模拟试题2,第五大题第2小题答案:
c o s i = L ⃗ ⋅ N ⃗ = 0.5 , R ⃗ = 2 c o s i N ⃗ − L ⃗ = ( − 1 / 2 , 1 / 2 , − 2 / 2 ) . cosi=\vec{L} \cdot \vec{N}=0.5, \vec{R} = 2cosi\vec{N}-\vec{L}=(-1/2,1/2,-\sqrt{2}/2). cosi=L⋅N=0.5,R=2cosiN−L=(−1/2,1/2,−2/2).
c o s θ = R ⃗ ⋅ V ⃗ = − 2 / 2 < 0 , R ⃗ 与 V ⃗ 夹 角 大 于 90 度 , 因 此 V ⃗ 方 向 上 无 镜 面 反 射 光 , 所 以 c o s θ 取 0. cos\theta= \vec{R} \cdot \vec{V} = -\sqrt{2}/2<0, \vec{R}与\vec{V}夹角大于90度,因此\vec{V}方向上无镜面反射光,所以 cos\theta取0. cosθ=R⋅V=−2/2<0,R与V夹角大于90度,因此V方向上无镜面反射光,所以cosθ取0.
∴ I = I p a k a + I p ( k d c o s i + k s c o s n θ ) = 160 ∗ 0.5 + 175 ( 0.2 ∗ 0.5 + 0 ) = 97.5 \therefore I=I_{pa}k_a+I_p(k_dcosi+k_scos^n\theta)=160*0.5+175(0.2*0.5+0)=97.5 ∴I=Ipaka+Ip(kdcosi+kscosnθ)=160∗0.5+175(0.2∗0.5+0)=97.5
P353, 模拟试题3,第五大题第1小题答案:
a = y 0 − y 1 = − 4 , b = x 1 − x 0 = 8 , d 0 = a + 0.5 b = 0 ; a + b = 4 , a = − 4 a=y_0-y_1=-4, b=x_1-x_0=8, d_0=a+0.5b=0; a+b=4, a=-4 a=y0−y1=−4,b=x1−x0=8,d0=a+0.5b=0;a+b=4,a=−4,当 d i < 0 d_i<0 di<0时,中点M在直线下方,下一点取当前点P的右上方点,记为NE,同时 d i + 1 = d i + a + b d_{i+1}=d_i+a+b di+1=di+a+b;当 d i ≥ 0 d_i\geq0 di≥0时,中点M在直线上方,下一点取当前点P的右侧点,记为E,同时 d i + 1 = d i + a d_{i+1}=d_i+a di+1=di+a。根据中点线算法原理可得下表:
x | y | d i d_i di | Next Point |
---|---|---|---|
2 | 1 | 0 | E |
3 | 1 | 0-4=-4 | NE |
4 | 2 | -4+4=0 | E |
5 | 2 | 0-4=-4 | NE |
6 | 3 | -4+4=0 | E |
7 | 3 | 0-4=-4 | NE |
8 | 4 | -4+4=0 | E |
9 | 4 | 0-4=-4 | NE |
10 | 5 |