您的位置:首页 >热评 >

[Mindustry]用逻辑块画立方体并让它转起来(微硬核) 世界球精选

2023-05-03 01:56:58 来源:哔哩哔哩

去年我在社区服务器转悠的时候,看到了各种奇奇怪怪的实时信息显示屏。因为觉得既然花时间在这种东西上面,不如再做得花哨一点,所以我当晚做了一个用旋转方块做显示条的电表,效果是这样的:


(资料图片)

下面我们来讲解它的运行原理。

1.空间坐标和选取视图

首先来讲解向量的概念。顾名思义,向量就是有方向的量,比如画一条数轴,正数x就是从原点起向正方向长度为x,负数-x就是向负方向长度为x。如果以同一个原点画出多条数轴,分布在平面或者空间内,就形成了坐标系,数轴即坐标轴。其实坐标系还有更多的内容和要求,但不重要在坐标轴上取向量,将其相加,可以得到坐标系内任意向量,这一过程可以看成是点平行于坐标轴的位移,方向和长度由向量决定。

例如:

为方便计算,我们让坐标轴正交(两两垂直),这就是最常用的空间直角坐标系。

然而三维的物体终究不能直接变成二维图片,所以要选一个二维视图去投影。

Mindustry中画图所用的是平面直角坐标系,所以可以建立如下对应关系。

设原坐标为(x,y,z),投影后坐标为(x',y')

也就是原来y轴投影到现在x轴上,原来z轴下移半个x再投影到现在y轴上。这样我们就得到了一个点的坐标。以此可以得到其他点坐标。

2.极坐标和旋转,圆变椭圆

可以看到我们的方块儿是以竖直z轴为旋转轴旋转的,所以我们利用极坐标系计算xOy平面上点的坐标。

极坐标系是基于旋转构造的坐标系,极坐标由极角θ(就是定向的旋转角,数学等常用弧度制,计算机等常用角度制)和极径r(就是半径/距离)组成。要与直角坐标系对应,那么结合三角函数,得到

解析计算旋转过程时,,ω即角速度,φ即初相(t = 0时θ的值)。

旋转时点沿圆运动,圆在一个方向上伸缩变换就成了椭圆。,可由椭圆性质得证(我高三上课不听课拿草稿纸证过这个)。是为椭圆的参数方程。

3.画图原理

第一条理论:平面内的n边形可以由n-2个三角形拼成。曲面可以微分成三角形。

第二条理论:投影后投影面内遵循的几何关系依然成立(平行、平分等)。

第三条理论:确定三个顶点,就能确定一个三角形。

因此任何几何体投影时,都可以看成是多个三角形的拼合。只要确定了所有顶点,就能确定相应的三角形。

在逻辑块中写入以下代码

结果是这样的

4.生成小方块

生成小方块的几项参数由以下代码获取

pns表当前电量,pnc表存储上限,pni表发电量,pno表用电量。

注意:pni和pno是微分量,如需直观显示,需要在适当长度的时间区间上积分。常量积分只需乘以区间长度即可。

当前电量对应的高度。而电量增量对应的高度。

利用椭圆的参数方程,对方块每条棱计算出

将θ旋转到下个直角,对应算出x2,y12,y22,y32,可以求出一个侧面。

注意:对每个投影面,θ间相差π/2,即90°。

集成以下代码

(没测,可能有误,实际意思到了即可)

注意:将这段代码粘贴到其他地方时,需要修改jump到的对应位置。

最后再加个顶。当时,四个角的y坐标均为相对的平移值,否则为相对的平移值。在任何情况下,四个角的x坐标均相同

令,则

以1,3两点为底上两点,2,4两点为顶点,画两个三角形,得到顶盖。

5.θ的计算

上文讲过,旋转中,也就是说,θ取决于ω,t,φ三个量。

由于我们只看到旋转方块的两个侧面,所以θ取值区间长度仅需180°(π);进一步地,在一侧消失的侧面将在另一侧有一个全等的侧面执行相同的运动过程,所以θ取值区间长度仅需90°(π/2)。

Mindustry的三角函数使用角度制,因此θ的取值如下写

//jump到set ang -45下一行

其中,

6.亮暗面

这个部分是最简单的了,只要调整亮度即可。因为不需要太亮,所以只要改变颜色对应数值即可。

黄:r,g

绿:g

红:r

数值越高,颜色越亮。顶面亮度固定为,侧面亮度(l表示col取值区间半径)

以上。

如果有其他旋转需求,建立类似的坐标系即可。

关键词: