Fichier:Dyadic trans.gif
Le contenu de la page n’est pas pris en charge dans d’autres langues.
Dyadic_trans.gif (300 × 300 pixels, taille du fichier : 114 kio, type MIME : image/gif)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
DescriptionDyadic trans.gif | Dyadic transformation xy plot |
Date | |
Source | Travail personnel |
Auteur | Claudio Rocchini |
Autorisation (Réutilisation de ce fichier) |
own work, attribution required |
Source Code
/*****************************
* Dyadic transformation Plot
* (C)2010 Claudio Rocchini
* claudio@rockini.name
*****************************/
#include <stdio.h>
#include <assert.h>
#include <vector>
#include <set>
typedef unsigned char byte;
class image { // image definition
public:
byte * mbuf; // Image memory
int dimx,dimy; // Image size
image( int ndimx, int ndimy ) : dimx(ndimx),dimy(ndimy) {
mbuf = new byte[dimx*dimy*3];
memset(mbuf,255,dimx*dimy*3);
}
~image() { delete[] mbuf; }
bool save_ppm( const char * filename ) const {
FILE * f = fopen(filename,"wb"); if(f==0) return false;
fprintf(f,"P6\n%d %d\n255\n",dimx,dimy);
fwrite(mbuf,3,dimx*dimy,f);
fclose(f);
return true;
}
void set_black_pixel( int x, int y, double trasp )
{
if(x<0 || x>=dimx) return; if(y<0 || y>=dimy) return;
byte * p = mbuf+3*(x+y*dimx);
p[0] = byte(p[0]*(1-trasp) /*+ (trasp)*0*/);
p[1] = byte(p[1]*(1-trasp) /*+ (trasp)*0*/);
p[2] = byte(p[2]*(1-trasp) /*+ (trasp)*0*/);
}
void dot( double x, double y, double trasp ) // float precision put pixel
{
int ix = int(x); double rx = x-ix;
int iy = int(y); double ry = y-iy;
set_black_pixel(ix+0,iy+0,trasp*(1-rx)*(1-ry));
set_black_pixel(ix+1,iy+0,trasp*( rx)*(1-ry));
set_black_pixel(ix+0,iy+1,trasp*(1-rx)*( ry));
set_black_pixel(ix+1,iy+1,trasp*( rx)*( ry));
}
};
// rational definition
typedef __int64 bigint;
bigint gcd(bigint m, bigint n) {
while (n != 0){
bigint t = m % n;
m = n; n = t;
}
return m;
}
class rational {
public:
bigint p,q;
rational(){}
rational( int np, int nq ) { p=np; q=nq; normalize(); }
bool operator< ( const rational & x ) const { return p*x.q < q*x.p; }
void normalize() { bigint g = gcd(p,q); p /= g; q /= g; }
void doubled() {
if( q%2==0 ) { assert(q!=1); q /= 2; } // assert for overflow checking
else { assert(p< (1<<30) ); p *= 2; }
}
void modulo() { while( p >= q ) p -= q; normalize(); }
operator double() { return double(p)/q; }
};
int main() {
const int SX = 600;
const int SY = 600;
image im(SX,SY);
std::set< rational > ss; // fraction done
for(int i=2;i<150;++i) { // enumerate the fractions
for(int j=1;j<i;++j) {
rational w(j,i); // current start fractions
if( ss.find(w)!=ss.end() ) continue; // just do it!
ss.insert(w);
double xx = SX*w;
std::set< rational > tt; // row set
for(;;){
if( tt.find(w)!=tt.end() ) break; // just do it: is a loop
tt.insert(w);
double yy = SX*w;
im.dot(xx,yy,0.5); // dot this value
w.doubled(); // ww = (w*2) mod 1
w.modulo();
}
}
}
im.save_ppm("c:\\temp\\dyadic.ppm");
return 0;
}
Conditions d’utilisation
Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous les licences suivantes :
Vous avez la permission de copier, distribuer et modifier ce document selon les termes de la GNU Free Documentation License version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. Un exemplaire de la licence est inclus dans la section intitulée GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution – Partage dans les Mêmes Conditions 3.0 (non transposée). | ||
| ||
Ce bandeau de licence a été ajouté à ce fichier dans le cadre de la procédure de mise à jour des licences des images sous GFDL.http://creativecommons.org/licenses/by-sa/3.0/CC BY-SA 3.0Creative Commons Attribution-Share Alike 3.0truetrue |
Ce fichier est disponible selon les termes de la licence Creative Commons Attribution 2.5 Générique.
- Vous êtes libre :
- de partager – de copier, distribuer et transmettre cette œuvre
- d’adapter – de modifier cette œuvre
- Sous les conditions suivantes :
- paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
Vous pouvez choisir l’une de ces licences.
Éléments décrits dans ce fichier
dépeint
12 décembre 2006
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 12 décembre 2006 à 15:02 | 300 × 300 (114 kio) | Rocchini | {{Information| |Description=Dyadic transformation xy plot |Source=Own work |Date=2006-12-12 |Author=Claudio Rocchini |Permission=own work, attribution required }} |
Utilisation du fichier
La page suivante utilise ce fichier :
Usage global du fichier
Les autres wikis suivants utilisent ce fichier :
- Utilisation sur en.wikipedia.org
- Utilisation sur es.wikipedia.org
Ce document provient de « https://fr.wikipedia.org/wiki/Fichier:Dyadic_trans.gif ».