Nessuna mesh, nessun triangolo, nessun dato geometrico salvato. Un solido e una funzione
f(x,y,z): il segno decide pieno o vuoto, lo zero e la superficie, il gradiente e la normale.
Il raggio non cerca: la funzione dichiara dove viene colpita, in forma chiusa.
Nessun server calcola immagini. Il rendering avviene sul dispositivo di chi visita: il sito e una cartella statica.
Gli stessi endpoint di openapi.yaml rispondono su /interseca, /render, /scena. Nessuna scheda da tenere aperta: il server calcola. Stessa precisione di JS (IEEE 754 double).
Sfera, piano e cubo rispondono con t in forma chiusa. Nessun passo a tentoni, nessuna approssimazione di ricerca.
La pagina Verifica manda la stessa domanda a PHP e a JS e confronta i numeri esattamente. Se divergono, lo dice. E il controllo di UNISEFE CORE applicato al porting.
La pagina Prestazioni misura raggi/secondo e ms/frame sul tuo dispositivo, in tempo reale.
POST /scena salva la scena e restituisce un id che e l'hash del contenuto. Stesso contenuto, stesso id. GET /scena/{id} restituisce il documento intero e verifica l'hash.
Trascina = orbita. Rotella sopra un punto = quel punto resta fermo. Shift+trascina = spostamento. Mouse fermo su un solido = sonda.
La libreria e una sola: geometry.js. Espone window.AICAD (e window.GEOMETRY come alias).
// 1. costruisci la scena
const sc = AICAD.scene([
AICAD.sphere(0, 1.6, 0, 1.6, [0.36,0.62,0.95]),
AICAD.planeY(0, [0.17,0.20,0.25])
]);
// 2. definisci la camera
const cam = AICAD.camera({ dist: 9.5, fov: 0.84 });
// 3. chiedi al solido dove lo colpisci
const r = cam.ray(0, 0, 1.6);
const hit = sc.trace(r.o, r.d);
// hit = { t, p, obj, normal }
// La superficie e il livello zero:
// f(punto) = 0 -> sei sulla superficie
// f(punto) < 0 -> pieno
// f(punto) > 0 -> vuoto
// La normale non si stima: si calcola.
// Per la sfera e il raggio dal centro.
// Perfino il colore, in futuro, sara
// una funzione g(punto, normale).
Le stesse operazioni, come richieste HTTP. Sempre disponibili, senza aprire nessuna pagina.
# il raggio non cerca: la funzione dichiara
curl -s -X POST \
https://aicadapi.unisefe.it/api.php?r=interseca \
-H 'Content-Type: application/json' \
-d '{"solido":{"tipo":"sfera",
"centro":[0,1.6,0],"raggio":1.6},
"origine":[0,1.6,8],
"direzione":[0,0,-1]}'
# -> {"colpito":true,"t":6.4, ...}
# la scena e un documento: id = hash del contenuto
curl -s -X POST \
https://aicadapi.unisefe.it/api.php?r=scena \
-H 'Content-Type: application/json' \
-d '{"scena":[{"tipo":"sfera",
"centro":[0,1.6,0],"raggio":1.6}]}'
# -> {"ok":true,"id":"a1b2c3...","url":"/scena/a1b2c3..."}