原文作者:千里马快乐编程

那3D空间某一个点投射在某个2D屏幕上的坐标是怎么计算的呢?请看下图:

scratch3制作一个旋转的立方体(2)——投射坐标计算

上图中P代表3D空间中的一个点,设它的位置坐标值是x,y,z。现在要计算的是它在红色的代表屏幕的平面上的投射点P’的坐标值。其中O点代表视点。

两次强调,3D点的投射除了和它本身的坐标有关之外,还和视点位置、投射屏幕位置有关。这三个因素是互相影响的。忽略了任何一个因素都不能得出投射点坐标!

上图中绿色平面代表P经过的、和红色屏幕平面平行的一个平面。线段OAB和红色以及绿色平面都垂直。为了方便计算,我们让红色平面与x轴和y轴组成的平面平行。这样,线段OAB和z轴平行(并垂直于红色及绿色平面);线段BC以及AC’与x轴平行;线段PC以及P’C’与y轴平行。

因为BC与AC’平行、PC与P’C’平行。根据相似三角形的特点,我们很容易知道:

OA /OB = AC’ / BC = P’C’ / PC

所以,如果知道:

P点坐标x,y,z

O点坐标ox,oy,oz

红色平面的z坐标值pz

则:

OA = pz – oz

OB = z – oz

BC = x – ox

PC = y – oy

则P在红色屏幕平面投射点P’的x、y轴坐标值为:

P’的x坐标 =ox + AC’

根据相似三角形特点:AC’ =  OA * BC / OB

P’的x坐标=ox + [(pz – oz) * (x - ox)/(z - oz)]


P’的y坐标 =oy + P’C’

根据相似三角形特点:P’C’ =  OA * PC / OB

P’的y坐标=oy + [(pz - oz) * (y - oy)/(z - oz)]

下一节我们就用这个结论在scratch里画出一个3D的八面体来。


本站内容未经许可,禁止任何网站及个人进行转载。