3D數學--矩陣知識
開此貼是貼出自己在學如題所示知識點時所做的筆記,旨在跟我一樣菜的小朋友們共同學習探討一下這方面的知識,當然,絕對絕對歡迎大牛們來指點指教一下!!!
這是筆記附件:
下面也貼出筆記的內容,圖片和格式之類的我就不意義複製貼上過來了,太麻煩了,等下次把這塊知識都弄完了後再把格式改一下!
任務
瞭解矩陣相關的基礎知識
掌握矩陣在3D中的具體應用
清楚矩陣和逆矩陣各自的應用
在osg中是如何進行矩陣運算的
1. http://www.360doc.com/content/11/0906/15/7317486_146206322.shtml
2. 概念:方陣的行列式
>行列式與矩陣變換導致的尺寸改變相關,其中行列式的絕對值與面積(2D)、體積(3D)的改變相關,行列式的符號說明了變換矩陣是否包含映象或投影。
>矩陣的行列式還能對矩陣所代表的變換進行分類。如果矩陣的行列式為0,那麼該矩陣包含投影。如果矩陣的行列式為負,那麼該矩陣包含映象。
有關矩陣的行列式的概念:
>方陣M的行列式記作|M|或“det M”,非方陣矩陣的行列式是未定義的。
非方陣矩陣即行列長度不等的矩陣。
計算矩陣行列式的方法:
>將主對角線和反對角線上的元素各自相乘,然後用主對角線元素的積減去反對角線元素的積。
例:2X2階矩陣行列式的定義:
2X2階矩陣行列式計算示意圖:
3X3階矩陣行列式的定義:
3X3階矩陣行列式計算示意圖:
行列式的一些重要性之如下:
3. 概念:逆矩陣
矩陣求逆運算只能用於方陣。
並非所有的矩陣都有逆。
>方陣M的逆,記作M-1,也是一個矩陣。當M與M-1相乘時,結果是單位矩陣。
>奇異矩陣的行列式為0,非奇異矩陣的行列式不為0,所以檢測行列式的值是判斷 矩陣是否可逆的有效方法。
>對於任意可逆矩陣M,當且僅當v=0時,vM=0。
逆矩陣的重要性質如下:
>矩陣的逆在幾何上非常有用,因為它使得我們可以計算變換的”反向“或”相反“變換 ---- 能”撤銷“原變換的變換。所以,如果向量v用矩陣M來進行變換,接著用M的逆M-1進行變換,將會得到原向量。這很容易通過代數方法驗證:
逆矩陣可撤銷之前所做的變換。
4. 概念:餘子式、代數餘子式、標準伴隨矩陣
>餘子式是一個矩陣,而代數餘子式是一個標量。
>假設矩陣M有r行c列,記法M{ij}表示從M中除去第i行和第j列後剩下的矩陣。顯然,該矩陣有r-1行,c-1列,矩陣M{ij}稱作M的餘子式。
>對方陣M,給定行、列元素的代數餘子式等於相應餘子式的有符號行列式。
>從矩陣中任意選擇一行或一列,對該行或列中的每個元素,都乘以對應的代數餘子式。這些乘積的和就是矩陣的行列式。例如,任意選擇一行,如行i,行列式的計算過程如公式9.4所示:
例,重寫3X3矩陣的行列式:
>M的”標準伴隨矩陣“記作”adjM“,定義為M的代數餘子式矩陣的轉置矩陣。
例3X3階矩陣:
計算M的代數餘子式矩陣:
M的標準伴隨矩陣是M的待述餘子式矩陣的轉置:
>一旦有了標準伴隨矩陣,通過除以M的行列式,就能計算矩陣的逆。
>其表示如公式9.7所示:
5. 概念:正交矩陣
>正交矩陣對我們非常有用,因為很容易計算它的逆矩陣。
>很多情況下,我們可以提前知道矩陣是如何建立的,甚至瞭解矩陣是僅包含旋轉、映象呢,還是二者皆有(記住:旋轉和映象矩陣是正交的)。
>根據定義,當且僅當 M MT = I 時M是正交的。
>(1)當且僅當一個向量是單位向量時,它與自身的點積結果是1。
>(2)當且僅當兩個向量是互相垂直時,它們的點積為0。
>所以,若一個矩陣是正交的,它必須滿足下列條件:矩陣的每一行都是單位向量,矩陣的所有行互相垂直。
>如果M是正交的,則MT也是正交的。
當矩陣M為正交矩陣時,則該矩陣的逆矩陣為M的轉置矩陣。
矩陣正交化:
>構造一組正交基向量(矩陣的行)的標準演算法是施密特正交化。它的基本思想是,對每一行,從中減去它平行於已處理過的行的部分,最後得到垂直向量。
例,以3x3矩陣為例,和以前一樣,用r1、r2、r3代表3x3階矩陣M的行。正交向量組r1'、r2'、r3'的計算如公式9.9所示:
>現在r1'、r2'、r3'互相垂直了,它們是一組正交基。當然,它們不一定是單位向量。構造正交矩陣需要使用標準正交基,所以必須標準化這些向量。注意,如果一開始就進行標準化,而不是在第2步中做,就能避免所有除法了。
6. 概念:4D齊次空間
4D座標的基本思想:
>實際的3D點被認為是在4D中w=1"平面"上。4D點的形式為(x, y, z, w),將4D點投影到這個"平面"上得到相應的實際3D點(x/w, y/w, z/w)。w=0時4D點表示"無限遠點",它描述了一個方向而不是一個位置。
>在4D中,仍然可以用矩陣乘法來表達平移,如公式9.10所示,而在3D中是不可能的:
>記住,即使是在4D中,矩陣乘法仍然是線性變換。矩陣乘法不能表達4D中的"平移",4D零向量也將總是被變換成零向量。這個技巧之所以能在3D中 平移點是因為我們實際上是在切變4D空間。與實際3D空間相對應的4D中的"平面"並沒有穿過4D中的原點。因此,我們能通過切變4D空間來實現3D中的 平移。
#Q: 何為線性變換?
#Q: 位置矩陣P和轉換矩陣T的區別在哪?
#A: 對模型位置做變換,一定是P後乘T。
位置矩陣P:
轉換矩陣T:
轉換矩陣的最後一列一定為
平移轉換矩陣的模板為:
故對於轉換矩陣T,上邊3X3部分是旋轉/縮放部分,最下一行是平移部分。逆向利用這些資訊,能將任意4X4矩陣分解為線性變換部分和平移部分。將平移向量 記做t,將上邊3X3部分記做RS,則T可簡寫為:
>當一個形如[x, y, z, 0]的無窮遠點乘以一個包含旋轉、縮放等的變換矩陣,將會發生預期的變換。結果仍是一個無窮遠點,形式為[x, y, z, 0]。
一個無窮遠的點經過包含平移的變換後得到:
其結果和沒有平移的變換結果是一樣的!
>換句話說,4D向量中的w分量能夠"開關" 4x4 矩陣的平移部分。這個現象是非常有用的,因為有些向量代表“位置”,應當平移,而有些向量代表“方向”,如表面的法向量,不應該平移。從幾何意義上說,能將第一類資料當作"點",第二類資料當作"向量"。
>使用4x4矩陣的一個原因是4x4變換矩陣能包含平移。當我們僅為這個目的使用4x4矩陣時,矩陣的最後一列總是[0, 0, 0, 1]T。
7. 概念:一般仿射矩陣
通過4X4矩陣我們可以構造包含平移在內的一般仿射矩陣。例如:
8. 概念:透視投影
>正交投影也稱作平行投影,因為投影線都是平行的(投影線是指從原空間中的點到投影點的連線)。
>3D中的透視投影仍然是投影到2D平面上,但是投影線不再平行,實際上,它們相交於一點,該點稱作投影中心。
如圖所示:
>因為投影中心在投影平面前面,投影線到達平面之前已經相交,所以投影平面上的影象是翻轉的。當物體遠離投影中心時,正交投影仍保持不變,但透視投影變小了。
9. 概念已經理得差不多了,現在來做osg中的矩陣變換
大概有以下幾個概念需要理一下:
1) 矩陣與逆矩陣之間的互換
2) 矩陣與逆矩陣在三維中的應用
3) 有關旋轉\平移\縮放矩陣
4) 投影矩陣
10. 首先看osg::Matrix類
1) 平移相關方法
-
// 獲得平移的向量
-
inline Vec3d getTrans() const;
-
// 將矩陣置為一個平移矩陣
-
void makeTranslate( const Vec3d& v );
-
// 生成一個平移矩陣,靜態函式
-
inline static osg::Matrix translate( const Vec3d& v );
-
// 前乘/後乘平移矩陣
-
inline void preMultTranslate( const Vec3d& v );
-
inline void postMultTranslate( const Vec3d& v );
-
// 設定現有矩陣中的平移向量,即[3][0],[3][1],[3][2]
-
void setTrans( const Vec3d& v );
-
// 從現有矩陣中分離出平移向量,旋轉向量及縮放向量
-
void decompose( osg::Vec3f& translation,
-
osg::Quat& rotation,
-
osg::Vec3f& scale,
-
osg::Quat& so ) const;
-
// 採用平截體設定來建立一個透視投影矩陣
-
inline static Matrixd frustum(double left, double right,
-
double bottom, double top,
-
double zNear, double zFar);
-
// 獲取透視投影矩陣的平截體設定
-
bool getFrustum(double& left, double& right,
-
double& bottom, double& top,
-
double& zNear, double& zFar) const;
-
// 獲取透視投影矩陣的相關引數
-
bool getPerspective(double& fovy, double& aspectRatio,
-
double& zNear, double& zFar) const;
-
// 將矩陣置為透視投影矩陣
-
void makePerspective(double fovy, double aspectRatio,
-
double zNear, double zFar);
-
// 生成透視投影矩陣,為靜態方法
-
inline static Matrixd perspective(double fovy, double aspectRatio, double zNear, double zFar);
-
// 獲得正交投影的相關引數
-
bool getOrtho(double& left, double& right,
-
double& bottom, double& top,
-
double& zNear, double& zFar) const;
-
// 將矩陣置為正交投影矩陣
-
void makeOrtho(double left, double right,
-
double bottom, double top,
-
double zNear, double zFar);
-
/** Set to a 2D orthographic projection.
-
* See glOrtho2D for further details.
-
*/
-
inline void makeOrtho2D(double left, double right,
-
double bottom, double top)
-
// 生成一個正交投影矩陣
-
inline static Matrixd ortho(double left, double right,
-
double bottom, double top,
-
double zNear, double zFar);
-
// 獲取模型觀察矩陣的位置和方位
-
void getLookAt(Vec3f& eye,Vec3f& center,Vec3f& up,
-
value_type lookDistance=1.0f) const;
-
// 生成一個模型觀察矩陣,用作設定相機
-
// #Q: 模型觀察矩陣如何用在相機上?相機有什麼方法來接受模型試圖矩陣?
-
#A: osg::Camera類提供了設定觀察矩陣的方法,setViewMatrix
-
inline static Matrixd lookAt(const Vec3d& eye,
-
const Vec3d& center,
-
const Vec3d& up);
-
// 將矩陣置為模型觀察矩陣
-
void makeLookAt(const Vec3d& eye,const Vec3d& center,const Vec3d& up);
-
// 生成一個單位矩陣
-
inline static Matrixd identity( void );
-
// 求逆矩陣
-
inline static Matrixd inverse( const Matrixd& matrix);
-
// 將矩陣置為引數矩陣的逆矩陣
-
inline bool invert( const Matrixd& rhs);
-
// 判斷是否是單位矩陣
-
bool isIdentity() const;
-
// 將矩陣置為單位矩陣
-
void makeIdentity();
-
// 矩陣乘法
-
void mult( const Matrixd&, const Matrixd& );
-
void preMult( const Matrixd& );
-
void postMult( const Matrixd& );
-
// operator function
-
……
#A: 正交投影、透視投影、模型觀察均可用矩陣來表示;
8) #Q: 矩陣都用在了什麼地方?
看osg::Camera類
11. 看osg::Camera類
1) 跟矩陣相關的方法
-
// 將本地矩陣轉換為世界矩陣,此方法可過載
-
virtual bool computeLocalToWorldMatrix(Matrix& matrix,NodeVisitor*) const;
-
// 將世界矩陣轉換為本地矩陣,此方法可過載
-
virtual bool computeWorldToLocalMatrix(Matrix& matrix,NodeVisitor*) const;
-
// 取得投影矩陣,可對其進行修改
-
osg::Matrixd& getProjectionMatrix();
-
// 取得投影矩陣
-
const osg::Matrixd& getProjectionMatrix() const;
-
// 取得投影矩陣的正交投影引數
-
bool getProjectionMatrixAsOrtho(double& left, double& right, double& bottom, double& top, double& zNear, double& zFar) const;
-
// 取得投影矩陣的平面截體引數
-
bool getProjectionMatrixAsFrustum(double& left, double& right, double& bottom, double& top, double& zNear, double& zFar) const;
-
// 取得投影矩陣的透視投影引數
-
bool getProjectionMatrixAsPerspective(double& fovy,double& aspectRatio, double& zNear, double& zFar) const;
-
// 設定投影矩陣
-
inline void setProjectionMatrix(const osg::Matrixd& matrix);
-
// 以平面截體引數設定投影矩陣
-
void setProjectionMatrixAsFrustum(double left, double right, double bottom, double top, double zNear, double zFar);
-
// 以透視投影引數設定投影矩陣
-
void setProjectionMatrixAsPerspective(double fovy,double aspectRatio, double zNear, double zFar);
-
// 取得模型觀察矩陣,可對模型觀察矩陣進行修改
-
osg::Matrixd& getViewMatrix();
-
// 取得模型觀察矩陣
-
const osg::Matrixd& getViewMatrix() const;
-
// 獲取模型觀察矩陣的逆矩陣
-
Matrixd getInverseViewMatrix() const;
-
// 以eye,center,up方式設定模型觀察矩陣
-
void setViewMatrixAsLookAt(const osg::Vec3d& eye,const osg::Vec3d& center,const osg::Vec3d& up);
-
// 以eye,center,up方式取得模型觀察引數
-
void getViewMatrixAsLookAt(osg::Vec3d& eye,osg::Vec3d& center,osg::Vec3d& up,double lookDistance=1.0) const;
-
// 設定模型觀察矩陣
-
inline void setViewMatrix(const osg::Matrixd& matrix);
#Q: 那在相機中這兩個引數的作用是什麼呢?
#A: 在osg::Camera類中這兩個引數的定義如下:
-
osg::Matrixd _projectionMatrix;
-
osg::Matrixd _viewMatrix;
相機預設帶有投影矩陣和模型觀察矩陣這兩個引數。
#Q: 那麼由誰來操作這個相機呢?
看一下相機操作器類osgGA::CameraManipulator
12. 看osgGA::CameraManipulator類
1) 跟操作相機相關的方法有:
-
/** update the camera for the current frame, typically called by the viewer classes.
-
Default implementation simply set the camera view matrix. */
-
virtual void updateCamera(osg::Camera& camera) { camera.setViewMatrix(getInverseMatrix()); }
可見相機操作器類是通過模型觀察矩陣來操作相機的。
接下來看一下此類中有哪些方法跟模型觀察矩陣有關。。。
2) 跟模型觀察矩陣有關的方法並沒有直接見到,從#1)中看到方法updateCamera中有呼叫getInverseMatrix方法,但是在osgGA::CameraManipulator中getInverseMatrix和getMatrix方法均為純虛擬方法:
-
/** get the position of the manipulator as 4x4 Matrix.*/
-
virtual osg::Matrixd getMatrix() const = 0;
-
/** get the position of the manipulator as a inverse matrix of the manipulator, typically used as a model view matrix.*/
-
virtual osg::Matrixd getInverseMatrix() const = 0;
#Q: 為什麼純虛擬方法可以被呼叫?如updateCamera方法所示。
猜測:在osgGA::CameraManipulator中跟模型觀察矩陣相關的引數有:
-
osg::Vec3d _homeEye;
-
osg::Vec3d _homeCenter;
-
osg::Vec3d _homeUp;
三個引數預設賦值為:
-
_homeEye.set(0.0,-1.0,0.0);
-
_homeCenter.set(0.0,0.0,0.0);
-
_homeUp.set(0.0,0.0,1.0);
-
/** Compute the home position.
-
這個計算會考慮相機的視區的大小和模型的尺寸,把相機挪到足夠遠的位置來使得模型在整個螢幕的區域;如果引數camer為空,則相機到場景區的距離就無法計算,此時將基於模型的尺寸採用一個預設的值
-
#Q: 但是計算好的值並沒有去改變相機的一些屬性,而是改變的_homeEye, _homeCenter, _homeUp,那麼它是如何做到使相機的位置移動到足夠遠呢?
-
#A: 具體的如何去影響估計還是要靠setByMatrix,setByInverseMatrix和getMatrix,getByInverseMatrix方法,因為最終還是要歸到updateCamera方法上對camera的設定。
-
*/
-
virtual void computeHomePosition(const osg::Camera *camera = NULL, bool useBoundingBox = false);
-
/** Get the manually set home position. */
-
virtual void getHomePosition(osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up) const
-
{
-
eye = _homeEye;
-
center = _homeCenter;
-
up = _homeUp;
-
}
-
/**
-
Move the camera to the default position.
-
May be ignored by manipulators if home functionality is not appropriate.
-
*/
-
virtual void home(const GUIEventAdapter& ,GUIActionAdapter&) {}
-
/**
-
Move the camera to the default position.
-
This version does not require GUIEventAdapter and GUIActionAdapter so may be
-
called from somewhere other than a handle() method in GUIEventHandler. Application
-
must be aware of implications.
-
*/
-
virtual void home(double /*currentTime*/) {}
-
/** Manually set the home position, and set the automatic compute of home position. */
-
virtual void setHomePosition(const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up, bool autoComputeHomePosition=false)
-
{
-
setAutoComputeHomePosition(autoComputeHomePosition);
-
_homeEye = eye;
-
_homeCenter = center;
-
}
#A: 這個也是用來輔助getInverseMatrix方法用的,具體怎麼用,還是要靠自己來定義。
#TODO(continue): 可自定義一個漫遊器來測試一下。
路徑漫遊下的相機控制:
http://www.52vr.com/bbs/forum.php?mod=viewthread&tid=23815
osg操縱器解析:
>重寫getMartix(),和getInverseMatrix()方法
http://lzchenheng.blog.163.com/b ... 353620106710534514/
>要編寫一個好的操縱器,必須首先過載setNode()和home()方法,根據根節點的包圍球,確定視點的初始位置,然後,根據視點的初始位置和使用者的操作(移動、旋轉等操作),過載getInverseMatrix()和getMatrix()方法,構建觀察矩陣或物體的位置姿態矩陣,這兩個矩陣互為逆矩陣。
相關推薦
3D數學--矩陣知識
本帖最後由 hunter_wwq 於 2013-7-24 14:04 編輯 開此貼是貼出自己在學如題所示知識點時所做的筆記,旨在跟我一樣菜的小朋友們共同學習探討一下這方面的知識,當然,絕對絕對歡迎大牛們來指點指教一下!!! 這是筆記附件: 下面也貼出筆記的內容,圖片和格式之類的我就不意義複製貼上過來了,太
[3D數學]矩陣 2017.8.16
旋轉矩陣 我們 進行 位移 組合 向量 bsp 一個 物體 <1>有時候我們想對整個物體做一定量旋轉,其實可以直接對物體坐標系進行相反量的旋轉 比如:現在想對一個物體順時針旋轉20度,再擴大200%,,既可以對這個物體的坐標系先縮小200%,再逆時
3D數學 矩陣和線性變換之切變
矩陣和線性變換之切變 1. 什麼是切變? 我們來看一幅圖片。下面的圖片,隨著y增大,x的偏移會越來越大。這種型別的變換就叫切換。我們可以得到下圖的公式x’ = x + sy。該公式轉換成矩陣就得到了切變矩陣。 2. 切變效果的矩陣是
3D數學 ---- 矩陣和線性變換(1)
包含平移的線性變換稱作仿射變換,3D中的仿射變換不能用 3 x 3 矩陣表達,必須使用4 x 4矩陣。 一般來說,變換物體相當於以相反的量變換描述這個物體的座標系。當有多個變換時,則需要以相反的順序變換相反的量。例如,將物體順時針旋轉20度,擴大200%,等價於將座標系縮小2
3D數學 矩陣乘法程式設計
矩陣乘法程式設計 設計一個3x3矩陣類,實現如下功能: 3x3矩陣 矩陣與矩陣的乘法 向量與矩陣的乘法 具體的數學知識就不詳述了,直接貼程式碼。這裡利用到上一篇3D數學向量運算的程式碼。 /
3D數學 ---- 矩陣和線性變換
一般來說,方陣能描述任意線性變換。線性變換保留了直線和平行線,但原點沒有移動。線性變換保留直線的同時,其他的幾何性質如長度、角度、面積和體 積可能被變換改變了。從非技術意義上說,線性變換可能“拉伸”座標系,但不會“彎曲”或“卷折”座標系。 矩陣是怎樣變換向量的 向量在幾何上能被解釋成一系列與軸平行的位
3D數學--矩陣彙總
在unity中矩陣的定義和使用 在Unity中我們都是使用4*4的矩陣 ,通過 Matrix4x4.SetRow 和Matrix4x4.SetCoiumn來設定4*4矩陣的某行和某列,通過 Matrix4x4.GetRow 和Matrix4x4.GetCoiu
Unity3d修煉之路:遊戲開發中,3d數學知識的練習【1】(不斷更新.......)
turn tor rdo pre 長度 scrip 縮放 unity3d float #pragma strict public var m_pA : Vector3 = new Vector3(2.0f, 4.0f, 0.0f); public var m_pB :
HDU多校賽第9場 HDU 4965Fast Matrix Calculation【矩陣運算+數學小知識】
stdin amp line you stream [] nbsp content ans 難度上。,,確實。。。不算難 問題是有個矩陣運算的優化 題目是說給個N*K的矩陣A給個K*N的矩陣B(1<=N<=1000 && 1=<K<
矩陣的數學基礎知識
一 行列式 方陣 矩陣的基本概念 略 二 矩陣的轉置、逆、秩 矩陣的轉置就是將矩陣中的元素進行行列對換 矩陣的逆 設A是數域上的一個n階矩陣,若在相同數域上存在另一個n階矩陣B,使得: AB=BA=E ,則我們稱B是A的逆矩陣,而A則被稱為可逆矩陣。注:E為單位
3d數學基礎-映象矩陣和切變矩陣-用C++程式碼實現
#include <iostream.h> #include <math.h> #include <assert.h> const float kPi = 3.1415926f; const float k2Pi = kPi*2.0f;
3D數學基礎:矩陣的幾何解釋
一般來說,方陣能夠描述任意的線性變換。線性變換的定義在文章中已經提到。線性變換具體來說包括:旋轉、縮放、投影、映象、仿射。本文以旋轉為例講述矩陣的幾何意義。 一、基礎解釋 向量是基向量的線性組合,矩陣是基向量的集合。 世界座標系中的某一個向量使
3d數學基礎-旋轉矩陣-C++程式碼實現
#include <iostream.h> #include <math.h> #include <assert.h> const float kPi = 3.1415926f; const float k2Pi = kPi*2.0f;
3D數學之矩陣的各種求逆
經過三天的準備終於把矩陣的各種求逆方法以及程式碼完成了。心裡有點小激動,come on,來吧,點燃你的心中的那團火,跟著遊戲音樂的律動一起跟我走入神祕的3D世界。 下面介紹三種方法: 1.用伴隨矩陣求逆 2.用高斯-約當消元法求逆 3.用LU分解求逆(聽別人說效率最高)
數學基礎知識復習
否則 sign 依次 log 定義 p s href 結合 itl 指數運算 XAXB = XA+B XA/XB = XA-B (XA)B = XAB 對數運算 定義: XA = B當且僅當logxB = A 定理: logAB = logCB/lo
3D數學基礎(四)四元數和歐拉角
transform 推薦 中間 應該 它的 轉變 編輯器 最簡 組件 一、四元數 四元數本質上是個高階復數,可視為復數的擴展,表達式為y=a+bi+cj+dk。在說矩陣旋轉的時候提到了它,當然四元數在Unity裏面主要作用也在於此。在Unity編輯器中的Transfor
例說數學基礎知識和綜合應用的關系
wid 是什麽 數學 總結 image img 技能 purple sum fieldset { border:0; border: 1px dashed #ddd; margin-top:20px; margin-bottom:20
3D數學基礎:圖形與遊戲開發_讀書筆記04
第六章3D介面類 這本書的第六章主要寫了一個工具類,用作之前所描述的概念中向量的計算還有一些運算子的過載,是用C++寫的。 因經驗等原因.我對程式碼設計方面還不是很瞭解,也沒有系統學習過C++,,總之先貼出本書章節中的C++程式碼。 #include<math.h>
3D數學基礎:圖形與遊戲開發_讀書筆記02
第四章概念(這一章也仍然是概念居多,應該要下一章才開始是計算的玩意) 標量 標量是數字的技術稱謂,使用這個詞是想突出數值 向量 向量(或稱向量)是明確帶有大小和方向的數學物件,在程式裡通常表現為陣列。 水平書寫的被稱為行向量,垂直書寫的被稱為列向量 行向量 [1,2,3] 列
3D數學基礎:圖形與遊戲開發_讀書筆記01
前三章內容摘要 通常技術書籍第一章都是為了介紹技術背景,數學書為了循序漸進也是很基礎的東西。就把重要的知識點抓出來 1)研究自然數和整數的領域稱作離散數學,研究實數領域叫做連續數學。 2)3D座標是由2D笛卡爾座標系衍生出來的,xz表示地面,y表示高度,而且上存在著3D兩種座標系(圖