上一个作品是制作平面图形的中心投影与平行投影,今天我们要制作的是立方体的正投影,难度要高一些。
先来看一下效果:
拉动滑动条,即可改变立方体的摆放位置,并实时显示立方体在投影面上的正投影。
为什么说这个作品的制作比上个作品的更难一些?
- 上个作品是多边形的投影,该作品是立方体的投影。
- 投影时,若是多边形,则对多边形的每个顶点进行投影;若是立方体,并非对立方体的所有顶点进行投影,于是,要先选出需要进行投影的顶点。
具体的,我们来看看应如何制作。
构造立方体、投影面
先构造立方体:
备注:正六面体(cube)、滑动条(slider)、旋转(rotate)、z轴(zAxis)。
这样构造立方体,使得最左边的棱就在z轴上。将该立方体绕着左边的棱旋转,也就是绕z轴旋转。写起来比较简单,即a' = 旋转(a, α, z轴)。
此时,立方体在3D绘图区比较中间的位置。为了显示效果更好,我们将立方体放到前面一些。
利用中心定位(centerview)指令:
中心定位( <视图中心坐标(x, y)|视图中心点> )
需要注意的是,中心定位指令是对当前用到的绘图区有效。
于是需激活3D绘图区,再于指令栏输入:
中心定位((-2.8,9,0))
并构造投影面——激活3D绘图区,再于指令栏输入:
y = 10
构造投影线
▪ 立方体a'的顶点怎么构造出来?
上一作品中,已有多边形,需要其顶点时,可用顶点(vertex)指令。
但,顶点指令并不适用于立方体。
顶点指令的所有语法
既然无法直接运用指令解决,那么,回想一下立方体a'是怎么构造出来。仿照一下,其顶点是否也可以构造出来?
于是:
l1 = {A, B, C, D, E, F, G, H}
l1' = 旋转(l1, α, z轴)
l1'即为立方体a'的顶点。
而需要进行投影的顶点,需要排除y坐标值最大的顶点。
b = 最大值(y(l1'))
l2 = 条件子列(y(Q) < b, Q, l1')
最大值(max)、条件子列(keepif)指令:
最大值( <数值列表> )
条件子列( <条件>, <变量>, <列表> )
理解如下:
b = 最大值(y(l1'))——y(l1')是l1'所有点的y坐标值;于是最大值(y(l1')),即为l1'中最大的y坐标值。
l2 = 条件子列(y(Q) < b, Q, l1')——Q依次取l1'中的点,再进行判断其y坐标是否小于b,小于b即为满足条件y(Q) < b,则可留下该点。最终,得到l2,l2就是所有y坐标值小于b的点,也就是需要进行投影的顶点。
那么,投影线的构造,仿照上一个作品即可。
稍作总结,这一部分的指令如下:
构造正投影
构造前,我们先分清投影线与投影面的交点排序。即l4的各个点。
首先,l1 = {A, B, C, D, E, F, G, H}为立方体a的顶点,具体如下:
于是l1'和l2中点的排序如下:
那么,交点l4的排序为:
于是,即可分情况,构造出正投影:
当0°<α<90°时,为了方便构造,将正投影看成是一个大长方形以及线段·:
至此,拉动滑动条α即有开篇的效果。
结语这一个作品,主要是对列表相关指定的应用。
如需源文件,请回复:立方体的正投影。
,