簡介:
本書是關於3D數學、三維空間的幾何和代數的入門教材。它旨在告訴你如何使用數學描述三維中的物體及其位置、方向和軌跡。這不是一本關於計算機圖形學、模擬,甚至計算幾何的書,但是,如果讀者打算研究這些科目,那麼肯定需要這裡的資訊。
這是一本適宜影片遊戲程式開發人員閱讀的圖書。雖然本書假定大多數讀者都是為了編寫影片遊戲而學習,但我們期待更廣泛的受眾,並且在設計這本書的體例時也考慮到了不同的受眾。如果你是程式開發人員或有興趣學習如何製作影片遊戲,歡迎加入! 如果你沒有達到這些標準,那麼你在這裡仍然可以收穫很多。
我們已經盡一切努力使本書對設計師和技術美工也很有用。雖然本書中有一些程式碼片段,但即使對於非程式開發人員來說,它們也很容易閱讀(希望如此)。最重要的是,雖然你需要先理解相關的概念才能理解程式碼,但是反過來並不成立。我們使用程式碼示例來說明如何在計算機上實現創意,而不是解釋這些創意本身。
第一章:笛卡爾座標系
1.1 一維數學
自然數 Natural Number : 非負整數的集合,其特點是有序性和無限性
因為日常生活中對數字的需要,於是先產生自然數,這裡提到是“死羊的個數”。
整數 Integer : 整數是由自然數字和它們的負面對應物組成。
因為生產生活的發展,產生經濟活動,逐步開始有貧窮、負債、借貸等需要,於是在自然數的基礎上擴充到整數。
**有理數 Rational Number :整數和分數 **
再在整數的基礎上擴充,如要買半隻羊,擴充到分數領域,便將數字範圍由整數擴充到有理數。
實數 Real Number :包括有理數和無理數
有時候也會遇到無法準確表示實際意義的數值,典型的如Π(圓周率)。
我們需要知道是,有理數是可數的(也就是說,可以與自然數一一對應),但實數是不可數的。
對自然數和整數的研究稱之為離散數學 Discrete Mathematics
對實數的研究稱之為 連續數學 Continuous Mathematics
現實世界卻是離散的。這對三維計算機生成的虛擬現實的設計者有何影響?就其本質而言,計算機是離散的和有限的,並且更有可能在創造過程中而不是在現實世界中遇到離散性和有限性的結果。
這些數字可以是short、int、float 和double型別的。
計算機中離散數學所使用的變數型別:
- short:short是一個16位(bit)的整數,可以儲存65536個不同的值
- int: int是一個32位的整數,它最多可儲存4,294,967,296個不同的值
- float: float 也是一個32位的值,它可以儲存有理數的子集(略少於4294967296,在這裡細節並不重要)。
- double: double 和 float類似,但它使用64位而不是32位.
計算機圖形學第一定律:
如果它看起來正確,那就是對的。
1.2 二維笛卡爾空間(平面空間)
- 每個二維笛卡爾座標空間都有一個特殊位置,稱之為原點,Origin,它是座標系的“中心”,座標為(0,0)
- 每個二維笛卡兒座標空間都有兩條直線透過原點。每條線都被稱為軸(Axis),並且可以在兩個相反的方向上無限延伸。
- 兩個軸彼此垂直(實際上,它們並不是必然要垂直的,但我們看到的大多數常見系統都將具有垂直軸)。
在二維座標系中描述座標位置:
在二維中,兩個數字即可用於指定位置(事實上,用兩個數字來描述一個點的位置就是它被稱為二維或二維空間的原因。在三維或三維空間中,需要使用3個數字)。在(2,4)這個示例中,第一個座標(也就是2)被稱為x座標;第二個座標(也就是4)被稱為y座標。
請注意,垂直網格線由所有具有相同x座標的點組成,換句話說,垂直網格線(實際上是任何垂直線)標記常數x的線。同樣地,水平網格線標記常數y的線,也就是說,該行上的所有點都具有相同的y座標。當討論極座標空間時,需要稍微回顧一下這個知識點。
1.3 三維笛卡爾空間
1.3.1 新增維度和軸
在三維中,我們需要3個軸來建立座標系。前兩個軸分別稱為x軸和y軸,就像在二維中一樣(當然,說它們與二維軸相同是不準確的,稍後會有更詳細的解釋)。我們將第三個軸(可預測地)稱為z軸。一般來說,我們會進行設定以使所有軸相互垂直,即每個軸垂直於其他軸。
在三維中,任何一對軸定義包含兩個軸並垂直於第三軸的平面。同樣,xz平面垂直於y軸,yz平面垂直於x軸。我們可以將這些平面中的任何一個視為自己的二維笛卡兒座標空間。
1.3.2 在三維空間中指定位置
在三維中,使用3個數字x、y和z指定點,這些數字分別給出yz、xz和xy平面的有符號距離。
距離的測量將沿著平行於軸的直線進行。例如,x值就是到yz平面的有符號距離,沿著平行於x軸的直線測量。
1.3.3左手和右手座標空間
所有二維座標系在某種意義上都是“相等的”,對於任何兩個二維座標空間A和B,可以旋轉座標空間A,使得+x和+y的指向與它們在座標空間B中的指向相同(假設軸是垂直的)。
三維座標系有兩週座標型別:
左手(Left-Handed)座標空間和右手(Right-Handed)座標空間。
如果兩個座標空間具有相同的旋向性(Handedness),則可以旋轉它們使得軸對齊;如果兩個座標空間的旋向性相反,那麼這就是不可能的。
這是左手三維空間座標系
這是右手空間座標系
左旋和右旋座標系在“正旋轉”的定義上也有所不同。
假設在空間中有一條直線,需要圍繞這條直線旋轉指定的角度,將此直線稱之為旋轉軸。首先我們必須定義軸“指向”的方向,基於此來指定旋轉的正方向。
在左手座標系中,正向旋轉從軸的正端看時是順時針(Clockwise)旋轉的;
而在右手座標系中,正向旋轉是逆時針(Counterclockwise)旋轉的。
1.4 一些零散的知識
求和表示法(Summation Notation)
要獲取一系列數值的乘積,可用類似的表示法:
區間符號
角度、度數和弧度
度 Degree : 360度 為一週
弧度 Radian: 測量度數所對應的那段弧的長度,
三角函式
使用單位圓來定義三角函式:
在二維中,如果以指向+x的單位線條開始,然後逆時針旋轉該線條角度0,則可以在標準位置(Standard Position)繪製該角度(如果該角度為負,則沿另一個方向旋轉線條)。
這樣旋轉的線條端點的(x,y)座標具有特殊屬性,並且在數學上非常重要,因此,它們被賦予了特殊函式,稱為角度的餘弦(cosine)和正弦(sine),定義如下:
在正弦和餘弦函式基礎上可以繼續定義割線、餘割、切線和餘切
比關係,謹記勾股定理:勾3 股4 弦5
三角函式之間的恆等式:
勾股定理:(畢達哥拉斯定理)
倍角公式:
正弦定理和餘弦定理: