首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

3D 數學基礎知識系統整理:座標系、向量、矩陣、變換與投影

     編輯:J2ME

前言

應論壇網友需求,整理 3D 圖形程式設計核心數學理論。內容偏理論,後續將補實例講解。歡迎指正補充。

三維座標系

將二維平面座標擴展至三維空間。點 (x,y,z) 齊次座標為 (nx,ny,nz,n) (n≠0),標準化為 (x,y,z,1)。三維變換使用 4x4 矩陣。

常見座標系

  • 右手座標系:符合數學慣例
  • 左手座標系:符合電腦圖形學/日常習慣
  • 兩者可任意旋轉,圖形幾何不變

四大空間

座標系定義
螢幕座標系相對顯示器原點的 2D 座標
本地座標系相對物件原點的 3D 座標
世界座標系相對 3D 世界原點的座標
觀察/視點座標系世界座標系變換,觀察者位於原點

點與向量

  • 點:特定座標系中指定位置,距原點距離隨座標系改變
  • 向量:兩點差值,具大小與方向,不隨座標系改變
    V = P2 - P1 = (x2-x1, y2-y1, z2-z1)

向量運算

  • 加法:V1+V2 = (V1x+V2x, V1y+V2y, V1z+V2z)
  • 純量乘:aV = (aVx, aVy, aVz)
  • 內積 (Dot):V1·V2 = V1x*V2x + V1y*V2y + V1z*V2z
  • 外積/叉積 (Cross):
    V1×V2 = (V1y*V2z - V1z*V2y,
              V1z*V2x - V1x*V2z,
              V1x*V2y - V1y*V2x)
    = |Ux  Uy  Uz|
      |V1x V1y V1z|
      |V2x V2y V2z|

註:Ux,Uy,Uz 為 x,y,z 軸單位向量。程式設計中常用叉積計算法向量。

矩陣

矩陣為數值矩形陣列。方陣:行列數相同。行向量 [x y z],列向量 [x;y;z]。

矩陣運算

  • 加法:對應元素相加
  • 純量乘:每元素乘純量
  • 矩陣乘法:(AB)ij = Σ Aik * Bkj(不交換)

矩陣變換 (4x4 齊次座標)

平移

[x' y' z' 1] = [x y z 1] × |1 0 0 0|
                            |0 1 0 0|
                            |0 0 1 0|
                            |tx ty tz 1|

縮放

[x' y' z' 1] = [x y z 1] × |sx 0  0  0|
                            |0  sy 0  0|
                            |0  0  sz 0|
                            |0  0  0  1|

繞 X 軸旋轉 (α)

|1   0     0    0|
|0 cosα sinα  0|
|0 -sinα cosα 0|
|0   0     0   1|

繞 Y 軸旋轉

|cosα  0 -sinα 0|
|0     1   0    0|
|sinα  0 cosα  0|
|0     0   0    1|

繞 Z 軸旋轉

|cosα sinα 0 0|
|-sinα cosα 0 0|
|0     0    1 0|
|0     0    0 1|

反射 (鏡像/對稱變換)

  • 相對反射軸:繞軸旋轉 180°
  • 相對反射平面:
平面矩陣
XY 平面diag(1, 1, 1, 1) — z 不變 (原文可能筆誤,標準為 diag(1,1,-1,1))
YZ 平面diag(-1, 1, 1, 1)
ZX 平面diag(1, -1, 1, 1)

錯切

改變物體形狀。相對 X 軸:

|1   0   0 0|
|shY 1   0 0|
|shZ 0   1 0|
|0   0   0 1|

Y、Z 軸同理,對角線為 1,對應位置放剪切因子。

三維轉換三大類

  1. 世界座標轉換:改變物體位置、大小、角度
  2. 觀察座標轉換:決定觀察者位置與方向
  3. 透視轉換:決定 3D 場景如何投影到 2D 平面 (視野範圍等)

投影變換

將 n 維點轉換為

  • 投影中心 (Center of Projection)
  • 投影平面 (Projection Plane) — 不經過中心
  • 投影線:從中心向物體各點發射,與平面交點集合即為投影

透視投影

中心到平面距離有限,投影線發散。平行線若不平行投影平面,會匯聚於滅點。主滅點數 = 與投影平面相交座標軸數 (1~3),分為一點/二點/三點透視。二點透視真實感強,廣用於建築、工程、廣告。

平行投影

中心在無窮遠,投影線平行。分類:

  • 正投影:投影方向垂直平面。三視圖 (前/側/頂) 為標準正投影,保真長度角度。軸測正投影分等測/二測/三測,等測最常用。
  • 斜投影:投影方向斜交平面。矩陣含方向分量 (Xd,Yd,Zd)。

總結

以上為 3D 程式設計常用核心數學。遺漏部分請查線性代數教材。有基礎者實踐輕鬆;無基礎者建議先閱 OpenGL 入門書上手較快。格式問題請見諒。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved