迅雷官方手把手教你,一个下载软件中到底可以强行植入多少广告
作者吐槽迅雷,即使付费会员仍有无法屏蔽的广告,加上其流氓行为,让人虽常用却心生反感。
作者吐槽迅雷,即使付费会员仍有无法屏蔽的广告,加上其流氓行为,让人虽常用却心生反感。
本文通过16个判断标准,教你识别伪云计算,看穿厂商的市场炒作。
这里开始,是真正的与3D图形编程相关的知识了,前两节只能算是纯数学。
要想将向量\(x, y, z, 1\)沿 x 轴平移\(p_x\)个单位,沿 y 轴平移\(p_y\)个单位,沿 z 轴平移\(p_z\)个单位,我们只需要将该向量与如下矩阵相乘。
\[N(p)= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ p_x & p_y & p_z & 1 \end{bmatrix}\]从中可以看出 4×4 矩阵 N 中的 \(N_{41}, N_{42}, N_{43}\) 分别控制其在 x 轴、y 轴、z 轴上的平移单位。
\[I= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\]是单位矩阵,我们已经知道,乘以单位矩阵相当于没有乘的家伙。这个矩阵就是从单位矩阵稍微变下型,多了第 4 行的几个值。我们先来看 \(p_x\) 为最后结果做出的贡献,向量 \(M(x,y,z,1)\) 与矩阵 \(N(p)\) 相乘后,最后 X 坐标的值(也就是结果向量的第一个分量)为 \(x\cdot1 + y\cdot0 + z\cdot0 + 1\cdot p_x = x + p_x\)。
y、z 的公式一样,就不多说了。这里可以看到,对于实施矩阵平移计算来说,需要将原向量(3 维)扩充的一维(一般用 w 表示)设为 1,不然的话,上述 x 坐标 \(x\cdot1 + y\cdot0 + z\cdot0 + 0\cdot p_x = x\), 也就是说,完全不会改变原向量了。
GNU Octave(matlab) 验证一下:
> p = [1,0,0,0;0,1,0,0;0,0,1,0;2,3,4,1]
p =
1 0 0 0
0 1 0 0
0 0 1 0
2 3 4 1
> x
x =
1 2 3 1
> x * p
ans =
3 5 7 1
x = 2 + 1 = 3,依次类推,结果正确。
我们将一个单位矩阵沿 X 轴缩放 X 倍,Y 轴缩放 Y 倍,Z 轴缩放 Z 倍,可令该向量与下列矩阵相乘。
\[S= \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\]按公式推导: X 坐标值为 \(x\cdot s_x + y\cdot0 + z\cdot0 + 0\cdot0 = x s_x\)。
y、z 的推导类似。
GNU Octave(matlab):
> x = [1,2,3,0]
x =
1 2 3 0
> p
p =
2 0 0 0
0 3 0 0
0 0 4 0
0 0 0 1
> x * p
ans =
2 6 12 0
结果正确。
旋转矩阵是在乘以一个向量的时候改变向量方向但不改变其大小的矩阵。旋转矩阵不包括反演。需要注意的是,进行旋转变换时,扩充 3 维向量的办法是令 w = 0。
我们可用如下 3 个矩阵将一个向量分别绕着 x、y、z 轴顺时针旋转 \(\theta\) 弧度。
\[X(\theta)= \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta & 0 \\ 0 & \sin\theta & \cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\] \[Y(\theta)= \begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \\ 0 & 1 & 0 & 0 \\ -\sin\theta & 0 & \cos\theta & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\] \[Z(\theta)= \begin{bmatrix} \cos\theta & \sin\theta & 0 & 0 \\ -\sin\theta & \cos\theta & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\]还是先看第一个公式,向量 \(M(x,y,z,0)\) 与矩阵 \(X(\theta)\) 相乘后:
这个就复杂了,不太好直观地看到验证结果,我们将其收到 2 维去看。
我们利用 GNU Octave(matlab) 的 compass 命令在 2 维空间中直观显示向量 \(x=[1, \tan(\pi/3), 0, 0]\)。
围绕 Z 轴顺时针旋转 30 度,相当于乘以 \(Z(\pi/6)\)。
> a = pi / 6
> p = [cos(a),sin(a),0,0;-sin(a),cos(a),0,0;0,0,1,0;0,0,0,1]
> x = [1, tan(pi/3), 0, 0]
> x2 = x * p
x2 =
0.00000 2.00000 0.00000 0.00000
精确的 30 度。
后续 irrlicht 与 D3D 的实现,本质上都是对上述旋转矩阵及其乘法结果的直接应用。
介绍如何通过创建符号链接,来更改Windows Live Writer的草稿保存目录,方便地将文章备份到Dropbox等其他位置以防丢失。
接上一篇讲向量的文章, 继续讲3D图形编程中的数学中最关键的概念, 矩阵.
因为大学时在高等数学课程中学习过线性代数相关的内容, 所以学习3D编程的时候这一段事实上是跳过去了, 学习到某些内容的时候觉得很郁闷, (4, 5年没有用了, 难免忘掉)最后常常依靠高级API完成, 但是事实上这些高级API的算法具体实现啥的基本看不懂, 于是还是决定回来好好的将基础部分弄明白, 当然, 首先是数学部分. 为了更好的达到直观的效果, 还有在复杂矩阵运算的时候验证运算结果, 将引入MATLAB的使用. 具体牵涉到计算的时尽量实现DirectX与Irrlicht两个版本, 也会参考部分源代码. (主要用于看看公式用C/C++的实现)基本上, 我希望能以概念的讲解为主, 最好是直观的讲解.
许多号称“免费”的软件仅限个人使用,商业使用会侵权。文章提醒用户,特别是企业,在选择软件时务必警惕版权陷阱,仔细查看授权。
文章对比了Java与C++,总结了Java在整数类型、变量初始化和数组等方面的改进。这些设计旨在解决C++的常见陷阱,让编程更安全、便捷。
文章通过对比发现,Google在IE、Firefox和Chrome上的主页及搜索页设计存在明显差异,作者推测这是Google为不同浏览器用户定制的体验或竞争策略。
作者回顾编程语言的兴衰,从C++转向学习Java。他反思自己广而不精的学习之路,虽有迷茫,但对新知识仍充满好奇,并以此标记职业新起点。