笛卡爾坐標系
在游戲制作中我們使用數學絕大部分都是為了計算位置,距離和角度等變數,這些計算大部分都是在笛卡爾坐標系下進行的,
二維笛卡爾坐標系
一個二維笛卡爾坐標系包含兩個部分的資訊:
- 一個特殊的位置,即原點,他是整個坐標系的中心,
- 兩條通過原點的相互垂直的矢量,即X軸和Y軸這些坐標軸也被成為該坐標的基矢量,

三維笛卡爾坐標系
在三維笛卡爾坐標系中,我們需要定義3個坐標軸和一個原點,這三個軸也被稱為該坐標的基矢量,通常情況下,這三個坐標軸之間是相互垂直的而且長度為1,這樣的矢量也被稱為標準正交基,但是這并不是必須的,在一些坐標系中坐標軸之間是相互垂直的但是長度不為1,這樣的矢量被稱為正交基,

三維笛卡爾坐標系的坐標軸方向不是固定的,導致兩種不同的坐標系,左手坐標系和右手坐標系,

判斷向前的方向,向右伸直右手,此時右手的方向就是X軸的正方向,頭頂方向就是Y軸的正方向,這時如果你的正方向是Z軸正方向就是一個左手坐標系;如果你的正方向是Z軸的負方向就是右手坐標系,
除了坐標軸的朝向不同為,左手坐標系和右手坐標系對于正向旋轉的定義也不同,即左手法則和右手法則,

點和矢量
點,是N維空間中的一個位置,他沒有大小,寬度概念,
矢量,矢量是指N維空間中的一種包含了模和方向的有向線段,
- 矢量的模指的是矢量的長度,一個矢量的長度可以是任意的非負數,
- 矢量的方向是這個矢量在空間中的指向,V=(X,Y)來表示二維矢量,用V=(X,Y,Z)來表示三維矢量,V=(X,Y,Z,W)來表示四維向量,
矢量的運算
矢量和標量的乘法/除法

矢量的加法和減法

一個矢量不可以和一個標量相加減,

矢量的模
矢量是有模和方向的,矢量的模是一個標量,可以理解成矢量在空間中的長度,

單位矢量
單位矢量是指那些模為1的矢量,單位矢量也被稱為被歸一的矢量,對于任何非零的矢量,把他轉化成單位矢量的程序就是歸一化,
矢量的點積
點積的名稱來源于這個運算子號:a·b,中間的圓點符號是不可以省略的,


點積的幾何意義很重要,因為點積幾乎應用到了圖形學的各個方面,其中一個幾何意義就是投影,

也就是說點積的符號可以讓我們知道兩個矢量的反向關系,
點積具有一些很重要的性質,
性質一:點積可以結合標量乘法,
對點積中其中一個矢量進行縮放的結果,就相當于對最后的點積結果縮放,
![]()
性質二:點積可以結合矢量加法和減法,和性質一類似,
![]()
性質三:一個矢量和本身進行點積的結果,是該矢量的模的平方,
![]()
矢量的叉積
矢量的叉積結果是一個矢量,而非標量,

注意叉積不滿足交換規律axb≠bxa,
叉積最常見的一個應用就是計算垂直于一個平面的矢量,另外還可以判斷三角面片的朝向,
點積和叉積在unity中的演示

public Transform initial;
public Transform target;
void Start()
{
var initialForward = initial.forward;
var initialTargetVector = target.position - initial.position;
var dot = Vector3.Dot(initialForward, initialTargetVector);
if (dot > 0)
{
Debug.Log("target在cube的后面");
}
else if (dot < 0)
{
Debug.Log("target在cube的前面");
}
else
{
Debug.Log("target和cube平行");
}
var cross = Vector3.Cross(initialForward, initialTargetVector);
if (cross.y > 0)
{
Debug.Log("target在cube的右面");
}
else if (cross.y < 0)
{
Debug.Log("target在cube的左面");
}
else
{
Debug.Log("target在cube的前面或者后面");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414001.html
標籤:其他
上一篇:用C語言實作一個小游戲—猜數字
下一篇:藍橋杯第二講--遞推【例題】
