从线性代数到unity mvp矩阵

坐标变换:矩阵是一种线性空间变换的描述(矩阵的列向量,是坐标变换后的基向量)。

如:  \begin{bmatrix} 1&3 \\ -2&0 \end{bmatrix}\begin{bmatrix} -1\\ 2 \end{bmatrix} = \begin{bmatrix} 5\\ 2 \end{bmatrix}

如上图,即向量(-1,2)在经过由基底x轴:(1, -2) ,y轴:(3, 0)组成的矩阵变换后得到向量(5,2)

实际上就是-1倍的x轴:(1, -2)加上2倍的y轴:(3, 0)

以基底作为列向量组成的矩阵可以表示旋转、缩放变换。

下面说一个最简单的二维空间变换实例:

假设:BAC是一个以AC:(2,2)作为X轴,AB:(-2,2)作为Y轴的模型空间,那么点D在模型空间下的坐标就是(0.5, 0.5)。

我们现在把点D变换到世界空间下的坐标

1.可以看出点D在世界空间下,基于点A往AC方向走了0.5倍的AC,在AB方向走了0.5倍的AB。

用向量计算就是:0.5 · AC + 0.5 · AB = (0,2)。

那么点D相对于点A在世界空间下偏移了(0,2)。

用矩阵计算就是:\begin{bmatrix} 2 & -2\\ 2& 2 \end{bmatrix}\cdot \begin{bmatrix} 0.5\\ 0.5 \end{bmatrix}=\begin{bmatrix} 0\\ 2 \end{bmatrix}。这个矩阵就是一个缩放、旋转组合的变换矩阵。

2.这时候我们知道了点D比点A在世界空间下是偏移了(0,2),我们又知道点A的世界坐标是(-3,2)。

那么D的世界坐标就是(-3,2) + (0, 2) = (-3, 4),

即:\begin{bmatrix} 1 & 0& -3\\ 0& 1& 2\\ 0& 0& 1 \end{bmatrix}\cdot \begin{bmatrix} 0 \\ 2 \\ 1 \end{bmatrix}=\begin{bmatrix} -3\\ 4\\ 1 \end{bmatrix}  。最左边的这个3X3矩阵就是平移变换矩阵。

最后从上面可以看出,我们必须先计算缩放、旋转矩阵的变换,再计算平移矩阵的变换。因为一开始的点(0.5, 0.5)是模型空间的坐标,而平移的坐标是世界空间下的坐标,两者并不在一个空间维度下,直接平移是不匹配的。只能先通过缩放、旋转矩阵变换之后得到的世界空间下的偏移值才能用坐标A来进行世界空间的平移变换。

逆矩阵:

逆矩阵就是矩阵的逆变换

若有矩阵A,则A的逆矩阵为:A^{-1}。有性质A^{}\cdot A^{-1} = E,其中E为单位矩阵。

若有向量i经过A矩阵变换后得到jA^{}\cdot i = j。又因为矩阵乘法结合律。

则有:A^{-1}\cdot j = A^{-1}\cdot A\cdot i = E\cdot i = i,即j经过A矩阵的逆变换会变回i

四维空间:

        2X2的矩阵代表二维空甲的线性变换,而3X3矩阵则可以表示一个三维空间的变换。

        在三维空间中,将向量 u 变换到向量 v,如果该变换是一个线性变换,一般可以使用一个不依赖于 u、v 的 3x3 的矩阵描述,即 A · u = v,其中 A 是描述该线性变换的变换矩阵。但是,并不是所有线性变换都能使用 3x3 矩阵描述,如:平移变换和对称变换,对于这些变换,需要将空间扩展到四维空间中,再使用 4x4 矩阵描述。这里注意,平移变换对向量来讲是没有意义的,因为无论如何平移,向量都是一样的,平移变换只对坐标点有意义。

        Unity 模型变换主要有平移、旋转、缩放、对称,其中旋转和缩放变换可以使用 3x3 矩阵描述,平移和对称变换必须使用 4x4 矩阵描述,为了统一描述这些变换,将三维空间扩展到四维空间中,扩展方法如下:

