ファイル:Color complex plot.jpg

元のファイル (800 × 800 ピクセル、ファイルサイズ: 203キロバイト、MIME タイプ: image/jpeg)

概要

解説 Color plot of complex function (x^2-1) * (x-2-I)^2 / (x^2+2+2I), hue represents the argument, sat and value represents the modulus
日付
原典 投稿者自身による著作物
作者 Claudio Rocchini
許可
(ファイルの再利用)
CC-BY 2.5
その他のバージョン

Source Code

C++

This is the complete C++ source code for image generation (you must change the fun funcion to plot another one). You need some complex class implementation.

#include <complex> #include <fstream>  using namespace std;   const double PI = 3.1415926535897932384626433832795; const double E  = 2.7182818284590452353602874713527;   void SetHSV(double h, double s, double v, unsigned char color[3]) {     double r, g, b;     if(s==0)         r = g = b = v;      else {         if(h==1) h = 0;         double z = floor(h*6); int i = int(z);         double f = double(h*6 - z);         double p = v*(1-s);         double q = v*(1-s*f);         double t = v*(1-s*(1-f));          switch(i){         case 0: r=v; g=t; b=p; break;         case 1: r=q; g=v; b=p; break;         case 2: r=p; g=v; b=t; break;         case 3: r=p; g=q; b=v; break;         case 4: r=t; g=p; b=v; break;         case 5: r=v; g=p; b=q; break;         }     }     int c;     c = int(256*r); if(c>255) c = 255; color[0] = c;     c = int(256*g); if(c>255) c = 255; color[1] = c;     c = int(256*b); if(c>255) c = 255; color[2] = c; }   complex<double> fun(complex<double>& c ){     const complex<double> i(0., 1.);     return (pow(c,2) -1.) *pow(c -2. -i, 2) /(pow(c,2) +2. +2. *i); }   int main(){     const int dimx = 800; const int dimy = 800;     const double rmi = -3; const double rma =  3;     const double imi = -3; const double ima =  3;       ofstream f("complex.ppm", ios::binary);     f << "P6" << endl       << dimx << " " << dimy << endl       << "255" << endl;       for(int j=0; j < dimy; ++j){         double im = ima - (ima -imi) *j /(dimy -1);         for(int i=0; i < dimx; ++i){		             double re = rma -(rma -rmi) *i /(dimx -1);             complex<double> c(re, im);             complex<double> v = fun(c);	             double a = arg(v);              while(a<0) a += 2*PI; a /= 2*PI;             double m = abs(v);             double ranges = 0;             double rangee = 1;              while(m>rangee){                 ranges = rangee;                 rangee *= E;             }              double k   = (m-ranges)/(rangee-ranges);             double sat = k < 0.5 ? k *2: 1 -(k -0.5) *2;             sat = 1 - pow(1-sat, 3); sat = 0.4 + sat*0.6;              double val = k < 0.5 ? k *2: 1 -(k -0.5) *2; val = 1 - val;             val = 1 - pow(1-val, 3); val = 0.6 + val*0.4;              unsigned char color[3];             SetHSV(a,sat,val,color);             f.write((const char*)color,3);         }     }     return 0; } 

C

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <complex.h>// floor   /*  based on  c++ program from : [[:File:Color_complex_plot.jpg]] by  	Claudio Rocchini  gcc d.c -lm -Wall  http://en.wikipedia.org/wiki/Domain_coloring    */   const double PI = 3.1415926535897932384626433832795; const double E  = 2.7182818284590452353602874713527;    /*  complex domain coloring  Given a complex number z=re^{ i \theta},    hue represents the argument ( phase, theta ),   sat and value represents the modulus  */ int GiveHSV( double complex z, double HSVcolor[3] ) {  //The HSV, or HSB, model describes colors in terms of hue, saturation, and value (brightness).    // hue = f(argument(z))  //hue values range from .. to ..  double a = carg(z); //  while(a<0) a += 2*PI; a /= 2*PI;    // radius of z  double m = cabs(z); //   double ranges = 0;  double rangee = 1;  while(m>rangee){    ranges = rangee;    rangee *= E;       }  double k = (m-ranges)/(rangee-ranges);   // saturation = g(abs(z))  double sat = k<0.5 ? k*2: 1 - (k-0.5)*2;  sat = 1 - pow( (1-sat), 3);   sat = 0.4 + sat*0.6;   // value = h(abs(z))  double val = k<0.5 ? k*2: 1 - (k-0.5)*2;     val = 1 - val;    val = 1 - pow( (1-val), 3);     val = 0.6 + val*0.4;    HSVcolor[0]= a;  HSVcolor[1]= sat;  HSVcolor[2]= val; return 0; }      int GiveRGBfromHSV( double HSVcolor[3], unsigned char RGBcolor[3] ) {         double r,g,b;         double h; double s; double v;         h=HSVcolor[0]; // hue          s=HSVcolor[1]; //  saturation;         v = HSVcolor[2]; // = value;          if(s==0)                 r = g = b = v;         else {                 if(h==1) h = 0;                 double z = floor(h*6);                  int i = (int)z;                 double f = (h*6 - z);                 double p = v*(1-s);                 double q = v*(1-s*f);                 double t = v*(1-s*(1-f));                 switch(i){                         case 0: r=v; g=t; b=p; break;                         case 1: r=q; g=v; b=p; break;                         case 2: r=p; g=v; b=t; break;                         case 3: r=p; g=q; b=v; break;                         case 4: r=t; g=p; b=v; break;                         case 5: r=v; g=p; b=q; break;                 }         }         int c;         c = (int)(256*r); if(c>255) c = 255; RGBcolor[0] = c;         c = (int)(256*g); if(c>255) c = 255; RGBcolor[1] = c;         c = (int)(256*b); if(c>255) c = 255; RGBcolor[2] = c;   return 0; }  int GiveRGBColor( double complex z, unsigned char RGBcolor[3]) {   static double HSVcolor[3];   GiveHSV( z, HSVcolor );   GiveRGBfromHSV(HSVcolor,RGBcolor);   return 0; }  //   double complex fun(double complex c ){   return (cpow(c,2)-1)*cpow(c-2.0- I,2)/(cpow(c,2)+2+2*I);} //    int main(){         // screen (integer ) coordinate         const int dimx = 800; const int dimy = 800;         // world ( double) coordinate         const double reMin = -2; const double reMax =  2;         const double imMin = -2; const double imMax =  2;                  static unsigned char RGBcolor[3];         FILE * fp;         char *filename ="complex.ppm";         fp = fopen(filename,"wb");         fprintf(fp,"P6\n%d %d\n255\n",dimx,dimy);             int i,j;         for(j=0;j<dimy;++j){                 double im = imMax - (imMax-imMin)*j/(dimy-1);                 for(i=0;i<dimx;++i){                                     double re = reMax - (reMax-reMin)*i/(dimx-1);                         double complex z= re + im*I; //                          double complex v = fun(z); //                              GiveRGBColor( v, RGBcolor);                                                  fwrite(RGBcolor,1,3,fp);                 }         }         fclose(fp);         printf("OK - file %s saved\n", filename);          return 0; } 

ライセンス

この作品の著作権者である私は、この作品を以下のライセンスで提供します。
GNU head この文書は、フリーソフトウェア財団発行のGNUフリー文書利用許諾書 (GNU Free Documentation License) 1.2またはそれ以降のバージョンの規約に基づき、複製や再配布、改変が許可されます。不可変更部分、表紙、背表紙はありません。このライセンスの複製は、GNUフリー文書利用許諾書という章に含まれています。
w:ja:クリエイティブ・コモンズ
表示 継承
このファイルはクリエイティブ・コモンズ 表示-継承 3.0 非移植ライセンスのもとに利用を許諾されています。
あなたは以下の条件に従う場合に限り、自由に
  • 共有 – 本作品を複製、頒布、展示、実演できます。
  • 再構成 – 二次的著作物を作成できます。
あなたの従うべき条件は以下の通りです。
  • 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
  • 継承 – もしあなたがこの作品をリミックスしたり、改変したり、加工した場合には、あなたはあなたの貢献部分を元の作品とこれと同一または互換性があるライセンスの下に頒布しなければなりません。
このライセンスのテンプレートは、GFDLのライセンス・アップデートによりこのファイルに追加されたものです。
w:ja:クリエイティブ・コモンズ
表示
このファイルはクリエイティブ・コモンズ 表示 2.5 一般ライセンスのもとに利用を許諾されています。
あなたは以下の条件に従う場合に限り、自由に
  • 共有 – 本作品を複製、頒布、展示、実演できます。
  • 再構成 – 二次的著作物を作成できます。
あなたの従うべき条件は以下の通りです。
  • 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
あなたは上記のライセンスから、どれか一つ以上を選択できます。

キャプション

このファイルの内容を1行で記述してください
Color wheel graph of the function f(x) = (x^2 − 1)(x + 2 − i)2 / (x^2 + 2 - 2i).

このファイルに描写されている項目

題材

7 8 2007

c0f2c797263ef24ef3cb2d39a22f86ee3e4ca071

208,178 バイト

800 ピクセル

800 ピクセル

ファイルの履歴

過去の版のファイルを表示するには、その版の日時をクリックしてください。

日付と時刻サムネイル寸法利用者コメント
現在の版2013年3月22日 (金) 23:062013年3月22日 (金) 23:06時点における版のサムネイル800 × 800 (203キロバイト)YourmomblahHigher quality
2007年8月7日 (火) 09:462007年8月7日 (火) 09:46時点における版のサムネイル800 × 800 (59キロバイト)Rocchini{{Information |Description=Color plot of complex function (x^2-1) * (x-2-I)^2 / (x^2+2+2I), hue represents the argument, sat and value represents the modulo |Source=Own work |Date=2007-08-07 |Author=Claudio Rocchini |Permission=CC-BY 2.5 }}

以下のページがこのファイルを使用しています:

グローバルなファイル使用状況

以下に挙げる他のウィキがこの画像を使っています:

このファイルのグローバル使用状況を表示する。