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):
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úcsfor (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ögfor (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ó.