Post

Visualizzazione dei post con l'etichetta Matematica

Find Point of Intersection of Two Lines

  pdd LinesIntersection(pdd A, pdd B, pdd C, pdd D) {      // Line AB represented as a1x + b1y = c1      double a1 = B.second - A.second;      double b1 = A.first - B.first;      double c1 = a1*(A.first) + b1*(A.second);          // Line CD represented as a2x + b2y = c2      double a2 = D.second - C.second;      double b2 = C.first - D.first;      double c2 = a2*(C.first)+ b2*(C.second);          double determinant = a1*b2 - a2*b1;          if (determinant == 0)      {          // The lines are parallel. This is simplified          // by returning a pair of FLT_MAX          return make_pair(FLT_MAX, FLT_MAX); ...

Hello world - Rimozione delle superfici nascoste - Appunti

Rasterization -  HSR descrivere il problema ed elencare le strategie e quindi gli algoritmi La computazione avviene in aritmetica intera, e le operazioni sono “per pixel” (pixel bound). Non tutti i poligoni sopravvissuti, però, devono essere disegnati. Alcuni possono non essere visibili dall’osservatore perché nascosti (totalmente o parzialmente) da altri poligoni. • Problema: dati un insieme di poligoni in 3D ed un punto di vista, si vogliono disegnare solo i poligoni visibili (o porzioni di essi). Ogni poligono si assume essere piatto ed opaco. • Vi sono essenzialmente due approcci: – object-precision: l’algoritmo lavora sui poligoni stabilendo relazioni di occlusione reciproca. Il costo `e quadratico nel numero dei poligoni. Però la precisione `e elevata (precisione macchina). – image-precision: l’algoritmo stabilisce occlusioni a livello del pixel. `E più veloce ma la precisione `e limitata. • La rimozione delle superfici nascoste (Hidden Surface Removal, HSR) vien...

Hello world - Formule Utili

//Distanza tra due punti -------------------------------------------------------------- double Distance(Vect2d p1, Vect2d p2) {   double dx = p2.x - p1.x;   double dy = p2.y - p1.y;   return sqrt((double)dx*dx + dy*dy); }; //Distanza tra un punto e un segmento -------------------------------------------------------------- double DistanceToLine(Vect2d lineP1, Vect2d lineP2, Vect2d point) {   double normalLength = _hypot(lineP2.x - lineP1.x, lineP2.y - lineP1.y);    double distance = (double)((point.x - lineP1.x) * (lineP2.y - lineP1.y) - (point.y - lineP1.y) * (lineP2.x - lineP1.x)) / normalLength;   return abs(distance); }

Hello world - Distanza tra 2 punti

double   Distance ( Vect2d   p1 ,  Vect2d   p2 ) {    double   dx  =  p2 . x  -  p1 . x ;    double   dy  =  p2 . y  -  p1 . y ;    return   sqrt (( double )  dx * dx  +  dy * dy ); }

Hello world - Estendere un segmento

Immagine
   Vect2d   LineP1 ,  LineP2 ;    double   m_MarginLeft = -1000 ,   double   m_MarginRight = 1000 ;    Vect2d   newLineP1 ,  newLineP2 ,  delta ;    delta . x  =   LineP2 . x  -  LineP1 . x ;    delta . y  =   LineP2 . y  -  LineP1 . y ;    double   ratio  =  delta . y  /  delta . x ;    newLineP1 . x  =  m_MarginLeft ;    newLineP1 . y  =  LineP1 . y  - (( LineP1 . x  -  m_MarginLeft ) *  ratio );    newLineP2 . x  =  m_MarginRight ;    newLineP2 . y  =  LineP2 . y  + (( m_MarginRight  -  LineP2 . x ) *  ratio );

Hello world - Rogue - Le Mappe

Immagine
Come descritto nella pagina di Wikipedia , in un roguelike: - Deve esserci una generazione casuale dei livelli,sebbene possano essere inclusi anche livelli predefiniti. In genere i livelli sono stanze interconnesse da corridoi, ma possono esserci anche zone all'aperto. La mia idea è proprio questa. Generare mappe casuali ad ogni livello, ma non escludo di realizzarne anche qualcuna predefinita, tipo la mappa introduttiva per un probabile tutorial ed una conclusiva un eventuale boss o altro, ancora da decidere. Come accennato nel post precedente , la piattaforma sarà inizialmente Windows Phone 7, tale scelta è dettata fondamentalmente da 2 motivi: - È  un sistema che conosco bene, dato che ho già sviluppato e pubblicato applicazioni per tale piattaforma. - Silverlight se pur limitato e dal punto di vista di prestazioni discutibile, è indubbiamente uno strumento che permette di sviluppare velocemente applicazioni ed inoltre con poche modifiche è possibile farle girare anche ...

Hello world - Rogue - Nuovo Approccio

Immagine
Poiché mi sono reso conto della mia difficoltà a spiegare in maniera chiara ed esaustiva le tecniche e gli algoritmi volendo evitare tecnicismi e codici chilometrici, mi accingo a raccontarvi, in maniera molto discorsiva ed in pillole, la nascita, lo sviluppo  e spero la riuscita di un nuovo progetto. In questo primo post vi accenno solamente il genere, la piattaforma e qualche altro piccolo indizio  per darvi l’idea: Roguelike, Silverlight per Windows Phone 7, ambientazione fantasy ma in chiave ironica con battute, parodie e nemici improbabili. Nome in codice: Rogue Se vi ho incuriosito, rimanete sintonizzati. Cercherò di aggiornare frequentemente il blog con gli sviluppi di questo ambizioso progetto. Saluti   

Hello world - Angolazioni

Immagine
Paddle.Curve = 0.005; Ball.Speed.X = (Ball.Position.X - (Paddle.Position.X + (Paddle.Width / 2)) * Paddle.Curve;

Hello world - Palla pallina

Immagine
  Cominciamo con un giochino facile facile, Lo conoscete? Non vi sto a spiegare il funzionamento ne tantomeno descriverò la realizzazione per intero di tale programma. Mi soffermerò invece sui principali aspetti ovvero, movimento della barretta, della palla e rimbalzo di quest’ultima sulla barretta Prima di cominciare un po’ di notazioni e riferimenti Questa è la barretta comandata dal giocatore (Paddle) si muove orizzontalmente in base allo spostamento del Mouse e la pallina vi rimbalza sopra, Tre muri (destro, sinistro e sopra) contornano lo schermo e la pallina vi rimbalza I mattoncini vengono distrutti non appena la pallina entra in contatto con essi Questa è la nostra pallina (Ball) e le sue proprietà sono: Ball.Position  // Posizione (X,Y)  del centro della pallina Ball.OldPosition  // PosizionePrecedente (X,Y) Ball.Radius    // Raggio Ball.Speed     // Velocità (X,Y) La barrettà è da considerarsi come un ...

Hello world

Il primo post per questa categoria non poteva avere altro titolo. Senza dilungarmi troppo, vorrei illustrare (a me stesso prima di tutto) qual è l’intento che vorrei portare avanti in questo nuovo spazio. Cercherò di raccogliere e schematizzare gli elementi salienti che concernono lo sviluppo di un videogioco. Aspetti tecnici si, ma anche concetti di base che agli esperti potrebbero sembrare banali ma ogni tanto non è proprio così. Non scriverò trattati, ne formuloni o chilometrici listati di codice incomprensibile. Cose chiare. Commenti, spiegazioni, interpretazioni (che potrei aver io stesso frainteso), schemini, disegni, appunti, e perché no … qualche battuta se verrà fuori, un po’ di vita vissuta, ricette, consigli e tutto quello che in questo momento mi sfugge. Ovviamente, commenti, segnalazioni, insulti etc saranno ben graditi. Buona lettura e buona scrittura … di videogames Il Programmatore

Il cifrario di Cesare

Immagine

Mesa

Immagine
Consideriamo lo schema. Sette cerchi concentrici divisi in 8 sezioni. Per quattro di queste è indicato un numero, anche se il quarto è poco leggibile. Assegnammo per comodità una lettera ad ogni settore, quindi avremo: A=? - B=4 - C=? - D=7 - E=? - F= sembrerebbe un … - G=? - H=1 Adesso passiamo alla linea che percorre le circonferenze. Partendo dall’esterno, in corrispondenza delle sezioni, la linea passa alla circonferenza più interna. Segnando ogni passaggio si ottiene la sequenza: ACEFCFAC quindi basterà sostituire i numeri alle lettere. Considerando che nella sequenza è presente F (che sembrerebbe un..) ma soprattutto visto che non sono presenti B D H cioè 4 7 1, i tentativi si riducono a 2 3 5 6 8 9.