Skip to content

CS-LX/AutoScripting-Matrix

Repository files navigation

  • 作者:Linxium

[智械]矩阵 AutoScripting-Matrix

简介

这是一个给生存战争带来矩阵电路系统的模组。它与原版传输信号的电路存在些许关联,但是功能却大相径庭。传输内容为矩阵使得你可以用它做一些炫酷的实用的机械、操作


预备知识

这个模组所涉及到的知识包含小学学习的小数、中学学习的向量以及大学学习的矩阵。其中矩阵的知识较难。(可能会劝退很多玩家但是! 想要玩这个mod,你不需要非常精通矩阵,你只需知晓一些基本概念与玩法,便可以”矩阵在手,天下我有~“

在这个教程中,为照顾不同学历,不同学龄的玩家,作者会尽可能简单地讲解知识概念,保证各位玩家能看懂!

矩阵

基础概念

$m \times n$ 个数 $a _ {ij}(i=1,2,3...,m; j=1,2,3...,n)$ 排成的 $m$$n$ 列的数表被称为 $m$$n$ 列矩阵,简称 $m \times n$ 矩阵。

举个例子

如:

$$ \mathbf{M}=\begin{bmatrix}1 & 2 \\\ 3 & 4\end{bmatrix} $$

元素表示

上式矩阵,被称为 $2 \times 2$ 矩阵,其中 $1,2,3,4$ 这四个数被称为矩阵的元素,简称。其中 $2$ 是矩阵第一行第二列的数,为矩阵 $\mathbf{M}$$(1, 2)$ 元。而在此mod中,任意矩阵的 $(i, j)$ 元可以写为 $Mij$ .(因为老K在SC的代码里就是这么表示矩阵元素的)

名称

你可能要问:为什么以 $M$ 作为矩阵的名称?那必然是因为: $M$ 是矩阵英语 $matrix$ 的首字母,用 $M$ 作为矩阵名称那必然是非常合适~

当然,你也可以用其它符号作为矩阵名称,并且可以在矩阵名称下方加上小尾巴表示矩阵的尺寸,如上面的矩阵可以写成: $\mathbf{M} _ {2 \times 2}$ .

其他例子

上面只有一个例子,没看懂?

好吧,那我在下面多举几个例子好啦~

$$ \mathbf{M} _ {2 \times 2}=\begin{bmatrix}1 & 1 \\\ 4 & 5\end{bmatrix} $$

$$ \mathbf{A} _ {4 \times 3}=\begin{bmatrix}1 & 0 & -1\\\ 0 & 1 & 0 \\\ 0 & 0 & 1 \\\ -1 & 0 & 1\end{bmatrix} $$

$$ \begin{bmatrix}T _ {11} & T _ {12} & R _ {11} & R _ {12} \\\ T _ {21} & T _ {22} & R _ {21} & R _ {22} \\\ B _ {11} & B _ {12} & L _ {11} & L _ {12} \\\ B _ {21} & B _ {22} & L _ {21} & L _ {22} \end{bmatrix} $$

上面这些都是矩阵哦~

矩阵变换

那么,介绍了那么多基础知识,矩阵...到底有什么用呢?

矩阵的用处繁多,但是对于我们的mod,我们只需要知晓它其中一种作用——变换

矩阵变换是一种常见的计算机图形学技术,通过矩阵相乘的方式对向量进行平移、旋转和缩放等操作。

在进行复杂的物体变换时,通常需要结合多种变换操作,而这些需要使用TRS矩阵。

TRS矩阵是由平移矩阵(T)、旋转矩阵(R)和缩放矩阵(S)相乘而成的一个复合矩阵,用来实现对向量的多种变换。通过TRS矩阵,我们可以方便地将平移、旋转和缩放操作结合在一起,实现各种复杂的物体变换效果。

在计算机图形学和计算机动画中,TRS矩阵是一种非常重要且常用的技术,可以帮助我们实现各种动态和逼真的图形效果。而在本mod中,矩阵系统的基础及电压皆为TRS矩阵。掌握TRS矩阵,你就可以玩转本mod~

TRS矩阵

基础概念

TRS矩阵是一个包含了位移(Translation)、旋转(Rotation)和缩放(Scale)信息的矩阵,通常用于描述物体在三维空间中的变换。

一个TRS矩阵如下式所示:

$$ \begin{bmatrix}R _ x & R _ y & R _ z & 0 \\\ U _ x & U _ y & U _ z & 0 \\\ F _ x & F _ y & F _ z & 0 \\\ d _ x & d _ y & d _ z & 1 \end{bmatrix} $$

将一组正交基坐标应用上式的矩阵进行变换(即矩阵乘法):

$\vec{v _ x} = (1, 0, 0)→\vec{v ^ , _ x} = (R _ x + d _ x, R _ y + d _ y, R _ z + d _ z)$

$\vec{v _ y} = (0, 1, 0)→\vec{v ^ , _ y} = (U _ x + d _ x, U _ y + d _ y, U _ z + d _ z)$

$\vec{v _ z} = (0, 0, 1)→\vec{v ^ , _ z} = (F _ x + d _ x, F _ y + d _ y, F _ z + d _ z)$

由此可见:TRS矩阵第一行前三个数表示基向量 $\vec{x}$ 变换后的新坐标,TRS矩阵第二行前三个数表示基向量 $\vec{y}$ 变换后的新坐标,TRS矩阵第三行前三个数表示基向量 $\vec{z}$ 变换后的新坐标;而第四行前三个数表示坐标系原点变换后应该平移至的新坐标。

提取变换

要从TRS矩阵中获取位移、旋转和缩放信息,可以按照以下步骤进行解析:

  1. 位移(Translation):TRS矩阵的第四行向量表示了物体的位移信息,即矩阵中的元素T(x, y, z)。通过提取这个向量,就可以得到物体在三维空间中的位移信息。

  2. 旋转(Rotation):TRS矩阵的旋转部分通常是一个3x3的旋转矩阵R(M11至M33所囊括的区域),表示了物体围绕各个坐标轴的旋转变换。可以通过对这个旋转矩阵进行解析,得到物体的旋转角度和方向。

  3. 缩放(Scale):TRS矩阵的缩放部分通常是一个对角矩阵S,表示了物体在各个坐标轴上的缩放比例。可以通过提取对角元素,得到物体在各个坐标轴上的缩放比例。

为简化计算与操作,mod提供了一系列解构器,使得你可以快速地提取矩阵的变换。

组合变换

我们可以通过位移、旋转、缩放创建对应矩阵,最后把它们乘起来得到最终的TRS矩阵。但是,采用此方法非常困难,计算次数非常大 (以至于摆一个创建TRS矩阵的电路都要占5~6个区块) 。所以为了方便起见,mod提供了一系列矩阵源,使得你可以快速地创建想要的矩阵。

运算

加法与减法

矩阵加法与减法是将两个矩阵对应的元素相加减:

$$ \begin{bmatrix}1 & 2 \\\ 3 & 4\end{bmatrix} + \begin{bmatrix}5 & 6 \\\ 7 & 8\end{bmatrix} = \begin{bmatrix}1 + 5 & 2 + 6 \\\ 3 + 7 & 4 + 8\end{bmatrix} = \begin{bmatrix}6 & 8 \\\ 10 & 12\end{bmatrix} $$

$$ \begin{bmatrix}1 & 2 \\\ 3 & 4\end{bmatrix} - \begin{bmatrix}5 & 6 \\\ 7 & 8\end{bmatrix} = \begin{bmatrix}1 - 5 & 2 - 6 \\\ 3 - 7 & 4 - 8\end{bmatrix} = \begin{bmatrix}-4 & -4 \\\ -4 & -4\end{bmatrix} $$

乘法

矩阵乘法如下式所示:

$$ \begin{bmatrix}a & b \\\ c & d\end{bmatrix}\begin{bmatrix}e & f \\\ g & h\end{bmatrix}=\begin{bmatrix}ae + bg & af + bh \\\ ce + dg & cf + dh\end{bmatrix} $$

以此可以类推到 $4 \times 4$ 的TRS矩阵的乘法表达式。 (太过庞大,这里就不展示了)

矩阵与普通数字的乘法大有不同。数字的乘法倾向于描述数字的倍数;而矩阵乘法更倾向于合并两个变换。

举个例子:

瓦尔特站在木屋里,他要去河边取水。他先从屋子里走了出来,然后走到了河边打水。

对于上面的例子,我们可以说瓦尔特做了两个动作:先[从屋子里走了出来],然后[走到了河边打水]。

而我们亦可以说他只做了一个动作: [从屋子里走了出来 $\times$ 走到了河边打水]

逆矩阵与除法

如果一个矩阵乘另一个矩阵得到了单位阵: $\mathbf{M} \times \mathbf{N} = \mathbf{I}$ ,那么说 $\mathbf{N}$$\mathbf{M}$ 的逆矩阵。 $\mathbf{N}$ 也可以表示为 $\mathbf{M ^ {-1}}$ .

站在矩阵变换的角度:如果一个矩阵 $\mathbf{A}$ 对应着一个线性变换T,那么逆矩阵 $\mathbf{A ^ {-1}}$ 对应着T的逆变换,即将T作用在向量上的结果再次作用在这个结果上可以得到原始向量。

还是那个例子:

瓦尔特站在木屋里,他要去河边取水。他先从屋子里走了出来,然后走到了河边打水。

对于上面的例子,瓦尔特的动作 [从屋子里走了出来] 的“逆动作”则是 [从外面走进了屋子]

在了解了逆矩阵的定义以及使用后,我们便可以借助逆矩阵定义矩阵除法:

$$ \mathbf{M} / \mathbf{N} = \mathbf{M} \mathbf{N ^ {-1}} (乘号已省略) $$

转置

矩阵转置是指将一个矩阵的行和列互换的操作。

转置后的矩阵的行数变为原矩阵的列数,列数变为原矩阵的行数。转置操作不改变矩阵中元素的值,只是改变了元素的位置。

矩阵 $\mathbf{A}$ :

$$ \begin{bmatrix} 1 & 2 & 3\\\\ 4 & 5 & 6 \end{bmatrix} $$

矩阵 $\mathbf{A}$ 的转置矩阵 $\mathbf{A ^ {T}}$

$$ \begin{bmatrix} 1 & 4 \\\\ 2 & 5 \\\\ 3 & 6 \end{bmatrix} $$

行列式

矩阵行列式是一个数学工具,用来判断矩阵是否可逆以及求解方程组的解。行列式的值可以告诉我们矩阵的特征值和特征向量的性质,对于线性代数和数学分析等领域有着重要的应用。

由于矩阵行列式与矩阵变换——即本mod的主题——相距甚远,所以在此不作说明。感兴趣的玩家们可以自行了解~

点对点运算

矩阵的点对点运算是指对两个尺寸相同的矩阵中对应位置上的元素进行相同的运算操作。

以点对点乘法作例子:

$$ \begin{bmatrix}a & b \\\ c & d\end{bmatrix}\times\begin{bmatrix}e & f \\\ g & h\end{bmatrix}=\begin{bmatrix}a \times e & b \times f \\\ c \times g & d \times h\end{bmatrix} $$

本mod提供了大量点对点运算板,玩家们可以用它们实现快速的数据处理。

浮点数

对于只有 $1 \times 1$ 矩阵,我们一般把它叫做数。而在此mod中,我们把它叫做浮点数。

浮点数就是计算机里用来表示带小数点的数字的一种数据类型。比如我们常见的3.14、1.5、0.001等都属于浮点数。浮点数可以表示很大或很小的数字,但在计算时可能会有一些精度上的误差。所以在处理需要非常准确的小数运算时,需要特别注意浮点数的精度问题。

注意:在本mod中,标注有“(浮点)”的输入端口皆只取输入的M11作为浮点数值

向量

对于只有一行或者一列的矩阵(其余元素全为0),我们可以把它看作行向量或列向量。

注意:在本mod中,向量统一使用行向量!

在本mod中,标注有“(三维向量)”的输入端口皆只取输入的M11,M12,M13作为三维向量x,y,z


实用功能

本mod提供了一系列实用的小功能,可大大提升玩家们的游玩体验以及操作感受~

调试辅助绘制(Gizmos)

本功能灵感来源于Unity引擎。在Unity引擎中,如果你选中了一个物体,物体会有亮眼的描边;如果场景中存在摄像机,则会显示摄像机的视锥,让开发者知晓这个摄像机可以看到哪些东西...这些便于调试的绘制图形都统称为Gizmos

在本mod里,Gizmos功能与Unity的类似,都起到辅助调试、可视化查看电子元件功能的作用。你可以在一些方块的介绍中(如:方块展示板复杂摄像机LED)找到此方块是否具有Gizmos功能,亦或是此方块的Gizmos的具体内容。

使用Gizmos控制器点击带有Gizmos功能的方块可以开启/关闭此方块的Gizmos显示。打开Gizmos控制器的编辑界面可以统筹管理所有方块的Gizmos。

此功能可以在设置中启用/禁用。


方块介绍

本mod方块分为四大类:

  • 转换器

  • 用电器

  • 其他

    源指可以提供矩阵数据的方块,如拉杆、按钮
    转换器指可起到传输作用并且对矩阵进行一些转换操作的方块,如导线、四维计算板等 用电器指可以利用矩阵产生一些效果的方块,如方块展示板,实体变换板、矩阵LED

    其他指不能归类于以上三种类别的方块


方块 输入/输出面 作用
矩阵源 输出:6端 输出玩家拟定好的矩阵,初始放置时默认数据为单位阵,破坏后不会丢失数据。

可通过对话框编辑内容。
矩阵开关 输出:前后左右底端 拉杆朝下为关,输出零矩阵;拉杆朝上为开,输出玩家拟定好的矩阵。初始放置时默认数据为单位阵,破坏后不会丢失数据。

可通过对话框编辑内容。
矩阵按钮 输出:前后左右底端 每当按下按钮即输出一个持续约0.10秒的玩家拟定好的矩阵,之后恢复输出零矩阵。初始放置时默认数据为单位阵,破坏后不会丢失数据。

可通过对话框编辑内容。
矩阵源: 世界方块坐标 输出:前端 输出包含本元件所处的坐标的位移矩阵。
矩阵源: 玩家变换 输入:后端(时钟端)

输出:前端
输出包含离此元件最近的玩家的世界变换矩阵(包含玩家坐标与旋转)。
当时钟端没有接线时,此元件每时每刻输出;而当时钟端接线后,当时钟端输入矩阵M11上升沿(由0开始上升)时,获取一次矩阵并且输出。
矩阵源: 玩家摄像机视图 输入:后端(时钟端)

输出:前端
输出最近玩家的摄像机视图矩阵,包含观测的位置,方向,垂直Y方向 (注意: 若要直接使用此矩阵作为绘制的变换,须对其求逆)
当时钟端没有接线时,此元件每时每刻输出;而当时钟端接线后,当时钟端输入矩阵M11上升沿(由0开始上升)时,获取一次矩阵并且输出。
矩阵源: 玩家摄像机投影 输出:左右端 输出最近玩家的摄像机投影矩阵,左端输出投影矩阵,右端输出屏幕投影矩阵。
矩阵源: 从位移创建 输入:左后右底端

输出:前端
创建一个位移矩阵,x为左端(浮点)+底端输入M11,y为后端(浮点)+底端输入M12,z为右端(浮点)+底端输入M13。
矩阵源: 从欧拉角(三轴旋转)创建 输入:左后右底端

输出:前端
根据欧拉角创建一个旋转矩阵,采用弧度制! yaw为左端(浮点)+底端输入M11,pitch为后端(浮点)+底端输入M12,roll为右端(浮点)+底端输入M13。
矩阵源: 从缩放创建 输入:底端

输出:前端
根据缩放创建一个缩放矩阵。缩放矩阵的三轴缩放皆为输入值。
矩阵源: 从三轴缩放创建 输入:左后右底端

输出:前端
根据三轴缩放创建一个缩放矩阵。x为左端(浮点)+底端输入M11,y为后端(浮点)+底端输入M12,z为右端(浮点)+底端输入M13。
矩阵源: 从观察创建 输入:左后右端

输出:前端
详见矩阵源-从观察创建
矩阵源: 随机常数矩阵 输入:后端(时钟端)

输出:前端
输出一个介于0~1的随机常数矩阵。
当时钟端没有接线时,此元件每时每刻输出;而当时钟端接线后,当时钟端输入矩阵M11上升沿(由0开始上升)时,获取一次矩阵并且输出。
二阶方阵转矩阵 输入:前后左右端

输出:底端
详见二阶方阵转矩阵
四维横向量转矩阵 输入:前后左右端

输出:底端
详见四维横向量转矩阵
浮点转四维横向量 输入:前后左右端

输出:底端
输出一个四维向量(x, y, z, w)。x:前端;y:右端;z:后端;w:左端。各输入端口都为浮点。
矩阵源: 从正交投影创建 输入:前后左右端

输出:底端
输出一个正交投影矩阵。前端(浮点)和右端(浮点)分别代表投影平面的宽度和高度,后端(浮点)和左端(浮点)分别代表近裁剪面和远裁剪面的距离。
矩阵源: 从透视投影创建 输入:前后左右端

输出:底端
输出一个透视投影矩阵。前端(浮点)和右端(浮点)分别代表垂直视角的视野范围和宽高比,后端(浮点)和左端(浮点)分别代表近裁剪面和远裁剪面的距离。
矩阵源: 实时钟 输入:底端

输出:前后左右端
详见矩阵源-实时钟
矩阵移动传感器 输出:前后左右底端 检测距离自己位置约8方块内的实体、移动方块、投掷物及掉落物,并输出对应变换矩阵。

矩阵源-从观察创建

创建一个观察矩阵。其中左端输入摄像机位置(三维向量),后端输入目标位置(三维向量),右端输入向上方向(三维向量)。

  • 摄像机位置:表示相机的位置,即相机所在的坐标点。

  • 目标位置:表示相机要观察的目标位置,即相机要对准的物体的坐标点。

  • 向上方向:表示相机的上方向向量,用于确定相机的方向。通常情况下,up向量应该垂直于相机的观察方向向量,确保相机的朝向是正确的。在这个元件种,up向量会被重新计算,以确保它与相机的观察方向向量和右方向向量垂直。

二阶方阵转矩阵

将四个输入端输入的二阶方阵转为四阶方阵。

$$ 上端\begin{bmatrix}T _ {11} & T _ {12} \\\ T _ {21} & T _ {22}\end{bmatrix}右端\begin{bmatrix}R _ {11} & R _ {12} \\\ R _ {21} & R _ {22}\end{bmatrix}下端\begin{bmatrix}B _ {11} & B _ {12} \\\ B _ {21} & B _ {22}\end{bmatrix}左端\begin{bmatrix}L _ {11} & L _ {12} \\\ L _ {21} & L _ {22}\end{bmatrix}→输出\begin{bmatrix}T _ {11} & T _ {12} & R _ {11} & R _ {12} \\\ T _ {21} & T _ {22} & R _ {21} & R _ {22} \\\ B _ {11} & B _ {12} & L _ {11} & L _ {12} \\\ B _ {21} & B _ {22} & L _ {21} & L _ {22} \end{bmatrix} $$

四维横向量转矩阵

将四个输入端输入的横向量并成四阶方阵。

$$ 上端\begin{pmatrix}T _ {11} & T _ {12} & T _ {13} & T _ {14}\end{pmatrix}右端\begin{pmatrix}R _ {11} & R _ {12} & R _ {13} & R _ {14}\end{pmatrix}下端\begin{pmatrix}B _ {11} & B _ {12} & B _ {13} & B _ {14}\end{pmatrix}左端\begin{pmatrix}L _ {11} & L _ {12} & L _ {13} & L _ {14}\end{pmatrix}→输出\begin{bmatrix}T _ {11} & T _ {12} & T _ {13} & T _ {14} \\\ R _ {11} & R _ {12} & R _ {13} & R _ {14} \\\ B _ {11} & B _ {12} & B _ {13} & B _ {14} \\\ L _ {11} & L _ {12} & L _ {13} & L _ {14} \end{bmatrix} $$

矩阵源-实时钟

根据控制矩阵输出实时时间。

输入:

端口 作用 详细
输出时间 为常数矩阵
输出时间 为常数矩阵
输出时间 为常数矩阵
输出时间 为常数矩阵
控制矩阵 详见下方“控制矩阵

控制矩阵:

  • ⌊M11⌋=0

    端口 输出(系统时间)
    毫秒
  • ⌊M11⌋=1

    端口 输出(系统时间)
    星期
  • ⌊M11⌋=2

    端口 输出(游戏世界时间)

转换器

注: 一些转换器有标注“点对点”,它们的运算逻辑为将矩阵的每个对应元素分别计算或转换的结果,再返回由这些结果组成的新矩阵。此种转换模型应与一般的矩阵转换模式区别开。 (点对点转换器与一般的转换器在模型上也会有些许区别)

导线

方块 输入/输出面 作用
矩阵导线 输入:6端

输出:6端
传输矩阵数据,导线交汇处计算为加法。不同颜色导线不会互相连接。
矩阵继电器 输入:左右后端

输出:前端
当左或右面输入矩阵M11大于0时,输出后端输入的矩阵,否则输出0矩阵。
矩阵穿线块 输入:6端

输出:6端
跨方块传输矩阵数据。带有导线截面的两面为接线端,其余四面绝缘。
可以用它优化排线,或是作为不同颜色导线的连接桥梁。
矩阵延迟门 输入:后端

输出:前端
与原版延迟门功能几乎一样,但可调延迟门延迟上限增大至655.35秒。

处理器

非点对点:

方块 作用
矩阵求逆 求输入矩阵的逆矩阵。
矩阵转置 转置输入矩阵并输出。
矩阵二次方 按照矩阵乘法法则,将输入矩阵乘它本身。
矩阵三次方 按照矩阵乘法法则,将输入矩阵乘它本身再乘它本身。
矩阵转平均浮点数 将矩阵内每一个非0元素相加再除以非0元素的个数,将所得浮点数结果输出。
浮点数转常数矩阵 输出一个内部元素全为输入浮点数的矩阵。
矩阵转三维横向量 输出一个三维向量,内容是输入矩阵M11,M12,M13的值。
矩阵提取取向 求输入矩阵的取向矩阵。
矩阵提取平移 求输入矩阵的平移矩阵。
矩阵求行列式 求输入矩阵的行列式,输出浮点数。
矩阵平方开方器 将矩阵内所有元素的平方和再进行开方,最终输出。(即勾股定理,只不过有16个项)

点对点:

方块 作用
矩阵弧度转角度 依据点对点计算,将输入矩阵内所有元素转为角度制。(使用弧度制)
矩阵角度转弧度 依据点对点计算,将输入矩阵内所有元素转为弧度制。(使用角度制)
矩阵正弦 依据点对点计算,将输入矩阵内所有元素求正弦值。(使用弧度制)
矩阵余弦 依据点对点计算,将输入矩阵内所有元素求余弦值。(使用弧度制)
矩阵正切 依据点对点计算,将输入矩阵内所有元素求正切值。(使用弧度制)
矩阵反正弦 依据点对点计算,将输入矩阵内所有元素求反正弦值。(使用弧度制)
矩阵反余弦 依据点对点计算,将输入矩阵内所有元素求反余弦值。(使用弧度制)
矩阵反正切 依据点对点计算,将输入矩阵内所有元素求反正切值。(使用弧度制)

计算器

非点对点

方块 作用
矩阵乘法器 按照矩阵乘法法则,将输入矩阵相乘。
矩阵除法器 按照矩阵乘法法则,将左端输入矩阵乘右端输入矩阵的逆矩阵。

点对点

方块 作用(ML代替“左端输入矩阵各元素“,MR代替“右端输入矩阵各元素“)
矩阵加法器 ML + MR
矩阵减法器 ML - MR
矩阵乘法器 ML * MR
矩阵除法器 ML / MR
矩阵乘方器 ML ^ MR
矩阵除余器 ML % MR
矩阵对数器 ln(ML) / ln(MR)
矩阵取小器 min(ML, MR)
矩阵取大器 max(ML, MR)

解构器

方块 输入/输出面 作用
矩阵TO解构器 输入:底端

输出:左端(1点)右端(2点)
将输入矩阵提取其位移矩阵与取向矩阵,并在左端输出位移矩阵(T),右端输出取向矩阵(O)。
矩阵TRS解构器 输入:底端

输出:左端(1点)前端(2点)右端(3点)
将输入矩阵提取其位移、旋转(欧拉角)与缩放,并在左端输出位移(三维向量),上端输出旋转(弧度制欧拉角),右端输出缩放(三维向量)。
矩阵RUF(XYZ)解构器 输入:底端

输出:左端(1点)前端(2点)右端(3点)
将经过输入矩阵变换后的的X单位向量,Y单位向量,Z单位向量分别输出至左端,上端,右端。
矩阵转二阶方阵 输入:底端

输出:前后左右端
与“二阶方阵转矩阵”相反。
矩阵转四维横向量 输入:底端

输出:前后左右端
与“四维横向量转矩阵”相反。
四维横向量转浮点 输入:底端

输出:前后左右端
解构输入四维向量(x, y, z, w)。x:前端输出;y:右端输出;z:后端输出;w:左端输出。各出端口都为浮点。

矩阵真值表(点对点)

此真值表与原版有很大的不同,但是存在相似之处。

  • 同:都是表征逻输入和输出之间的可能状态与逻辑(通俗易懂地说:原版真值表可以替代任意逻辑门元件;而矩阵真值表可以替代所有点对点计算元件)

  • 异:原版真值表采用逻辑运算;矩阵真值表采用数学运算。

逻辑

玩家可在此真值表中输入16个表达式,这些表达式的值分别对应着输出矩阵M11~M44的值。不同元素表达式之间无法传递数据,也无法互相操作(点对点特性)。

输入

端口 作用 详细
输入矩阵供计算使用 表达式中写入"i1",即可获取此输入对应元素的值
输入矩阵供计算使用 表达式中写入"i2",即可获取此输入对应元素的值
输入矩阵供计算使用 表达式中写入"i3",即可获取此输入对应元素的值
输入矩阵供计算使用 表达式中写入"i4",即可获取此输入对应元素的值
输出计算后的结果

规则

  • 输出矩阵每个元素都对应真值表中一个表达式。表达式输入框左侧会有对应的输出矩阵的元素编号。

  • 此套规则的计算表达式基于NCalc2,写法类似于Excel公式。

  • 表达式若包含i1、i2、i3或i4,则计算时会将i1、i2、i3和i4分别替换为上、右、下、左输入矩阵的对应元素值。

  • 值默认十进制。

例子

  • 仅M11表达式为1+1,输出矩阵M11元素为2,其余为0。

  • 所有表达式为1+2,输出矩阵元素全为3。

  • M34表达式为i1+i2+2,且上端输入矩阵M34为2.5,右端输入矩阵M34为3,则输出矩阵的M34值为7.5(2.5+3+2=7.5)。


用电器

方块 输入/输出面 作用
矩阵LED 输入:前后左右底端 以点阵的形式显示输入的矩阵。点的大小为矩阵对应元素的绝对值,最大为1,最小为0。
方块展示板 输入:左端(1点)右端(2点) 详见方块展示板
矩阵可拓展数码LED 输入:前后左右底端 详见矩阵可拓展数码LED
实体转移板 输入:前左右底端,后端(时钟端) 将触碰到的实体的位置设置为输入矩阵的位移,旋转设置为输入矩阵的旋转。
当时钟端没有接线时,此元件每时每刻设置实体变换;而当时钟端接线后,当时钟端输入矩阵M11上升沿(由0开始上升)时,设置1次实体变换。
实体变换板 输入:左端(1点)右端(2点) 将触碰到的实体变换按照左端输入矩阵进行映射并返回给实体,而实体的速度按照右端输入矩阵进行映射并返回给实体。掉落物同理。
简单摄像机LED 输入:前后左右底端 详见简单摄像机LED
复杂摄像机LED 输入:前后左右端 详见复杂摄像机LED
矩阵发射器 输入:6端 与原版发射器有一定区别。
当输入矩阵变化(新值不为零矩阵)时,会尝试将内容物以一定速度发射出。
发射速度为发射器发射孔朝向的单位向量经过输入矩阵的变换后得到。
传送门控制器 输入:前后左右端 详见传送门控制器

方块展示板

显示一个方块,可以通过矩阵控制展示方块的形状。

输入:

端口 作用 详细
展示方块的变换矩阵 展示方块的位移、旋转、缩放、形状由此矩阵控制。
控制矩阵 详见下方“控制矩阵

控制矩阵:

  • M11:方块ID(有小数则向下取整))
  • M12:方块受环境因素影响(如:在沙漠树叶变黄;M12>0:是,反之否)
  • M13:使用相对坐标(例:方块不做任何变换前提下,不使用相对坐标,方块会显示在世界原点,反之会显示在LED中心;M13>0:是,反之否)

