cg-Cad

Grafica 3D »Scripts »disegna una superficie torica a partire da una circonferenza di Villarceau, con Rhinoceros

Si tratta di un vero e proprio comando provvisto di icona, inserito nella sua barra degli strumenti, che genera una superficie torica a partire da una circonferenza di Villarceau anziche da una circonferenza generatrice.
Yvon Villarceau è un matematico vissuto nell'800 a cui si deve la dimostrazione secondo cui per ogni punto del toro passano 4 sezioni circolari e non le sole 2 sezioni canoniche (per intenderci meridiani e paralleli) che il normale senso comune ci fa credere.
I due piani che danno origine alle sezioni di Villarceau sono detti piani bitangenti perché sono tangenti contemporaneamente a due circonferenze generatrici (in sostanza esistono dei piani che tagliano in diagonale il toro la cui sezione è ancora una circonferenza.
Il mio contributo in questo campo è stato quello di determinare un procedimento geometrico ( e poi anche uno Script) attraverso il quale fosse possibile determinare un toro come rivoluzione di una circonferenza di Villarceau. Il problema non è affatto banale se ci si pone il problema di partire da una circonferenza qualsiasi; ovvero, in tal caso, esiste un asse di rivoluzione posto genericamente rispetto al piano della circonferenza assegnata la cui determinazine non è immediata.
Lo script permette di assegnare un angolo di rivoluzione che non sia necessariamente di 360 gradi, ma, per esempio, di 180, o 90, ecc. Il risultato sarà una sorta di conchiglia; ovvero una superficie che stenteremo a credere essere un semplice toro.
Credo che questa sia una di quelle cose che si capiscono meglio solo mettendole in pratica, per questo non mi dilungo oltre nella spiegazione.

A B C

Autore: Piero Salemi

VILLARCEAU.ZIP (contiene lo Script e le istruzioni per lanciarlo direttamente importando la barra degli strumenti in Rhinoceros)


'Genera una superficie torica a partire da una circonferenza di Villarceau
'Autore Piero Salemi

Rhino.Command "'_SetView _Top a s" 
'richiede il centro della Circonferenza di Villarceau
p1 = Rhino.GetPoint( "Centro, P1, della circonferenza di Villarceau" ) 
'La distanza P1P2 rappresenta il raggio,R, della circonferenza di Villarceau
p2 = Rhino.GetPoint( "Punto, P2, della circonferenza di Villarceau" ) 
RcircVill = Rhino.Distance(p1, p2) 'memorizza il raggio, R, della circonferenza di Villarceau
idc1 = Rhino.AddCircle(p1, RcircVill ) 'Disegna la circonferenza di Villarceau
RaggioCircVill = Rhino.AddLine( p1, p2 ) 'Questo passaggio può essere eliminato
p3 = Rhino.GetPoint( "Punto, P3,compreso tra P1 e P2;la misura P1P3 è pari al raggio della circonferenza generatrice?" ) 
RcircGen = Rhino.Distance(p1, p3) 'Memorizza la misura del raggio, r, della circonferenza generatrice
idc2 = Rhino.AddCircle(p1, RcircGen ) 'Disegna una circonferenza per il centro P1 e di raggio r
xc = ( p1( 0 ) + p2( 0 ) ) / 2
yc = ( p1( 1 ) + p2( 1 ) ) / 2
zc = ( p1( 2 ) + p2( 2 ) ) / 2
raggio = Rhino.Distance( p1, p2 ) / 2
'Circonferenza il cui diametro è pari al raggio, R, del cerchio di Villarceau
idc3 = Rhino.AddCircle(Array( xc, yc, zc ), raggio) 
b = Rhino.SelectObject(idc2)
a = Rhino.SelectObject(idc3)
Rhino.Command "_Intersect"
Rhino.Command "_CurveThroughPt _Degree=1 _Degree=1 _CurveType=_Interpolated _CurveType=_Interpolated _enter"
Rhino.Command "_Delete"
asse = Rhino.FirstObject
Rhino.Command "_Sellast"
p4 = Rhino.CurveEndPoint(asse)
Rhino.AddPoint p4
Rhino.RotateObject asse, p4, 90.0, Array( p4, p2 ) ,vbTrue 'Determina l'asse di rotazione del Toro in 3D
asse3d = Rhino.FirstObject
Rhino.Command "_SelNone"
d = Rhino.SelectObject(idc1) 'Seleziona la circonferenza di Villarceau
MsgBox"Scegli due punti dell'asse di rotazione"
Rhino.Command "'_SetView _CPlane _Right " 
'Definisce la superficie di rivoluzione (il toro) attraverso la rotazione della circonferenza di Villarceau
Rhino.Command "_revolve" 
Rhino.Command "'_SetView _Top a s" 

Grafica 3D »Scripts

Ultimo Aggiornamento_Last Update: 7 Agosto 2008