Rengi gölgelere ayırma işlevi. - sayfa 20

 
prostotrader :
Biraz tic-tac-toe zabatsat mı?

Serin gradyanlar ve gölgeler ile)))

 
Sergey Basov :

Serin gradyanlar ve gölgeler ile)))

Burada komik olan ne anlamıyorum. Çok üzücü. Dünya uzun zamandır işe yaramaz bir öz için havalı bir form yaratıyor ama burada hala "buna neden ihtiyaç var?" diye soruyorlar. Dünyaya ayak uydurmak gerekiyor. Aksi takdirde dünya yıkılır.

 
Реter Konow :

Burada komik olan ne anlamıyorum. Çok üzücü. Dünya uzun zamandır işe yaramaz bir öz için havalı bir form yaratıyor ama burada hala " buna neden ihtiyaç var? " diye soruyorlar. Dünyaya ayak uydurmak gerekiyor. Aksi takdirde dünya yıkılır.

Ördek, piyasada birinin buna (GUI, doğru gradyan, gölgeler vb.) ihtiyacı olduğunu kanıtlıyor.

Kedi ve adam bunu uzun zamandır ima ediyor))

not. Kişisel bir şey değil, ayrıca güzel arayüzleri severim, ancak yalnızca MT'deki ek özellikler olarak.

 
Реter Konow :

Burada komik olan ne anlamıyorum. Çok üzücü. Dünya uzun zamandır işe yaramaz bir öz için havalı bir form yaratıyor ama burada hala "buna neden ihtiyaç var?" diye soruyorlar. Dünyaya ayak uydurmak gerekiyor. Aksi takdirde dünya yıkılır.

Gökkuşağının tüm renklerine boyanmış, ancak taşan bir hamamböceği ezilmeyecek mi?

 
Sergey Basov :

Ördek, piyasada birinin buna (GUI, doğru gradyan, gölgeler vb.) ihtiyacı olduğunu kanıtlıyor.

Kedi ve adam bunu uzun zamandır ima ediyor))

not. Kişisel bir şey değil, ayrıca güzel arayüzleri severim, ancak yalnızca MT'deki ek özellikler olarak.

Kim burada?

 
Реter Konow :

Ve tüm bunlara, Windows paletinin pencerelerindeki sayıların davranışını gözlemleyerek geldim.

Ben farklı bir yöntem kullanıyorum. Ben sadece bilgiye dayalı mantığı dahil ediyorum.

Ve bence, hala bir algoritmamız olduğunu anlamadınız, çünkü basitçe başka yok. Algoritma denir - üç boyutlu uzayda (x1,y1,z1) ve (x2,y2,z2) iki noktayı birleştiren doğrusal bir fonksiyon

http://www.cleverstudents.ru/line_and_plane/canonical_equations_of_line_in_space.html

Sadece, nedense, ilk mesajınıza bakılırsa, onu yaratmanız bir ayınızı aldı, hatta hatalarla bile ve hiçbir şey icat etmem bile gerekmedi çünkü. bu, okuldan beri çok iyi bildiğim ve anladığım üç boyutlu uzayda (r1,g1,b1) ve (r2,g2,b2) iki noktayı birleştirmek için bariz basit bir iştir, formüller düzeyinde bile değil, ama mantık düzeyinde. İlk uygulama yaklaşık 15 dakikamı aldı ve kod ilk (hatırlamıyorum, belki ikinci) seferde çalıştı.

Algoritmanızın aşağıdaki gibi daha basit ve çok yönlü bir işlev kullanılarak uygulandığını burada zaten yazdım:

   color clr= clrViolet ;
   uint CLR1[],CLR2[];
   Gradient( clrWhite , clr, CLR1, 128 ); // получаем массив из 128 элементов градиента от белого цвета до цвета clr 
   Gradient(clr, clrBlack , CLR2, 127 ); // получаем массив из 127 элементов градиента от цвета clr до черног цвета  

CLR1 ve CLR2 dizilerinden oluşan ortak bir dizi sizin çözümünüzdür.

Benim çözümüm biraz daha karmaşıktı çünkü. rengin açıklığını hesaplamanız ve 128 ve 127 yerine yerine koymanız gerekir.

yani bir kez daha - son kez tekrar ediyorum.
Degradeyle çalışmak için gereken tek ve daha çok yönlü işlev:

 union rgb { uint clr; uchar c[ 4 ];};
void Gradient( uint clr1, uint clr2, uint &arr[], uint size)
  {
   if (size== 0 ) return ;
   ArrayResize (arr,size);
   arr[ 0 ]=clr1; 
   rgb c1,c2;
   c1.clr=clr1;
   c2.clr=clr2;
   double R1=c1.c[ 2 ],G1=c1.c[ 1 ],B1=c1.c[ 0 ];
   double R2=c2.c[ 2 ],G2=c2.c[ 1 ],B2=c2.c[ 0 ];
   double deltaR=(R2-R1)/(size- 1 );
   double deltaG=(G2-G1)/(size- 1 );
   double deltaB=(B2-B1)/(size- 1 );
   R1 += 0.4999 ;
   G1 += 0.4999 ;
   B1 += 0.4999 ;
   for ( uint i= 1 ;i<size;i++)
     {
      R1+=deltaR; c1.c[ 2 ]= uchar (R1);
      G1+=deltaG; c1.c[ 1 ]= uchar (G1);
      B1+=deltaB; c1.c[ 0 ]= uchar (B1);
      arr[i]=c1.clr;
     }
  }