Gizmos:

  • 坐标轴:【红、绿、蓝短线】表示展示方块绘制时采用的坐标系(即经过矩阵变换的坐标系)。

  • 方位指示线:【粉→紫罗兰渐变色直线】由展示板坐标指向展示方块的位置。

矩阵可拓展数码LED

一个更加人性化的矩阵显示器,将矩阵通过 $4 \times 4$ 表格与16个数字显示,更加符合人们的阅读习惯,并且可拓展

特性

一片相连的LED(下文将这一片LED称为联动LED)可以联动获取并且显示矩阵,显示的矩阵为所有联动LED中的单体的输入矩阵之和。当联动LED为矩形时,会在对应矩形区域显示一整块矩阵表格,表格的尺寸等于联动LED所组成的矩形的尺寸;而当联动LED无法构成矩形时,每个LED单体会在自己对应的位置显示矩阵,尺寸为 $1 \times 1$

简单摄像机LED

创建一个摄像机,并且将摄像机捕捉到的画面显示出来。
摄像机视角矩阵(摄像机方位、旋转)为输入矩阵。

Gizmos:

  • 坐标轴:【红、绿、蓝短线】表示摄像机的本地坐标系(即经过视角矩阵变换的坐标系)。

  • 方位指示线:【粉→紫罗兰渐变色直线】由摄像机LED板指向摄像机的位置。

  • 实体框:【黄色正方体线框】指示摄像机所在的位置。

复杂摄像机LED

创建一个摄像机,并且将摄像机捕捉到的画面显示出来。

输入:

端口 作用 详细
摄像机视角矩阵,即摄像机方位、旋转
摄像机投影矩阵,即摄像机绘制画面所采用的投影矩阵 一般采用透视矩阵或正交矩阵
显示屏变换矩阵 默认显示屏位置为位于方块中心、朝向为正上方的正方形。此矩阵为这个正方形显示屏的四个端点的变换。(无法显示画面则可能因为这个输入未到位)
控制矩阵 详见下方“控制矩阵

控制矩阵:

  • M11:画面是否自适应显示,即不会被拉伸(M11>0:是,反之否)

  • M12:屏幕UV细分。此值有两个作用:决定摄像机是否采用屏幕UV绘制画面、决定屏幕UV绘制画面的细分程度。

    摄像机采用屏幕UV绘制画面(M12>0:是,反之否):即计算摄像机板显示屏四个角在屏幕的位置,显示出的画面的四个角不再是原始画面的四个角,而是根据屏幕UV映射过后的四个角。若要实现传送门效果,则详见此视频3:10~3:40

    屏幕UV绘制画面的细分程度:此值越小,细分程度越低,画面偏移越大,画面就越异常。所以为保证画面效果,此值建议设置为16~32。

