Curve razionali di Bézier nello spazio E3

(a Java implementation by Luca Castelli Aleardi)

L' applet presente in questa pagina permette di disegnare le curve razionali di Bézier 3-dim.

Per quanto riguarda la costruzione della curva, non ci sono sostanziali differenze dal caso piano: si ricordi solo che bisogna considerare una curva non razionale in uno spazio 4-dim e poi proiettarla sull'iperpiano w = 1 (che viene ad essere identificato con lo spazio E3).

Maggiore attenzione si dovrà prestare alla rappresentazione piana (sullo schermo) di entità geometriche che vivono nello spazio: si è preferito non utilizzare le tre classiche proiezioni ortogonali sui tre piani xy,yz,xz. Si è invece implementata una sola finestra in cui poter creare e modificare punti 3-dim a partire da 2 coordinate(quelle fornite dalla posizione del mouse sulla finestra).

Benché le funzioni offerte dall'applet siano simili a quelle del caso piano, si consiglia all'utente di prendere visione di alcune brevi spiegazioni (vedere più in basso) prima di cominciare a tracciare punti e disegnare la curva.

 

 


Alcune brevi spiegazioni:

Per la visualizzazione piana di oggetti 3D si è scelto di implementare un particolare tipo di

proiezione prospettica, aventi le seguenti caratteristiche:

Come funziona l'Applet?

Anche nel caso spaziale, per determinare una curva razionale di Bezier occorre assegnare i vertici del poligono di controllo e i valori dei pesi. (anche qui i primi saranno rappresentati da pallini blu, i "weight points" invece da pallini magenta; il poligono di controllo da segmenti grigi).

Come disegnare sulla finestra dell'applet un punto 3-dim?

Al lettore attento non sarà certo sfuggito un problema fondamentale riguardante la rappresentazione piana di punti in E3: quando si clicca con il mouse si assegnano 2 coordinate (x,y) che determinano univocamente un punto nel piano, ma non certo nello spazio! Come sopperire a questa perdita di informazione?

Un primo modo sarebbe quello di implementare tre finestre distinte (rappresentati le tre proiezioni sui tre piani xy, xz, yz) ove si possa, separatamente, assegnare la posizione dei punti (determ. da 3 coordinate).

Un altro modo, implementato dall'applet precedente, consiste nell'imporre un vincolo ai punti.(nel nostro caso si è scelto di vincolare i punti ad un piano).

Nel nostro caso si è semplicemente imposto che i punti, appena creati, appartenessero al piano z = 0. (ciò tra l'altro ha posto non pochi problemi riguardanti la ricostruzione di oggetti 3-dim a partire dalle loro proiezioni 2-dim).

Limitazione sul posizionamento dei punti: poiché la ricostruzione di un punto 3-dim richiede, a livello di calcolo, l'inversione di matrici 4x4 e 3x3; quindi per evitare che queste siano singolari si è dovuto impedire all'utente di agire sui punti del poligono di controllo in alcune posizione. Queste occorrono quando l'occhio dell'utente (centro della proiezione) è "troppo vicino" al piano z=0. (le posizione vietate corrispondono solo a qualche grado della latitudine "f")

Per quanto riguarda i pesi, si ripete quanto già detto nel caso piano: lo spostamento dei weight points è vincolato al segmento congiungente due vertici consecutivi ed è soggetto ad alcune limitazioni per poter preservare le proprietà delle curve razionali di Bézier (i pesi wi devono essere sempre positivi affinché non si abbiano singolarità).

Lo spostamento di un weight point causa la variazione anche di quello ad esso successivo: i weight point dipendono infatti da 2 vertici del poligono e relativi pesi (il cambiamento dei pesi determina una variazione "locale" della curva).

Proprietà della visualizzazione

Si può facilmente cambiare la visuale agendo sui tasti "fi", "-fi", "+teta","-teta": così facendo si varierà di un angolo a piacere (indicato nella finestra e posto per default uguale a 5 gradi) le coordinate sferiche del centro E di proiezione (che rappresenta l'osservatore).

P.S.

Si è aggiunta un'ulteriore funzione che risulterà molto utile all'utente: per poter modificare la visuale senza dover agire sui pulsanti sopra menzionati, si può selezionare l'opzione "ruota". Basterà quindi un click del mouse per veder ruotare la curva semplicemente trascinando il mouse!