پەڕگە:Color complex plot.jpg
لە testwiki
بۆ ڕێدۆزی بازبدە
بۆ گەڕان بازبدە
قەبارەی ئەم پێشبینینە: ٦٠٠ لە ٦٠٠ پیکسەڵ. ڕێزەلووشنەکانی تر: ٢٤٠ لە ٢٤٠ پیکسەڵ | ٤٨٠ لە ٤٨٠ پیکسەڵ.
پەڕگەی سەرەکی (٨٠٠ × ٨٠٠ پیکسڵ، قەبارەی پەڕگە: ٢٠٣ کیلۆبایت، جۆری ئێم ئای ئێم ئی: 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;
}
مۆڵەتنامە
من، ھەڵگری مافی لەبەرگرتنەوەی ئەم بەرھەمە، لەژێر ئەم مۆڵەتنامەیانەدا بڵاوی دەکەمەوە:
| ڕێگەدراوە بە لەبەرگرتنەوە، دابەشکردن ھەروەھا/یان سازاندنی ئەم بەڵگەنامەیە لەژێر مەرجی مۆڵەتی GNU بۆ بەڵگەنامەی ئازاد، وەشانی ١.٢ یان ھەر وەشانێکی تری دواتر کە بڵاوکراوەتەوە لەلایەن دامەزراوەی بەرنامەی ئازاد، بەبێ ھیچ بەشێکی جیاواز، بەبێ نووسین لەسەر بەرگی پێشەوە و دواوەی. وێنەیەک لەمۆڵەتەکە لە بەشێکدا ھەیە کە ناوی مۆڵەتی GNU بۆ بەڵگەنامەی ئازادە.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
| ئەم پەڕگەیە لە ژێر مۆڵەتنامەی | ||
| ||
| 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 |
This file is licensed under the Creative Commons Attribution 2.5 Generic license.
- تۆ ئازادی:
- بۆ بڵاکردنەوە – بۆ کۆپی کردن، دابەشکردن و دەستبەدەست ناردنی
- بۆ تێکەڵکردنەوە – بۆ سازاندنی کارەکە
- بەم مەرجانەی خوارەوە:
- دانەپاڵ – پێویستە باوەڕی گونجاو بدەیت، بەستەرێک بۆ مۆڵەتەکە دابین بکەیت و ئاماژە بەوە بکەیت کە ئایا گۆڕانکاری کراوە یان نا. دەتوانیت بە هەر شێوەیەکی گونجاو ئەوە بکەیت، بەڵام بە شێوەیەک نا کە وا دەربکەوێت کە مۆڵەتدەر پشتگیری تۆ یان بەکارهێنانەکەت بکات.
دەتوانی مۆڵەتنامەی دڵخوازت ھەڵبژێریت.
لێدوانەکان
Add a one-line explanation of what this file represents
Color wheel graph of the function f(x) = (x^2 − 1)(x + 2 − i)2 / (x^2 + 2 - 2i).
بەندەکانی لەم پەڕگەیەدا دەردەکەون
وێنا دەکات
some value
٧ ئابی 2007
source of file ئینگلیزی
original creation by uploader ئینگلیزی
media type ئینگلیزی
image/jpeg
checksum ئینگلیزی
c0f2c797263ef24ef3cb2d39a22f86ee3e4ca071
data size ئینگلیزی
٢٠٨٬١٧٨ بایت
٨٠٠ پیکسڵ
width ئینگلیزی
٨٠٠ پیکسڵ
مێژووی پەڕگە
کرتە بکە لەسەر یەکێک لە ڕێکەوت/کاتەکان بۆ بینینی پەڕگەکە بەو شێوەی لەو کاتەدا بووە.
| ڕێکەوت/کات | ھێما | ئەندازە | بەکارھێنەر | تێبینی | |
|---|---|---|---|---|---|
| هەنووکە | ٠٠:٠٦، ٢٣ی ئازاری ٢٠١٣ | ٨٠٠ لە ٨٠٠ (٢٠٣ کیلۆبایت) | wikimediacommons>Yourmomblah | Higher quality |
بەکارھێنانی پەڕگە
ئەم پەڕەیە ئەم پەڕگەیە بەکار دەھێنێت:
