Fail:Zernike polynomials2.png
Daripada testwiki
Pergi ke pandu arah
Pergi ke carian
Saiz pralihat ini: 600 × 600 piksel. Leraian-leraian lain: 240 × 240 piksel | 480 × 480 piksel | 768 × 768 piksel | 1,024 × 1,024 piksel | 1,568 × 1,568 piksel.
Fail asli (1,568 × 1,568 piksel, saiz fail: 478 KB, jenis MIME: image/png)
Fail ini dari Wikimedia Commons dan mungkin digunakan oleh projek lain. Penerangan pada laman penerangan failnya di sana ditunjukkan di bawah.
Ringkasan
| KeteranganZernike polynomials2.png |
English: The Zernike polynomials values |
| Tarikh | |
| Sumber | Karya sendiri |
| Pengarang | Rocchini |
| Versi lain |
[sunting]
|
Source Code
The dirty C++ code:
#include <stdio.h>
#include <stdlib.h>
static double fact( int n ) { // The factorial function!
double f = 1;
while(n>1)
f *= n--;
return f;
}
static inline unsigned char f2b( double f ) { // float to byte
if(f<0) f = 0; if(f>1) f = 1;
int i = f*256; if(i>255) i = 255;
return i;
}
void HSV2RGB(double h, double s, double v, unsigned char rgb[3] ) { // the classic hue scale
if (s == 0) {
rgb[0] = rgb[1] = rgb[2] = f2b(v);
} else {
double v_h = h * 6;
double v_i = floor(v_h);
double v_1 = v * (1 - s);
double v_2 = v * (1 - s * (v_h - v_i));
double v_3 = v * (1 - s * (1 - (v_h - v_i)));
double v_r,v_g,v_b;
if (v_i == 0) {v_r = v; v_g = v_3; v_b = v_1;}
else if (v_i == 1) {v_r = v_2; v_g = v; v_b = v_1;}
else if (v_i == 2) {v_r = v_1; v_g = v; v_b = v_3;}
else if (v_i == 3) {v_r = v_1; v_g = v_2; v_b = v ;}
else if (v_i == 4) {v_r = v_3; v_g = v_1; v_b = v ;}
else {v_r = v; v_g = v_1; v_b = v_2;};
rgb[0] = f2b(v_r);
rgb[1] = f2b(v_g);
rgb[2] = f2b(v_b);
}
}
double zernike_polynomials( int m, int n, double ro, double th ) { // the polynomial hitself
double Rmnro = 0;
bool even = m>=0;
if(m<0) m = -m;
if( (n-m)%2 ) return 0;
for(int k=0;k<=(n-m)/2;++k) {
Rmnro += pow(ro,n-2*k)*
( pow(-1,k) * fact(n-k) ) /
( fact( k) *
fact((n+m)/2-k) *
fact((n-m)/2-k)
);
}
if(even) return Rmnro * cos(m*th);
else return Rmnro * sin(m*th);
}
void main() {
const double NO_VALUE = 42; const int B = 64;
const int SX = 1024;
const int SY = 1024;
const int LX = 3; const int LY = 7;
int pairs[21][2] =
{
{ 0,0},
{-1,1},{ 1,1},
{-2,2},{ 0,2},{ 2,2},
{-3,3},{-1,3},{ 1,3},{ 3,3},
{-4,4},{-2,4},{ 0,4},{ 2,4},{ 4,4},
{-5,5},{-3,5},{-1,5},{ 1,5},{ 3,5},{ 5,5},
};
unsigned char * img = new unsigned char[LX*SX*LY*SY*3];
int ix,iy,q = 0;
for(iy=0;iy<LY;++iy) for(ix=0;ix<LX;++ix) {
int m = pairs[q][0];
int n = pairs[q][1];
for(int j=0;j<SY;++j) {
double y = double(SY/2-j)/(SY/2-B);
for(int i=0;i<SX;++i) {
double x = double(SX/2-i)/(SX/2-B);
double ro = sqrt(x*x+y*y);
double th = atan2(y,x);
double z = NO_VALUE;
if(ro<=1)
z = zernike_polynomials(m,n,ro,th);
unsigned char * rgb = img+3*( i+SX*(ix+LX*(j+SY*iy)) );
if(z == NO_VALUE )
rgb[0] = rgb[1] = rgb[2] = 255;
else {
if(z>=0) z = pow( z,0.8); // little enance
else z = -pow(-z,0.8);
z = (z+1)/2; // normalize
if(z<0) z = 0;
if(z>1) z = 1;
HSV2RGB( 2.0*z/3.0, 0.8, 0.9, rgb );
}
}
}
printf("%03d%%\n",q*100/(LX*LY)); ++q;
}
FILE * fp = fopen("c:\\temp\\zernike.ppm","wb");
fprintf(fp,"P6\n%d %d\n255\n",SX*LX,SY*LY);
fwrite(img,1,LX*SX*LY*SY*3,fp);
fclose(fp);
delete[] img;
}
Perlesenan
| Ini adalah gambar sentuh, ini bermakna bahawa ia telah didigitalkan dari versi asal. Modifikasi: Made into pyramid shape. Versi asal boleh dilihat di sini: Zernike polynomials.png.
|
Dengan ini, Zom-B at en.wikipedia selaku pemegang hak cipta karya ini, menerbitkannya di bawah lesen yang berikut:
Fail ini dilesenkan di bawah lesen Pengiktirafan 3.0 Tidak Diport Creative Commons.
Pengiktirafan:
- Anda bebas:
- untuk berkongsi – untuk menyalin, mengedar dan memindah hasil kerja
- untuk mencampur semula – untuk menyesuaikan karya
- Di bawah syarat berikut:
- pengiktirafan – Anda mesti memberi penghargaan yang berpatutan, bekalkan pautan ke lesen, dan tunjukkan jika perubahan telah dibuat. Anda boleh lakukannya dalam sebarang cara yang munasabah, tetapi bukan dalam sebarang cara yang mencadangkan pemberi lesen mengendors anda atau penggunaan anda.
Log muat naik asal
The original description page was here. All following user names refer to en.wikipedia.
- 2009-09-30 22:19 Zom-B 1568×1568× (489636 bytes) == Dettagli == {{Information |Description=Image of the Zernike_polynomials values |Source=self-made |Date=2008-05-07 |Author= [[User:Rocchini|Rocchini]] |Permission=CC-BY 3.0 }} {{RetouchedPicture|Made into pyramid shape|editor=|orig=Zernike_polynomials.
Captions
Add a one-line explanation of what this file represents
Items portrayed in this file
menggambarkan
7 Mei 2008
Sejarah fail
Klik pada tarikh/waktu untuk melihat rupa fail tersebut pada waktu itu.
| Tarikh/Waktu | Gambar kenit | Ukuran | Pengguna | Komen | |
|---|---|---|---|---|---|
| semasa | 21:42, 23 Julai 2011 | 1,568 × 1,568 (478 KB) | wikimediacommons>Akkakk | {{Information |Description={{en|Image of the Zernike_polynomials values}} |Source=Transferred from [http://en.wikipedia.org en.wikipedia]<br/> (Original text : ''self-made'') |Date={{Date|2008|05|07}}<br/> ({{Date|2009|09|30}} (original upload date)) |Aut |
Penggunaan fail
Laman berikut menggunakan fail ini:
Diambil daripada "https://ms.wiki.beta.math.wmflabs.org/wiki/Fail:Zernike_polynomials2.png"