Datei:Dyadic trans.gif
Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Erscheinungsbild
Dyadic_trans.gif (300 × 300 Pixel, Dateigröße: 114 KB, MIME-Typ: image/gif)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
Beschreibung
BeschreibungDyadic trans.gif | Dyadic transformation xy plot |
Datum | |
Quelle | Eigenes Werk |
Urheber | Claudio Rocchini |
Genehmigung (Weiternutzung dieser Datei) |
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;
}
Lizenz
Ich, der Urheberrechtsinhaber dieses Werkes, veröffentliche es hiermit unter der folgenden Lizenz:
![]() |
Es ist erlaubt, die Datei unter den Bedingungen der GNU-Lizenz für freie Dokumentation, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation, zu kopieren, zu verbreiten und/oder zu modifizieren; es gibt keine unveränderlichen Abschnitte, keinen vorderen und keinen hinteren Umschlagtext.
Der vollständige Text der Lizenz ist im Kapitel GNU-Lizenz für freie Dokumentation verfügbar.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
![]() ![]() ![]() |
Diese Datei ist unter der Creative-Commons-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen 3.0 nicht portiert“ lizenziert. | |
| ||
Diese Lizenzmarkierung wurde auf Grund der GFDL-Lizenzaktualisierung hinzugefügt.http://creativecommons.org/licenses/by-sa/3.0/CC BY-SA 3.0Creative Commons Attribution-Share Alike 3.0truetrue |


Diese Datei ist unter der Creative-Commons-Lizenz „Namensnennung 2.5 generisch“ (US-amerikanisch) lizenziert.
- Dieses Werk darf von dir
- verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
- neu zusammengestellt werden – abgewandelt und bearbeitet werden
- Zu den folgenden Bedingungen:
- Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
Du darfst es unter einer der obigen Lizenzen deiner Wahl verwenden.
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
In dieser Datei abgebildete Objekte
Motiv
12. Dezember 2006
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 15:02, 12. Dez. 2006 | ![]() | 300 × 300 (114 KB) | Rocchini | {{Information| |Description=Dyadic transformation xy plot |Source=Own work |Date=2006-12-12 |Author=Claudio Rocchini |Permission=own work, attribution required }} |
Dateiverwendung
Keine Seiten verwenden diese Datei.
Globale Dateiverwendung
Die nachfolgenden anderen Wikis verwenden diese Datei:
- Verwendung auf en.wikipedia.org
- Verwendung auf es.wikipedia.org
- Verwendung auf fr.wikipedia.org
Abgerufen von „https://de.wikipedia.org/wiki/Datei:Dyadic_trans.gif“