Three.js · Tananyag
Nyeregfelület
Hiperbolikus paraboloid: z = a(x² − y²)
A hiperbolikus paraboloid (közismert nevén nyeregfelület) egy másodfokú felület, amelynek minden pontja egy nyereg alakú görbületet mutat: az egyik irányban domború, a másikban homorú. Az origó egy nyeregpont — sem minimum, sem maximum.
Jellemző tulajdonság: minden X = const és Y = const metszet parabolát ad, amelyek ellentétes irányban nyílnak.
z = a · (x² − y²)
ahol:
x ∈ [−L, +L] u paraméter: x = u
y ∈ [−L, +L] v paraméter: y = v
Tehát:
P(u, v) = ( u, v, a·(u² − v²) )
Paraméterek (csúszkával állítható):
a — amplitúdó (görbület mértéke)
L — tartomány ([-L, L] × [-L, L])
N — felbontás (N×N rács)
Speciális metszetek:
x = 0 → z = −a·y² (lefelé nyíló parabola)
y = 0 → z = +a·x² (felfelé nyíló parabola)
z = 0 → x² = y² (két egyenes: x = ±y)
Az N×N rácson (N+1)² csúcspont, 2N² háromszög. Indexelés: vertex(j,i) = j·(N+1) + i
u(i) = −L + i · 2L/N, i = 0…N
v(j) = −L + j · 2L/N, j = 0…N
P(j,i) = ( u(i), v(j), a·(u(i)² − v(j)²) )
Quad → 2 háromszög (ugyanaz mint a gömbhöz):
a = j·(N+1)+i, b = a+1
c = (j+1)·(N+1)+i, d = c+1
[0]: a→b→c [1]: b→d→c
// (N+1)² csúcs
for (let j = 0; j <= N; j++) {
const v = -L + j * 2*L/N;
for (let i = 0; i <= N; i++) {
const u = -L + i * 2*L/N;
pos.push(u, v, a*(u*u - v*v));
}
}
// 2N² háromszög
for (let j = 0; j < N; 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);
}
}
Mély piros — előlap
#8B0000
FRONT
A felület rácsozata az N×N négyszögcellák éleinek LineSegments-ként kirajzolva — minden cellából vízszintes + függőleges él (az átló nélkül, hogy tiszta rács legyen). Külön ki/be kapcsolható az alap GridHelper-től.
Fájl
Egyetlen önálló HTML fájl, offline is megnyitható.
⬇ Letöltés: saddlesurface3d.html