或者说我要在一个边长为8的正立方体4的立方体的顶点上画半径为根号3的球。

立方体是由6个相同大小的正方形围成的立体图形,故又称正六面

体英文拼写是Cube。

(Cube)是由6个正方形面组成的

。它有12条棱(边)和8个顶(点)是五个柏拉图立体之┅。

立方体是一种特殊的正四棱柱、长方体、三角偏方面体、菱形多面体、平行六面体就如同正方形是特殊的

一様。立方体具有正八面體对称性即考克斯特BC

对称性,施莱夫利符号{4,3}考克斯特-迪肯符号,与正八面体对偶

中,立方体的体积最大同样,在所有线性大小(長宽高之和)一定的长方体中立方体的体积也是最大的。反过来体积相等的长方体中,立方体拥有最小表面积和线性大小

,即是说我们可以有11种不同的方法切开空心立方体的7条棱而将其展平为平面图形,见右图

立方体的11种不同展开图。

如果我们要将立方体涂色而使相邻的面不带有相同的颜色则我们至少需要3种颜色(类似于

  立方体是唯一能够独立密铺三维欧几里得空间的柏拉图正多面体,因此立方体堆砌也是四维唯一的正堆砌(三维空间中的堆砌拓扑上等价于四维多胞体)它又是柏拉图立体中唯一一个有偶数边面——正方形面的,因此它是柏拉图立体中独一无二的环带多面体(它所有相对的面关于立方体中心中心对称)。

  将立方体沿对角线切开能嘚到6个全等的正4棱柱(但它不是半正的,底面棱长与侧棱长之比为2:√3)将其正方形面贴到原来的立方体上能得到菱形十二面体(Rhombic Dodecahedron)(两两共媔三角形合成一个菱形)。

将立方体的其中四个顶点相连而这四个顶点任何两条都没有落在立方体同一条的边上,可得到一个

其一个邊长为8的正立方体立方体边长的

,其体积为立方体体积的

当正八面体在立方体之内:

截半立方体:从一条棱斩去另一条棱的中点得出

:立方体在高维度的推广更加一般的,立方体是一个大家族即立方形家族(又称超方形、正测形)的3维成员,它们都具有相似的性质(如②面角都是90°、有类似的超体积公式,即V

食盐和糖的结晶体都是立方状;

1967年世界博览会的「立方体房间」

各一个,组成一个5×5×5的立方(572个解)

不可能方块(上方右图)。

已经证明此题无法用无刻度的直尺与圆规去画出

立方体的横切面只有四种:

其中以正六边形的面積最大,若立方体的棱长为a,则正六边形的面积为

  • 1. 伯努瓦?B?曼德布罗特, 陈守吉, 凌复华. 大自然的分形几何学[M]. 上海远东出版社,
  • 2. 陶士良. 抓住特征巧解立方体[J]. 数学大世界:初一二辅导, -13.
以立方体的8个顶点中的任意3个顶點为顶点的三角形中正三角形的个数为______.... 以立方体的8个顶点中的任意3个顶点为顶点的三角形中,正三角形的个数为______.

正三角形的各边必為立方体各面的对角线有△ADF,△ADH△AFH,△BCE△BCG,△BEG△CEG,△DFH共8个正三角形.

你对这个回答的评价是

按照我们的思路首先需要的是數据,顶点的数据画一个立方体,需要八个顶点的数据一个正方体如何画出来,需要一个面一个面的哈那么正方体有6个面,而每个媔呢是一个正方形,我们把正方形划分为两个三角形这个三角形是opengl中最小的片元了。如下图所示:

讲到这里可能有点过早了,所以還是要从基本的三角形开始

layout=0,因为这里只有一个顶点位置属性所以location=0。

功能只有一个就是简单的着色

下面是将两个shader连接起来,并且使鼡shader program程序进行编译

到这里,似乎可以画出一个三角形了但是还是少了主循环。

下面的我们来看看如何把窗口显示出来我们使用的glfw的方式显示窗口。

上面的这段代码是最简单的将窗口显示出来的方式。我们试图将上面的代码再次精简发现已经不能再精简了,比如我们紦glfwInit();改为如下的代码:

发现没有任何窗口只有一个控制台。而如果将glfwInit()打开运行之后会发现白色窗口一闪而过。原因是我们少了一个主循環所以经过上面的测试,我们将while循环加到上面去最终运行之后得到一个窗口了。

那么下面是不是就要将shader使用上去了呢再次整合代码洳下:

至此我们完成了一个三角形的绘制了。上面的代码只考虑的正确的情况对于编译shader的失败等等其他报错信息我们一概不问,只关心起无意外的情况

接下来我们应该画一个矩形,接着上面问题一个矩形包含两个三角形,我们可以再增加一个顶点数据如下所示:

 

然後只要改动while循环中的一句代码即可:


意思是从0索引开始画6个点组成三角形。这里你也可以把0改为其他的值比如3看看画的形状是什么,答案是上半个三角形完整的代码如下:

那么下面我们就来介绍一下如何使用ebo的方式来减少重复数据的存储问题,例如上面的矩形四个顶点而使用画三角形的方式画矩形的时候,有两个顶点重复存储了分别是B和D两点。此时我们用EBO的方式记录顶点的索引来解决这个问题

下媔,我们再来看看能否画一个立方体呢?在画一个立方体之前我们要思考几个问题。

 

于是我们将上面的画三角形的程序稍微改动一下有如下的代码:

经过验证,代入上面的旋转矩阵验证正确:

然后下面是将这个矩阵怎么传递给shader的顶点着色器。

而片段着色器仍然使用仩面的代码如下:

上面的片段着色器仅仅是赋了一个颜色而已。

这个c++程序中创建单位矩阵,然后绕y轴旋转指定角度然后通过glGetUniformLocation找到shader中嘚transform变量,然后将矩阵与此变量关联即可总的代码如下:

运行的结果是,你会看到矩形由宽变窄又由窄变宽。你就会感到很奇怪所以峩们稍微改下旋转的轴,让立方体绕着(1.0,1.0,0.0)这个轴旋转即可

结果你可以自己将这段代码贴上去即可,这里贴上一个图:

我要回帖

更多关于 一个边长为8的正立方体 的文章

 

随机推荐