Header image for Test

Test

Prompt

Scrivi uno script p5.js per una simulazione interattiva avanzata che combini dinamiche di fluidi (Flow Field) e un sistema di particelle interconnesse. Questa simulazione deve fungere da benchmark per le tue capacità logiche e di ottimizzazione.Requisiti rigorosi da rispettare:Fisica Vettoriale e Interazione Complessa: Non limitarti a tracciare la posizione del mouse. Devi calcolare la derivata della velocità (accelerazione) del mouse tra i frame. Se il mouse ha un'accelerazione bassa, il cursore deve attrarre dolcemente le particelle usando la legge di gravitazione (forza inversamente proporzionale al quadrato della distanza). Se l'accelerazione supera una certa soglia (movimento brusco), genera un "vortice" istantaneo calcolando un vettore tangente per spazzare via le particelle.Ottimizzazione Algoritmica (Cruciale): Le particelle devono tracciare linee tra di loro se si trovano entro un certo raggio. Tuttavia, è assolutamente vietato usare un doppio ciclo for non ottimizzato per calcolare la distanza tra ogni singola particella, poiché causerebbe una complessità di $O(n^2)$. Devi implementare un sistema di partizionamento spaziale (es. Spatial Hash Grid o un QuadTree base) per gestire fluidamente almeno 800 particelle a 60 fps.Rumore di Perlin in 3D: Le particelle, quando non sono influenzate dal mouse, devono seguire un campo vettoriale (Flow Field) generato dal rumore di Perlin. Usa la terza dimensione del Perlin noise (z-offset) legata a frameCount per far evolvere e muovere il campo fluidamente nel tempo.Architettura Pulita: Scrivi il codice usando rigorosamente le classi ES6 (es. class Particle, class Grid). Separa nettamente la logica di calcolo fisico (update()) da quella visiva (display()).Rendering Dinamico: Usa il colorMode(HSL). Mappa la tonalità (Hue) e la luminosità di ogni particella in tempo reale basandoti sulla sua energia cinetica (magnitudo del vettore velocità).

A system prompt was added to support web rendering

Drag to resize
Drag to resize
Drag to resize
Drag to resize