Tuval harika! - sayfa 47

 
Maxim Kuznetsov :

o zaman uçakta bir daire değil, 3d'de bir silindir :-) Rota spiral şeklinde gidecektir. Silindirik koordinatları başarıyla işaretlerseniz, oldukça mantıklı bir şey

Belki.
 
Maxim Kuznetsov :

o zaman uçakta bir daire değil, 3d'de bir silindir :-) Rota spiral şeklinde gidecektir. Silindirik koordinatları başarıyla işaretlerseniz, oldukça mantıklı bir şey

aslında bunu uygulamak hiç de zor değil. 2-5 satır ekstra kod. Benden önce kimse yapmazsa, boş bir dakika göründüğünde yapacağım.

Ama burada 4K ekran olması daha iyi

 
Maxim Kuznetsov :

o zaman uçakta bir daire değil, 3d'de bir silindir :-) Rota spiral şeklinde gidecektir. Silindirik koordinatları başarıyla işaretlerseniz, oldukça mantıklı bir şey

https://www.mql5.com/en/code/27662

hıza ve kod boyutuna dikkat edin.
Ve hepsi Direct X olmadan

 
Nikolai Semko :

https://www.mql5.com/en/code/27662

hıza ve kod boyutuna dikkat edin.
Ve hepsi Direct X olmadan

Sihirli bir şekilde!

Yarıçap neye bağlıdır?

Çok renkli bir yüzük yapmak zor mu?

Böyle bir görselleştirmenin, ilk 50 optimizasyon geçişini veya tüm sıkıştırma optimizasyonunu değerlendirmek için faydalı olması mümkündür.

 
Nikolai Semko :

https://www.mql5.com/en/code/27662

hıza ve kod boyutuna dikkat edin.
Ve hepsi Direct X olmadan

Sadece sihir. !!!

Ve eksene bir kutupsal ızgara eklersek ve ölçeği neredeyse düz "paralellere" (ve paralel "meridyenlere") kadar değiştirme yeteneği eklersek, geleneksel bir grafiğe yumuşak bir geçiş elde ederiz.

 
Nikolai Semko :

https://www.mql5.com/en/code/27662

hıza ve kod boyutuna dikkat edin.
Ve hepsi Direct X olmadan

+++
 

Herkese teşekkürler!


Aleksey Vyazmikin :

Sihirli bir şekilde!

Yarıçap neye bağlıdır?

Çok renkli bir yüzük yapmak zor mu?

Böyle bir görselleştirmenin, ilk 50 optimizasyon geçişini veya tüm sıkıştırma optimizasyonunu değerlendirmek için faydalı olması mümkündür.

bu 3D grafikler ve döndürme kontrolü için kod, bu işleve uygundur:

 void Draw( double &c[]) {
   double _r=_Height/ 2 - 7 ;
   int Per= int ( 2 * M_PI *_r);
   int X=_Width/ 2 ;
   int Y=_Height/ 2 - 5 ;
   double K= 10 *_Height;
   Canvas.Erase( 0xFF000000 );
   int Size = ArraySize (c);
   double max = c[ ArrayMaximum (c, 0 )];
   double min = c[ ArrayMinimum (c, 0 )];
   if (max-min<= 0 ) return ;
   double _a= 2 * M_PI /per*(_Width/ 2   - _MouseX + 5 *per); // угол камеры по горизонтали (_MouseX  - текущая координата X указателя мышки)
   double _b= 2 * M_PI /per*(_Height/ 2 - _MouseY + 5 *per); // угол камеры по вертикали   (_MouseY  - текущая координата Y указателя мышки)
   for ( int i= 0 ; i<Size; i++) {
       double r = _r*( 0.3 + 0.7 *(c[i]-min)/(max-min));
       double a = 2 * M_PI /per*i;
       double z =r -r* 2 * double (i)/Size;
       double x = cos (a)*r;
       double y = sin (a)*r;
       double R= sqrt (x*x+y*y+z*z);
       double x1=x* cos (_a)+z* sin (_a);
       double z1=-x* sin (_a)+z* cos (_a);
       double y1=y* cos (_b)+z1* sin (_b);
       double z2=-y* sin (_b)+z1* cos (_b);
      z2=z2+_r;
      x=X+K*x1/(z2+K);
      y=Y+K*y1/(z2+K);
      _PixelSet(( int )x,( int )y,Grad( double (i)/Size));
   }
   Canvas.Update();
}