çünkü burada verilen tüm algoritmaları iki satırda üretir. O en hızlısı çünkü. döngüde sadece bir "+" işlemi var, çarpma bile yok. Ayrıca, bu işlev herhangi iki rengin karışımlarını verir ve yalnızca birinin tonlarını hesaplamakla kalmaz.

 
Nikolai Semko :

Ben farklı bir yöntem kullanıyorum. Ben sadece bilgiye dayalı mantığı dahil ediyorum.

Ve bence, hala bir algoritmamız olduğunu anlamadınız, çünkü basitçe başka yok. Algoritma denir - üç boyutlu uzayda (x1,y1,z1) ve (x2,y2,z2) iki noktayı birleştiren doğrusal bir fonksiyon

http://www.cleverstudents.ru/line_and_plane/canonical_equations_of_line_in_space.html

Sadece, nedense, ilk mesajınıza bakılırsa, onu yaratmanız bir ayınızı aldı, hatta hatalarla bile ve hiçbir şey icat etmem bile gerekmedi çünkü. bu, okuldan beri çok iyi bildiğim ve anladığım üç boyutlu uzayda (r1,g1,b1) ve (r2,g2,b2) iki noktayı birleştirmek için bariz basit bir iştir, formüller düzeyinde bile değil, ama mantık düzeyinde. İlk uygulama yaklaşık 15 dakikamı aldı ve kod ilk (hatırlamıyorum, belki ikinci) seferde çalıştı.

Algoritmanızın aşağıdaki gibi daha basit ve çok yönlü bir işlev kullanılarak uygulandığını burada zaten yazdım:

CLR1 ve CLR2 dizilerinden oluşan ortak bir dizi sizin çözümünüzdür.

Benim çözümüm biraz daha karmaşıktı çünkü. rengin açıklığını hesaplamanız ve 128 ve 127 yerine yerine koymanız gerekir.

yani bir kez daha - son kez tekrar ediyorum.
Degradeyle çalışmak için gereken tek ve daha çok yönlü işlev:

çünkü burada verilen tüm algoritmaları iki satırda üretir. O en hızlısı çünkü. döngüde sadece bir "+" işlemi var, çarpma bile yok. Ayrıca, bu işlev herhangi iki rengin karışımlarını verir ve yalnızca birinin tonlarını hesaplamakla kalmaz.

Farklı algoritmalarımız ve farklı yaklaşımlarımız var. Üç boyutlu uzayda iki noktayı birbirine bağlayan doğrusal bir fonksiyonum yok. Altı parçalı bir prizma oluşturan iki boyutlu bir grafiğim var.

Tek işleviniz doğru renk aralığını vermiyor. Gösterdim ve kanıtladım.

 
Artyom Trishkin :

Gökkuşağının tüm renklerine boyanmış, ancak taşan bir hamamböceği ezilmeyecek mi?

Bu konuda endişelenmenize gerek yok.

 
Реter Konow :

Farklı algoritmalarımız ve farklı yaklaşımlarımız var. Üç boyutlu uzayda iki noktayı birbirine bağlayan doğrusal bir fonksiyonum yok. Altı parçalı bir prizma oluşturan iki boyutlu bir grafiğim var.

Tek işleviniz doğru renk aralığını vermiyor. Gösterdim ve kanıtladım.

Evet, az önce bir bahçe diktiniz ama yaratılışınızı sorarsanız, hakkında yazdığımı anlıyorsunuz. Bu nedenle, sanat eseriniz daha yavaştır ve çalışır, çünkü. öyle bir yığdı ki, teğet üzerinden 2 sayısını bile hesapladınız.
Algoritmanızı ve bunu önceki mesajımdan alarak Yuri'nin kodunu temel alarak kontrol edin. Ve aynı olacağını göreceksiniz, sadece çok daha hızlı ve çok daha kısa.

 
Nikolai Semko :

Evet, az önce bir bahçe diktiniz ama yaratılışınızı sorarsanız, hakkında yazdığımı anlıyorsunuz. Bu nedenle, sanat eseriniz daha yavaştır ve çalışır, çünkü. teğet üzerinden 2 sayısını hesaplayacak şekilde yığdı.
Algoritmanızı ve bunu önceki mesajımdan alarak Yuri'nin kodunu temel alarak kontrol edin. Ve aynı olacağını göreceksiniz, sadece çok daha hızlı ve çok daha kısa.

Algoritmam iyi çalışıyor. Hızlı (15-20 mikrosaniye). Sizinki düzgün çalışmıyor. Algoritmamı örneğinize göre yeniden oluşturmamı mı öneriyorsunuz?))

Algoritmamı daha hızlı yapmama yardım ettin, böylece yeniden yazmama gerek kalmadı. Bunun için teşekkür ederim. Geri kalanına gelince, algoritmamın kozmetik bir düzeltmeden başka bir şeye ihtiyacı yok.

Ancak, algoritmanızla ilgili bariz sorunlar var.

Neden: