Fayl:Color complex plot.jpg
testwiki saytından
Naviqasiyaya keç
Axtarışa keç
Sınaq göstərişi ölçüsü: 600 × 600 piksel. Digər ölçülər: 240 × 240 piksel | 480 × 480 piksel.
Faylın orijinalı (800 × 800 piksel, fayl həcmi: 203 KB, MIME növü: image/jpeg)
Bu fayl Wikimedia Commonsdandır və başqa layihələrdə də istifadə edilə bilər. Faylın təsvir səhifəsindəki məlumat aşağıda göstərilib.
Xülasə
| İzahColor 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 |
| Tarix | |
| Mənbə | Öz işi |
| Müəllif | Claudio Rocchini |
| İcazə (Faylın təkrar istifadəsi) |
CC-BY 2.5 |
| Digər versiyalar |
|
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;
}
Lisenziya
I, the copyright holder of this work, hereby publish it under the following licenses:
| Bu sənədi GNU Azad Sənədləşdirmə Lisenziyası, Versiya 1.2 və ya Azad Proqram Fondu tərəfindən nəşr olunan hər hansı sonrakı versiya şərtlərinə əsasən dəyişməz bölmələr, ön qapaq mətnləri və arxa qapaq mətnləri olmadan köçürmək, yayımlamaq və / və ya dəyişdirmək üçün icazə verilir; Lisenziyanın bir nüsxəsi GNU Azad Sənədləşdirmə Lisenziyası adlı hissəyə daxil edilmişdir.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
| Bu fayl Creative Commons Attribution-Share Alike 3.0 Unported lisenziyası altında yayımlanır. | ||
| ||
| 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 |
Bu fayl Creative Commons Attribution 2.5 Generik lisenziyası altında yayımlanır.
- Siz heç bir məhdudiyyət olmadan:
- paylaşa bilərsiniz – əsəri köçürə, paylaya və ötürə bilərsiniz
- remiks edə bilərsiniz – əsəri adaptasiya edə bilərsiniz
- Aşağıdakı şərtlərə əməl etməklə:
- istinad vermək – Müvafiq istinad verməli, lisenziyaya keçid əlavə etməli və dəyişikliklər edilib-edilmədiyini bildirməlisiniz . Siz bunu istənilən şəkildə edə bilərsiniz, lakin lisenziya verənin sizə şəxsən icazə verdiyini göstərən formada yox.
İstədiyiniz lisenziyanı seçə bilərsiniz.
Başlıqlar
Bu faylın nəyi təmsil etdiyinə dair bir sətirlik izahat əlavə et
Color wheel graph of the function f(x) = (x^2 − 1)(x + 2 − i)2 / (x^2 + 2 - 2i).
Bu faylda təsvir olunan elementlər
təsvir edir
Vikidata elementi olmayan bir neçə dəyər
copyright status ingilis
copyrighted ingilis
7 avqust 2007
source of file ingilis
original creation by uploader ingilis
media type ingilis
image/jpeg
checksum ingilis
c0f2c797263ef24ef3cb2d39a22f86ee3e4ca071
data size ingilis
208.178 Bayt
800 piksel
800 piksel
Faylın tarixçəsi
Faylın əvvəlki versiyasını görmək üçün gün/tarix bölməsindəki tarixlərə klikləyin.
| Tarix/Vaxt | Miniatür | Ölçülər | İstifadəçi | Şərh | |
|---|---|---|---|---|---|
| hal-hazırkı | 00:06, 23 mart 2013 | 800 × 800 (203 KB) | wikimediacommons>Yourmomblah | Higher quality |
Faylın istifadəsi
Aşağıdakı səhifə bu faylı istifadə edir:
