第1章 简介
第2章 笛卡尔坐标系
第4章 向量
这几章没讲什么,主要是一些基础概念,有兴趣的自己看
第3章 多坐标系
惯性坐标系
原点在物体坐标系,方向和世界坐标系平行为什么要关心坐标系
从物体坐标系到关系坐标系只需要旋转
,从惯性坐标系到世界坐标系只需要平移
坐标系的转换
平常我将具体点进行坐标变换,这里进行了物体坐标轴的变换,这样有个好处使用于整个物体所有的点
第5章 向量运算
向量点乘(内积)
结果如下 a ⃗ ⋅ b ⃗ = ∣ a ∣ ∣ b ∣ c o s θ \vec a \cdot \vec b = |a| |b|cos\theta a⋅b=∣a∣∣b∣cosθ
向量的投影
给定2个向量v、n,v可以分解为平行于n的向量
和垂直于n的向量
一般称平行于n的向量为v在n的投影
推导出来的公式如下
向量的叉乘
a ⃗ × b ⃗ = ∣ a ∣ ∣ b ∣ s i n θ \vec a \times \vec b = |a| |b|sin\theta a×b=∣a∣∣b∣sinθ 可以得到垂直于a和b的一个向量
怎样确定叉乘方向?
2个向量首尾相连,左手坐标系,顺时针则指向自己,逆时针则远离自己,右手坐标系相反
3D向量类
- 下面是C#简单的实现(原文是用C++写的)
public struct Vector3
{
float _x, _y, _z;
public Vector3(float x, float y, float z)
{
_x = x;
_y = y;
_z = z;
}
// 其他重载运算符省略
public static Vector3 operator+(Vector3 v3_1, Vector3 v3_2)
{
return new Vector3(v3_1._x + v3_2._x, v3_1._y + v3_2._y, v3_1._z + v3_2._z);
}
/// <summary>
/// 归一化
/// </summary>
public void Normalize()
{
var magSq = _x * _x + _y * _y + _z * _z;
if(magSq > 0f)
{
float oneOverMag = 1f / (float)Math.Sqrt(magSq);
_x *= oneOverMag;
_y *= oneOverMag;
_z *= oneOverMag;
}
}
/// <summary>
/// 求模长
/// </summary>
/// <returns></returns>
public float Mag()
{
return (float)Math.Sqrt(_x * _x + _y * _y + _z * _z);
}
/// <summary>
/// 叉乘
/// </summary>
public static Vector3 Cross(Vector3 v1, Vector3 v2)
{
return new Vector3(
v1._y * v2._z - v1._z * v2._y,
v1._z * v2._x - v1._x * v2._z,
v1._x * v2._y - v1._y * v2._x
);
}
public static float Distance(Vector3 v1, Vector3 v2)
{
float dx = v2._x - v1._x;
float dy = v2._y - v1._y;
float dz = v2._z - v1._z;
return (float)Math.Sqrt(dx + dy + dz);
}
}
矩阵
方阵
行列数相同的矩阵,方阵元素下标行列相同的元素对角矩阵
方阵的非对角元素都为0单位矩阵
对角矩阵的对角元素都为1转置
转置矩阵的行是原矩阵的列,列是原矩阵的行
转置矩阵的转置矩阵是原矩阵
对角矩阵的转置矩阵还是原矩阵
- 矩阵乘法,书上有个方便计算的格式
如何具化矩阵
将矩阵分别看为基向量,然后将会在2D表现出成L形状,3D将会表现为三角架,这样更方便理解