三维空间中的坐标原点 [0, 0, 0]' 映射到四维空间中的 [0, 0, 0, 1]' 点;
三维空间中的 x、y、z 轴正方向单位向量 [1, 0, 0]'、[0, 1, 0]'、[0, 0, 1]' 分别映射到四维空间中的 [1, 0, 0, 0]'、 [0, 1, 0, 0]'、 [0, 0, 1, 0]' 向量;
新添加的 w 轴 正方向单位向量为 [0, 0, 0, 1]'。
        注意:三维空间中的原点 [0, 0, 0]' 并没有映射到四维空间中的原点 [0, 0, 0, 0]‘,而是映射到 [0, 0, 0, 1]’。

         由以上空间映射关系可知:

三维空间中的任意点 [x, y, z]',对应的四维空间坐标为:[x, y, z, 1]';
三维空间中的任意向量 [x, y, z]',对应的四维空间坐标为:[x, y, z, 0]'。

为什么这样做?

举个例子:

1:对点(1, 1, 1)进行平移变换:

\begin{bmatrix} 1 & 0& 0& 2\\ 0& 1& 0 & 3\\ 0& 0& 1& 4\\ 0& 0& 0 & 1 \end{bmatrix}  \begin{bmatrix} 1\\ 1\\ 1\\ 1 \end{bmatrix} = \begin{bmatrix} 3\\ 4\\ 5\\ 1 \end{bmatrix} 

2:对向量(1, 1, 1)进行平移变换:

\begin{bmatrix} 1 & 0& 0& 2\\ 0& 1& 0 & 3\\ 0& 0& 1& 4\\ 0& 0& 0 & 1 \end{bmatrix}  \begin{bmatrix} 1\\ 1\\ 1\\ 0 \end{bmatrix} = \begin{bmatrix} 1\\ 1\\ 1\\ 0 \end{bmatrix}

左手坐标系与右手坐标系:

      Unity 局部空间、世界空间、裁剪空间、屏幕空间都采用左手坐标系,只有观察空间采用右手坐标系

左右手坐标系除了坐标系朝向(旋向性)不同,还存在以下差异: 

左手坐标系下旋转正方向的定义遵循左手法则,右手坐标系下旋转正方向的定义遵循右手法则;
左手坐标系下向量叉乘遵循左手法则,右手坐标系下向量叉乘遵循右手法则。
原文链接:https://blog.csdn.net/m0_37602827/article/details/129036096

MVP矩阵的构成:
        MVP矩阵顾名思义,它是由M,V,P三个矩阵组够成的矩阵,其中M为模型矩阵,V为视图矩阵,P为投影矩阵。M矩阵用来将物体顶点在模型空间下的坐标转换为在世界空间下的坐标,V矩阵用来将物体顶点在世界空间下的坐标转换为视图空间下的坐标。P矩阵用来将物体顶点在视图空间的坐标转换为裁剪空间的坐标。M矩阵包括平移矩阵、旋转矩阵、缩放矩阵。V矩阵包括旋转矩阵,平移矩阵。P矩阵则包括正交投影矩阵和透视投影矩阵。

M矩阵

已知:

模型空间坐标原点在世界空间的位置

模型空间坐标系在世界空间的旋转信息

模型空间坐标系在世界空间的缩放信息

有了这几个已知量,根据世界空间的相对位置,相对旋转和相对缩放信息,很容易得到模型变换的矩阵,也就是三个三维空间下的基础变换矩阵,从左至右依次为[平移]*[旋转]*[缩放]

实例:

为了更直观,我们直接用基底来组成旋转、缩放变换矩阵,不用角度了。实际上基底可以用旋转角度和缩放计算出来。

如上图,模型空间(左手坐标系)是由Xm,Ym,Zm三个基底组成的。现在我们需要坐标A变换到世界空间。

(由于上图的世界空间是采用的是右手坐标系,为了切合unity转换成左手坐标系,上图的z轴正方向其实是向下的)

已知:

1:三个基底在世界空间下的向量数值:

Xm:\begin{bmatrix} -1\\ 1\\ 0 \end{bmatrix}    Ym:\begin{bmatrix} -1\\ -1\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ 1.41 \end{bmatrix}

2:基底原点的世界坐标:

B:\begin{bmatrix} 1\\ -1\\ 0 \end{bmatrix}

3:坐标A在模型空间下的坐标:

A:\begin{bmatrix} 0.5\\ 0\\ -1/1.41 \end{bmatrix}

首先:

1:把基底转换成四维向量(补0):

Xm:\begin{bmatrix} -1\\ 1\\ 0 \\0\end{bmatrix}    Ym:\begin{bmatrix} -1\\ -1\\ 0\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ 1.41 \\ 0 \end{bmatrix}