Gizmos:

  • 坐标轴:【红、绿、蓝短线】表示摄像机的本地坐标系(即经过视角矩阵变换的坐标系)。

  • 方位指示线:【粉→紫罗兰渐变色直线】由摄像机LED板指向摄像机的位置。

  • 实体框:【黄色正方体线框】指示摄像机所在的位置。

  • 视锥框:【橙色线框】显示摄像机的视锥,在视锥中的物体都会被摄像机拍摄到。

传送门控制器

顾名思义,它可以根据你的输入矩阵创建或控制传送门。这个传送门是有画面的,你可以透过传送门看到传送门另一端的影像。

它会创造两个传送门,当你进入一个传送门后,它会将你传送至另一个传送门。

输入

端口 作用 详细
传送门1的变换矩阵 默认的传送门门扉(即此输入为单位阵时),位置为位于方块中心、朝向为正上方的正方形(与复杂摄像机差不多)。
此矩阵为这个正方形门扉的四个端点的变换。(无法显示画面则可能因为这个输入未到位)
传送门1的控制矩阵 详见下方“控制矩阵
传送门2的变换矩阵 详见上方“传送门1的变换矩阵
传送门2的控制矩阵 详见下方“控制矩阵

控制矩阵

  • M11:控制传送门的状态

    • ⌊M11⌋=0:传送门显示画面,执行传送

    • ⌊M11⌋=1:传送门既显示画面,也执行传送

    • ⌊M11⌋=2:传送门仅显示画面,执行传送

    • ⌊M11⌋=3:传送门显示画面,仅执行传送

  • M12:是否自动防止传送瞬间画面闪烁(M12>0:是,反之否)

    • 解释:当玩家靠传送门门扉足够近时,玩家摄像机近裁剪平面会与传送门门扉相交,进而暴露传送门门扉后的画面,即玩家会“看透”传送门。这会导致玩家靠近传送门传送时画面闪烁。

      为解决此问题,传送门门扉会依据特定算法,在玩家靠近时后退,保证不被玩家的摄像机“看透”。这也就避免了传送时闪烁的问题。(但是玩家速度很快时仍会闪烁,例如玩家穿了数值被暴力修改的跑鞋)

  • M13:传送门边框特效厚度

  • M21:传送门边框颜色R,范围[0, 1]

  • M22:传送门边框颜色G,范围[0, 1]

  • M23:传送门边框颜色B,范围[0, 1]

注意:控制器元件有输入两个控制矩阵,但是控制矩阵中有关设置传送门边框的部分,只由其中一个控制矩阵控制!请玩家注意甄别。(这是一个bug,涉及到底层逻辑,较难修复)


其他

矩阵变体锗块

更适合矩阵玩家与线代学者的锗块。

可以用来作装饰,作电路载体。

手持它时点击编辑按钮即可打开矩阵设置界面

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages