चित्र:Color complex plot.jpg
मुक्त ज्ञानकोश विकिपीडिया से
नेविगेशन पर जाएँ
खोज पर जाएँ
इस पूर्वावलोकन का आकार: ६०० × ६०० पिक्सेल । अन्य resolutions: २४० × २४० पिक्सेल | ४८० × ४८० पिक्सेल ।
मूल फ़ाइल ((८०० × ८०० पिक्सेल, फ़ाइल का आकार: २०३ KB, MIME प्रकार: image/jpeg))
सामग्री
सारांश
विवरणColor complex plot.jpg | 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;
}
लाइसेंस
मैं, इस कार्य का/की कॉपीराइट धारक, इसे निम्न लाइसेंसों के अंतर्गत प्रकाशित करता/करती हूँ:
इस दस्तावेज़ को Free Software Foundation द्वारा प्रकाशित GNU मुक्त प्रलेख लाइसेंस के संस्करण 1.2 या नए (बिना किसी अपरिवर्तनीय अनुभागों और अगले या पिछले आवरण के टेक्स्ट के) के अंतर्गत प्रतिलिपि बनाने, बाँटने और/या बदलने की अनुमति प्रदान की जाती है। इस लाइसेंस की एक प्रतिलिपि GNU मुक्त प्रलेख लाइसेंस नामक अनुभाग में शामिल है।http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
इस फ़ाइल को क्रिएटिव कॉमन्स श्रेय-समानसांझा 3.0 अनरिपोर्टेड लाइसेंस के अंतर्गत लाइसेंस किया गया है। | ||
| ||
This licensing tag was added to this file as part of the GFDL licensing update.http://creativecommons.org/licenses/by-sa/3.0/CC BY-SA 3.0Creative Commons Attribution-Share Alike 3.0truetrue |
इस फ़ाइल को क्रिएटिव कॉमन्स श्रेय 2.5 साधारण लाइसेंस के अंतर्गत लाइसेंस किया गया है।
- आप खुलकर:
- बाँट सकते हैं – रचना की प्रतिलिपि बना सकते हैं, बाँँट सकते हैं और संचारित कर सकते हैं
- रीमिक्स कर सकते हैं – कार्य को अनुकूलित कर सकते हैं
- निम्नलिखित शर्तों के अंतर्गत:
- श्रेय – यह अनिवार्य है कि आप यथोचित श्रेय प्रदान करें, लाइसेंस की कड़ी प्रदान करें, और अगर कोई बदलाव हुए हों तो उन्हें इंगित करें। आप ऐसा किसी भी उचित तरीके से कर सकते हैं, लेकिन किसी भी तरह उससे यह नहीं संकेत नहीं किया जाना चाहिए कि लाइसेंसधारी द्वारा आपको अथवा आपके इस प्रयोग का समर्थन किया जा रहा हो।
आप अपना पसंद का लाइसेंस चुन सकते हैं।
Items portrayed in this file
चित्रण
some value
७ अगस्त 2007
source of file अंग्रेज़ी
original creation by uploader अंग्रेज़ी
media type अंग्रेज़ी
image/jpeg
checksum अंग्रेज़ी
c0f2c797263ef24ef3cb2d39a22f86ee3e4ca071
data size अंग्रेज़ी
२,०८,१७८ बाइट
८०० पिक्सल
width अंग्रेज़ी
८०० पिक्सल
फ़ाइल का इतिहास
फ़ाइलका पुराना अवतरण देखने के लिये दिनांक/समय पर क्लिक करें।
दिनांक/समय | अंगूठाकार प्रारूप | आकार | प्रयोक्ता | प्रतिक्रिया | |
---|---|---|---|---|---|
वर्तमान | २३:०६, २२ मार्च २०१३ | ८०० × ८०० (२०३ KB) | wikimediacommons>Yourmomblah | Higher quality |
फ़ाइल का उपयोग
निम्नलिखित पन्ने इस चित्र से जुडते हैं :