2:把模型空间原点转换成四维坐标(补1):

B:\begin{bmatrix} 1\\ -1\\ 0 \\ 1\end{bmatrix}

3:把模型空间下的坐标A转换成四维坐标(补1):

A:\begin{bmatrix} 0.5\\ 0\\ -1/1.41 \\1 \end{bmatrix}

然后用三个基底组成旋转、缩放变换矩阵:

\begin{bmatrix} -1 & -1&0 & 0\\ 1& -1& 0& 0\\ 0& 0 & 1.41 &0 \\ 0&0& 0 & 1 \end{bmatrix}

接着用模型空间原点B得到平移变换矩阵:

\begin{bmatrix} 1& 0& 0&1 \\ 0& 1& 0&-1 \\ 0& 0 & 1 & 0\\ 0& 0 & 0& 1 \end{bmatrix}

最后把上面的平移矩阵和缩放旋转矩阵组成矩阵M然后与A相乘(注意:先计算缩放旋转,再计算平移),则可以把坐标A由模型空间变换到世界空间

M:\begin{bmatrix} 1& 0& 0&1 \\ 0& 1& 0&-1 \\ 0& 0 & 1 & 0\\ 0& 0 & 0& 1 \end{bmatrix}\cdot \begin{bmatrix} -1 & -1&0 & 0\\ 1& -1& 0& 0\\ 0& 0 & 1.41 &0 \\ 0&0& 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 0.5\\ 0\\ -1/1.41\\ 1 \end{bmatrix}=\begin{bmatrix} 0.5\\ -0.5\\ -1\\ 1 \end{bmatrix}

插入知识点:关于正交矩阵:

正交矩阵的基底两两互相垂直的单位向量(点积为0)。

有推论:正交矩阵的转置矩阵等于其逆矩阵

证明:

为什么正交矩阵的转置矩阵是其逆矩阵-CSDN博客

V矩阵:

从上面的实例已经可以知道模型空间下的坐标变换到世界空间需要经过缩放旋转变换,再进行平移变换,而这里需要把坐标点从世界空间变换到视图空间,则需要先反向进行平移变换,再反向进行旋转变换。因为旋转变换矩阵是正交矩阵,所以逆矩阵就是矩阵的转置。在Unity中,观察空间中使用的是右手系,与世界空间中的左手系z轴方向相反,所以最后需要对z轴反向(如果以基底来组成缩放旋转矩阵的话,可以忽略这个z轴取反,因为基底本身已经取反了)。

 实例:

为了更直观,我们直接用基底来组成旋转变换矩阵,不用角度了。实际上基底是可以用旋转角度计算出来的。

图中的B是摄像机,Xm,Ym,Zm是视图空间的基底(右手坐标系)

(由于上图的世界空间是采用的是右手坐标系,为了切合unity转换成左手坐标系,上图的z轴正方向其实是向下的)

已知:

1:三个基底在世界空间下的向量数值:基底要进行归一化,正交矩阵的基底是单位向量

Xm:\begin{bmatrix} -\frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2}\\ 0 \end{bmatrix}    Ym:\begin{bmatrix} - \frac{\sqrt{2}}{2}\\ -\frac{\sqrt{2}}{2}\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ -1\end{bmatrix}

2:基底原点的世界坐标=>变成四维坐标:

B:\begin{bmatrix} 1\\ -1\\ 0 \end{bmatrix} => \begin{bmatrix} 1\\ -1\\ 0\\ 1 \end{bmatrix}

3:坐标A在世界空间下的坐标=>变成四维坐标:

A:\begin{bmatrix} 0.5\\ -0.5\\ -1 \end{bmatrix}=>\begin{bmatrix} 0.5\\ -0.5\\ -1\\1 \end{bmatrix}

首先用B组成平移矩阵:

\begin{bmatrix} 1 & 0 & 0 &1 \\ 0& 1& 0& -1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

该矩阵可以把坐标从视图空间转换到世界空间,如果我们想要把坐标从世界空间转换到视图空间,则要取反:

\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

然后把Xm,Ym,Zm组成3x3矩阵:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2}&0 \\ \frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0&\\ 0& 0 & -1\\ \end{bmatrix}

则该矩阵可以把视图空间下的向量变换到世界空间,若我们想把向量从世界空间变换到视图空间,则需要把该矩阵进行转置:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 \\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0&\\ 0& 0 & -1\\ \end{bmatrix}

又因为正交矩阵的转置等于其逆矩阵,所以该矩阵可以把向量从世界空间变换到视图空间(逆变换)

然后我们把三维拓展成四维

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot

接着把两个矩阵组合起来

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

最后进行变换计算就可以得到坐标点A在视图空间下的坐标了:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}\cdot \begin{bmatrix} 0.5\\ -0.5\\ -1\\ 1 \end{bmatrix}=\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} -0.5\\ 0.5\\ -1\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{\sqrt{2}}{2}\\ 0\\ 1\\ 1 \end{bmatrix}

P矩阵:

以下内容转载自[计算机图形学]MVP变换(前瞻预习/复习回顾)_图形学wmp矩阵-CSDN博客

投影矩阵分为正交投影矩阵和透视投影矩阵,先做透视投影,再做正交投影。

(1)透视投影和正交投影的区别:

左:透视投影 右:正交投影

简单的说,

透视投影符合我们人眼的视觉也就是近大远小,平行线远处相交

正交投影不改变大小,没有近大远小,且平行线永远平行。

(2)透视投影矩阵:
前面我们说了我们要先做透视投影矩阵再做正交投影矩阵,而透视投影矩阵实际上是把我们前面说的视锥,也就是四棱台压缩成正交投影中的长方体的样子的过程。这是一个相当复杂的变换过程,但有几点我们是可以根据经验直接确定的。

首先,规定近平面和远平面也就是上图所写的Near clip plane和Far clip plane。

然后,我们发现当进行压缩时,近平面的坐标是不变的,而远平面的中心点不变。

那么我们总体的过程就是先挤压远平面到和近平面相同的大小,再进行正交投影。


那么我们假设如上图规定近平面和远平面一点的坐标分别为(x',y',z',1)和(x,y,z,1)

图中有一些误解,这里我把摄像机到远平面的距离改为小写的 ' z ' ,到近平面的距离仍然为小写的n。

这个小写的z待会还会用f来替代(意为far,"远")。由此我们得出映射关系n/z或者说n/f。


那么再根据齐次坐标可知,我们都乘以z,那么坐标表示的在空间的位置是不变的,如上图。


到了这一步我们可以根据变换后的坐标写出该4X4矩阵的1,2,4行,那么只剩第三行没有解决如上图。

这里就需要用到我们前面提到的判断,我们虽然不知道常规点是怎么动的但是我们可以找特殊点,而特殊点一定符合规律,通过前面我们可知,近平面上的点不变,远平面的中心点不变。

那么先将近平面的点坐标带入我们刚才得到的未知量方程,得到如下图:


将我们的矩阵第三行未知量分别设为(0,0,A,B),因为n的平方和x,y没有关系。再根据近平面的点列方程可得如下图:(远平面同理,如下图第二个公式)


最终可得到关于A,B的两个方程,n,f分别为近平面到摄像机的距离和远平面到摄像机的距离为已知量。

两个方程,两个未知数,可解,可得:如下图:


再把AB带回原矩阵即可得到透视投影矩阵


(3)正交投影矩阵:
经过透视投影矩阵,我们的视锥体(棱台)已经被挤压成视景体(长方体)了,且内部并不均匀(形成了近大远小的效果),下一步,就是进行正交投影。

我们先把视景体捏成一个正则立方体也就是,三个轴的坐标都在[-1,1]范围内的立方体,并且将中心移到原点,这样方便之后的各种操作计算。过程如下图:


规定了各个面的坐标,那么缩放矩阵(使用2做归一化处理),平移矩阵都很好得出,如下图


而在视锥体中,由于f为远平面的中心点,该矩阵还可以简化为如下图:


(4)投影矩阵合体:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程同步 线程安全

这里写目录标题 线程安全互斥锁**互斥锁初始化****互斥锁加锁和解锁****销毁互斥锁****互斥锁死锁****互斥锁的属性** 条件变量条件变量初始化通知和等待条件变量条件变量的判断条件 自旋锁自旋锁初始化自旋锁加锁和解锁 读写锁读写锁初始化读写锁上锁和解锁读写锁的属性 线程安…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释: 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述: 导入库:代码首先导入必要的库: cv2:用于图像和视频处理…

蓝桥杯基本算法~~~一维/二维前缀和问题

文章目录 1.一维前缀和2.二维前缀和3.移动零问题4.颜色的分类问题 1.一维前缀和 问题说明:一维就是表示的是一维数组的计算,我们的这个一维前缀和是基于这个一维数组进行计算的; 什么是前缀和:就是10 20 30 40 50这个数组&#…

ubuntu20.04系统安装

文章目录 前言参考1 一、准备工作1、进入BIOS,设置 UEFI/Legacy Boot选项 为UEFI2、进入BIOS界面将Secure Boot禁用3、USB启动为enable 二、单系统安装1、插入U盘,电脑正常开机后 总结 前言 装了很多次ubuntu系统,整理一篇自己的文章很费时间…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的,使模块能够按需加载,使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

【宠物狗狗数据集】 犬类品种识别 宠物狗检测 深度学习 目标检测(含数据集)

一、背景意义 随着人们对宠物狗的喜爱日益增加,犬种的多样性也逐渐受到重视。狗狗不仅是家庭的好伴侣,更在多个领域中发挥着重要作用,如导盲、搜救、疗愈等。因此,准确识别和分类各种犬种显得尤为重要。传统的犬种识别方法往往依赖…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日,2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商,移远通信再次亮相,并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

虚拟机桥接模式连不上,无法进行SSH等远程操作

说明:以下情况在window10上遇到,解决后顺便做了个笔记,以防后续再次用到,也给同道中人提供一个解决方案 一、首先按照以下步骤进行检查 1、是否连接了对应的wifi 2、是否设置了桥接模式 3、上述1、2确认无误的情况下请查看右上…

ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用

本文整理于 2024 年云栖大会阿里云智能集团高级技术专家金吉祥(牟羽)带来的主题演讲《ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用》 云消息队列 ApsaraMQ 全系列产品 Serverless 化,支持按量付费、自适应弹性、跨可…

一款专业获取 iOS 设备的 UDID 工具|一键获取iPhone iPad设备的 UDID

什么是UDID? UDID,是iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID( Unique Device Identifier) 扫描后系统提示输入密码&am…

IDEA连接EXPRESS版本的SQL server数据库

我安装的版本是SQL2019-SSEI-Expr.exe 也就是EXPRESS版本的SQL Server安排非常简单和快速。 但是默认没有启动sa用户。 启动sa用户名密码登录 默认安装完以后没有启用。 使用Miscrosoft SQL Server Management Studio 使用Windows身份连接后。 在安全性》登录名中找到sa并修改…

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】

大模型,多模态大模型面试问题【计算图,LLama,交叉熵,SiLU,RLHF】 问题一:讲一讲计算图中pytorch是什么,TensorFlow是什么?1. PyTorch2. TensorFlow区别总结 问题二:Llama…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere:视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

隨筆 20241025 Kafka数据一致性的韭菜比喻

在Kafka中,数据一致性是通过Leader和Follower副本之间的协调来实现的。为了更容易理解这个复杂的概念,我们可以用韭菜作为比喻。 韭菜的角色 Leader韭菜:代表数据的主导者,它负责更新和维护最新的数据。Follower韭菜&#xff1a…

【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文,均为可选项: 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上,这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前,铭文的默…

标准正态分布的数据 tensorflow 实现正态分布图,python 编程,数据分析和人工智能...

登录后复制 import tensorflow as tfimport matplotlib.pyplot as plt# 设置随机种子以获得可重复的结果tf.random.set_seed(42)# 生成正态分布的数据# mean0 和 stddev1 表示生成标准正态分布的数据# shape(1000,) 表示生成1000个数据点data tf.random.normal(mean0, stddev1…

005 IP地址的分类

拓扑结构如下 两台主机处于同一个网关下,通过ping命令检测,可以连通 &nbps; 拓扑结构如下 使用ping 检查两台电脑是否相通, 因为网络号不一样,表示两台电脑不在同一个网络,因此无法连通 拓扑结构如下 不在同一网络的PC要相…

HTML--浮动布局练习

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* 整个浏览器页…

后台管理系统的通用权限解决方案(二)SpringBoot整合Swagger Springfox实现接口日志文档

文章目录 1 Swagger介绍2 Swagger常用注解3 Swagger使用案例 1 Swagger介绍 使用Swagger&#xff0c;我们只需要按照它的规范去定义接口及接口相关的信息&#xff0c;再通过Swagger衍生出来的一系列项目和工具&#xff0c;就可以做到生成各种格式的接口文档&#xff0c;生成多…