File proveniente da Wikimedia Commons. Clicca per visitare la pagina originale

File:PuroRotolamentoCirc.gif

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

PuroRotolamentoCirc.gif(240 × 240 pixel, dimensione del file: 149 KB, tipo MIME: image/gif, ciclico, 159 frame, 1,6 s)

Logo di Commons
Logo di Commons
Questo file e la sua pagina di descrizione (discussione · modifica) si trovano su Wikimedia Commons (?)

Dettagli

Descrizione
Italiano: Moto di puro rotolamento di un disco su una circonferenza
Data
Fonte Opera propria
Autore Cielo Francesco

Immagine fatta con processing

Ecco il codice, i parametri sono tutti commentati in modo da renderne facile la modifica per chi volesse. Le impostazioni iniziali sono nella funzione setup.

/* 
 * Moto di puro rotolamento di un disco su una circonferenza
 *
 */

int sz;          // intero che moltiplicato per 16 da la dimensione in
                 // pixel dell'immagine

int R;           // raggio della circonferenza 
int r;           // raggio del disco
float nu;        // frequenza (giri al sec) di rotazione del disco attorno
                 // alla circonferenza
float phi;       // angolo tra il centro del disco e l'asse orizzontale
float theta;     // angolo tra il punto che si vuole osservare sul disco e
                 // l'asse che collega i due centri

int nDent;       // numero di dentini da disegnare sul disco

//variabili per poter calcolare la velocità
float x, y;  
float dx, dy, dt;

void setup()
{
  sz = 15;
  size(16*sz, 16*sz);
  frameRate(20);
  
  R = width/4;
  r = width/16;
  phi = -PI;
  theta = 0;
  nu = 1.0/8;
  
  nDent = 3;
}

void draw() 
{
  background(255);
  
  dt = 1.0/frameRate;   // così la velocità esce in pixel al secondo =P              
  phi = phi + TWO_PI*nu/frameRate;
  theta = PI + (phi*R)/r;
  
  disegnaCirconferenza();
  disegnaDisco();
  
  if((phi >= -HALF_PI) && (phi <= -HALF_PI+TWO_PI))
    saveFrame("img/pr-####.png");

}

void disegnaCirconferenza()
{
  noFill();
  ellipse(width/2, height/2, 2*R, 2*R); //circonferenza
  fill(0);
  ellipse(width/2, height/2, 4, 4);     //centro
  
  // disegno dei dentini
  for(int i = 0; i< nDent*R/r; i++)
  {
    float a = i*TWO_PI/(nDent*R/r);
    float px = 0.98*R*cos(a) + width/2;
    float py = 0.98*R*sin(a) + height/2;
    
    float dentX = 0.9*R*cos(a) + width/2;
    float dentY = 0.9*R*sin(a) + height/2;
    line(dentX, dentY, px, py);
  }
}

void disegnaDisco()
{
  float px, py, tmp;
  float cx, cy;
  float dentX, dentY;
  
  cx = (R + r)*cos(phi);
  cy = (R + r)*sin(phi);
  
  tmp = r*cos(theta) + (R + r);
  py = r*sin(theta);
  px = cos(phi)*tmp - sin(phi)*py;
  py = sin(phi)*tmp + cos(phi)*py;
  
  // calcolo del vettore velocità (divisa per due per farcela stare
  // nell'immagine anche quando è abbastanza grande)
  dx = (px - x)/dt/2; dy = (py - y)/dt/2;
  x = px; y = py;
  
  cx = width/2 + cx; cy = height/2 + cy;
  px = width/2 + px; py = height/2 + py;
  
  // disco
  fill(230);
  ellipse(cx, cy, 2*r, 2*r);
  fill(0);
  ellipse(cx, cy, 4, 4);
  
  // punto di contatto
  fill(0, 0, 255);
  ellipse(R*cos(phi) + width/2, R*sin(phi) + height/2, 4, 4);
  
  // punto da osservare
  fill(255, 0, 0);
  ellipse(px, py, 4, 4);
  line(cx, cy, px, py);
  
  //velocità
  stroke(255, 0, 0);
  line(px, py, px+dx, py+dy);
  stroke(0);
  
  // disegno dei dentini
  for(int i = 0; i<nDent; i++)
  {
    float a = i*TWO_PI/nDent + theta;
    tmp = 0.9*r*cos(a) + (R + r);
    py = 0.9*r*sin(a);
    px = cos(phi)*tmp - sin(phi)*py;
    py = sin(phi)*tmp + cos(phi)*py; 
    
    tmp = 0.8*r*cos(a) + (R + r);
    dentY = 0.8*r*sin(a);
    dentX = cos(phi)*tmp - sin(phi)*dentY;
    dentY = sin(phi)*tmp + cos(phi)*dentY;
    line(dentX + width/2, dentY + height/2, 
         px    + width/2, py    + height/2);
  }
  
}

Licenza

Io, detentore del copyright su quest'opera, dichiaro di pubblicarla con la seguente licenza:
GNU head È permesso copiare, distribuire e/o modificare questo documento in base ai termini della GNU Free Documentation License, Versione 1.2 o successive pubblicata dalla Free Software Foundation; senza alcuna sezione non modificabile, senza testo di copertina e senza testo di quarta di copertina. Una copia della licenza è inclusa nella sezione intitolata Testo della GNU Free Documentation License.
w:it:Creative Commons
attribuzione condividi allo stesso modo
Questo file è disponibile in base alla licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Unported
Tu sei libero:
  • di condividere – di copiare, distribuire e trasmettere quest'opera
  • di modificare – di adattare l'opera
Alle seguenti condizioni:
  • attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
  • condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
Questo tag di copyright è stato aggiunto nell'ambito dell'aggiornamento della licenza dei progetti Wikimedia.

Didascalie

Aggiungi una brevissima spiegazione di ciò che questo file rappresenta

Elementi ritratti in questo file

raffigura

image/gif

Cronologia del file

Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.

Data/OraMiniaturaDimensioniUtenteCommento
attuale23:07, 27 nov 2008Miniatura della versione delle 23:07, 27 nov 2008240 × 240 (149 KB)Skyhc{{Informazioni file |Descrizione = Moto di puro rotolamento di un disco su una circonferenza |Autore = Cielo Francesco }}

La seguente pagina usa questo file:

Metadati