Bu fonksiyonun girişinde sadece bir dizi fiyat vardır. Bir okul çocuğu bile kodu çözebilir. Tek boyutlu fiyat dizisi, 3 boyutlu puan dizisine dönüştürülür. z boyutunun esasen dizi elemanının numarası olduğu XY düzleminde, fiyat kutupsal koordinat sisteminde temsil edilir, burada merkeze olan mesafe r=sqrt( x 2 +y 2 ) (0,0) fiyat değeridir.

Bu işlev, rengi seçmekten sorumludur:

 uint Grad( double p) {
   static uint Col[ 6 ]= { 0xFF0000FF , 0xFFFF00FF , 0xFFFF0000 , 0xFFFFFF00 , 0xFF00FF00 , 0xFF00FFFF };
   if (p> 0.9999 ) return Col[ 5 ];
   if (p< 0.0001 ) return Col[ 0 ];
   p=p* 5 ;
   int n=( int )p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+ 1 ];
   return ARGB( 255 ,c1.c[ 2 ]+ uchar (k*(c2.c[ 2 ]-c1.c[ 2 ])+ 0.5 ),
               c1.c[ 1 ]+ uchar (k*(c2.c[ 1 ]-c1.c[ 1 ])+ 0.5 ),
               c1.c[ 0 ]+ uchar (k*(c2.c[ 0 ]-c1.c[ 0 ])+ 0.5 ));
}

burada p, girdi olarak 0 ile 1 arasında bir sayı ve çıktı olarak seçilen degrade rengidir. Bu durumda renk şablonunun iskeleti 6 renkten oluşur (Sütun dizisi)

Renkle, tam özgürlükle, nasıl ve ne istediğinizi boyayın

 
Aleksey Panfilov :

Sadece sihir. !!!

Ve eksene bir kutupsal ızgara eklersek ve ölçeği neredeyse düz "paralellere" (ve paralel "meridyenlere") kadar değiştirme yeteneği eklersek, geleneksel bir grafiğe yumuşak bir geçiş elde ederiz.

Elbette, ama kodu farklı ölçeklerle karıştırmak istemiyorum. Benim için bu durumda, gereksiz hiçbir şeyin olmadığı kodu göstermek önemliydi. Anlamayı kolaylaştırmak için.

 
Nikolai Semko :

Elbette, ama kodu farklı ölçeklerle karıştırmak istemiyorum. Benim için bu durumda, gereksiz hiçbir şeyin olmadığı kodu göstermek önemliydi. Anlamayı kolaylaştırmak için.

Nikolai, kütüphanenizle ilgili bir soru, verileri bir danışmana nasıl alacağınız?

 
Martingeil :

Nikolai, kütüphanenizle ilgili bir soru, verileri bir danışmana nasıl alacağınız?

Soruyu anlamadım. iCanvas bir grafik kütüphanesidir.
iCanvas aracılığıyla çizgi görselleştirmeli bir gösterge oluşturup arabelleğe almadan bırakırsanız, muhtemelen verileri bir EA'ya nasıl okuyacağınızı soruyorsunuz? O zaman lütfen daha açık olun.

İlk olarak, hiç kimse normal bir göstergede olduğu gibi arabellek gösterge dizileri oluşturmanızı yasaklamaz, ancak bunları INDICATOR_CALCULATIONS yapın ve ardından iCustom aracılığıyla her zamanki gibi verilere erişin.

İkincisi, kaynaklar gibi güçlü bir araç var. Gösterge tamponları aslında aynı kaynaklardır. Her neyse, aynı veri depolama ve erişim mekanizmasını kullanıyorlar.

Kaynaklara aşina olun. Çok basit değil, veri aktarımı için çok önemli bir araçtır. Klasik gösterge arabellek dizilerinden daha verimli olan kendi kitaplıklarınızı oluşturabilirsiniz.

Şahsen, yayınlamadığım gelişmeleri kullanıyorum. iCustom üzerinden erişimden daha rahat ve rasyonel çalışırlar. Her şey kaynaklar aracılığıyla uygulanır.