Hosszúság (N) 16
Szélesség (M) 12
Bal egér: forgat  |  Jobb: pásztáz  |  Görgő: zoom
Three.js · Tananyag

Gömb – UV-felosztás
Két paraméter: φ (phi) és θ (theta)

01Az alakzat leírása

Egy R sugarú gömb, amelynek középpontja az origóban van. Az UV-felosztás két paramétert használ:

  • θ (theta) — hosszúsági irány, 0…2π, N szektorban
  • φ (phi) — szélességi irány, 0…π, M gyűrűben

A csúcsok egy (M+1) × (N+1) rácson helyezkednek el. Az északi és déli pólus egy-egy pontban összefut.

02Parametrikus egyenlet
P(φ, θ) = ( x = R · sin(φ) · cos(θ) y = R · cos(φ) z = R · sin(φ) · sin(θ) ) ahol: φ ∈ [0, π] j-edik sor: φⱼ = j · π/M, j = 0…M θ ∈ [0, 2π] i-edik oszlop: θᵢ = i · 2π/N, i = 0…N Sarkok: φ = 0 → északi pólus: P = (0, +R, 0) φ = π → déli pólus: P = (0, −R, 0)
03Geometria felépítése

A csúcsok indexelése: idx(j, i) = j · (N+1) + i

Minden belső cellából 2 háromszög keletkezik (quad strip):

j,i j,i+1 j+1,i j+1,i+1 [0] [1] φ→ θ↑
a = j·(N+1) + i ← bal-alsó b = j·(N+1) + i+1 ← jobb-alsó c = (j+1)·(N+1) + i ← bal-felső d = (j+1)·(N+1) + i+1 ← jobb-felső [0]: a → b → c [1]: b → d → c
// (M+1)×(N+1) csúcs for (let j = 0; j <= M; j++) { const phi = j * Math.PI / M; for (let i = 0; i <= N; i++) { const theta = i * 2*Math.PI / N; pos.push( R * Math.sin(phi) * Math.cos(theta), R * Math.cos(phi), R * Math.sin(phi) * Math.sin(theta) ); } } // M×N quad → 2MN háromszög for (let j = 0; j < M; j++) { for (let i = 0; i < N; i++) { const a = j*(N+1)+i, b = a+1; const c = (j+1)*(N+1)+i, d = c+1; idx.push(a,b,c, b,d,c); } }
04Anyagok & színek
Mély piros — előlap
#8B0000
FRONT
Cián — hátlap
#00CCCC
BACK
Komplementer: Piros HSL(0°,100%,27%) ↔ Cián HSL(180°,100%,40%)
05Wireframe

A wireframe LineSegments-ként, minden cellában 3 él:

  • Vízszintes él — szélességi irány (φ mentén)
  • Függőleges él — hosszúsági irány (θ mentén)
  • Átló — a quad két háromszögre bontása

Összesen: ~3·M·N él.

Fájl

Egyetlen önálló HTML fájl, offline is megnyitható.

⬇ Letöltés: sphere3d.html