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

 

Üzgünüm Peter - bensiz devam et. Bu konuda zaten her şeyi söyledim. Tekrar etme arzusu yok.

Senin ve benim algoritmam yok.

Tekrar ediyorum, bu iş parçacığında dikkati hak eden tek şey, "sizin" ve "benim" algoritmalarını alabileceğiniz bu işlev, gerisi mastürbasyon (hem sizin tarafınızdan hem de benim tarafımdan :))

 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;
     }
  }
 
Nikolai Semko :

Üzgünüm Peter - bensiz devam et. Bu konuda zaten her şeyi söyledim. Tekrar etme arzusu yok.

Senin ve benim algoritmam yok.

Tekrar ediyorum, bu iş parçacığında dikkati hak eden tek şey, "sizin" ve "benim" algoritmalarını alabileceğiniz bu işlev, gerisi mastürbasyon (hem sizin tarafınızdan hem de benim tarafımdan :))

Nikolay, ben tarafsızlıktan yanayım. Ekli komut dosyası ve ekran görüntüleri.

Çözümlerinizi geliştirmeyi sevdiğinizi biliyorum. Ben de.

Algoritmanız (maalesef) yanlış gradyan oluşturuyor. Nasıl çalıştığını bilmediğim için hata aramadım. Ama sen bunu yapabilirsin.

 
Реter Konow :

Nikolay, ben tarafsızlıktan yanayım. Ekli komut dosyası ve ekran görüntüleri.

Çözümlerinizi geliştirmeyi sevdiğinizi biliyorum. Ben de.

Algoritmanız (maalesef) yanlış gradyan oluşturuyor. Nasıl çalıştığını bilmediğim için hata aramadım. Ama sen bunu yapabilirsin.

https://www.mql5.com/ru/forum/282861/page7#comment_8971634

https://www.mql5.com/ru/forum/282861/page9#comment_8987611

https://www.mql5.com/ru/forum/282861/page11#comment_8987978

https://www.mql5.com/ru/forum/282861/page19#comment_9019253
 

Evet, doğru çalıştığına dair teorinizle örtüştüğü için algoritmanızın doğru çalıştığını düşünüyorsunuz. Anladım.

Ancak Windows paletini standart olarak alıyorum. Algoritmanızın çıktısını paletle karşılaştırırsanız - fark önemlidir. Bu hem sayısal hem de görsel olarak görülebilir.

Tüm göstermek istediğim buydu.

Böyle bırakabilirsiniz. Çok güzel.

 
Реter Konow :

Evet, doğru çalıştığına dair teorinizle örtüştüğü için algoritmanızın doğru çalıştığını düşünüyorsunuz. Anladım.

Ancak Windows paletini standart olarak alıyorum. Algoritmanızın çıktısını paletle karşılaştırırsanız - fark önemlidir. Bu hem sayısal hem de görsel olarak görülebilir.

Tüm göstermek istediğim buydu.

Böyle bırakabilirsiniz. Çok güzel.

ne yazdığımı görmüyorsun. Kararlaştırdığım ve benim algoritmam dediğin yaklaşımı kendim sevmiyorum (daha az kötü). Ama yaklaşımınızı daha da fazla sevmiyorum ve nedenini açıkladım.

 
Nikolai Semko :

ne yazdığımı görmüyorsun. Kararlaştırdığım ve benim algoritmam dediğin yaklaşımı kendim sevmiyorum (daha az kötü). Ama yaklaşımınızı daha da fazla sevmiyorum ve nedenini açıkladım.

O zaman Windows paletini de sevmiyorsun. Sonuçta, onunla neredeyse tam bir eşleşmem var.

 
Реter Konow :

O zaman Windows paletini de sevmiyorsun. Sonuçta, onunla neredeyse tam bir eşleşmem var.

Bunun hakkında zaten yazdım .

ve palet ile gradyanı karıştırmayın. Gradyan tek boyutlu bir kavramdır ve palet iki veya üç veya 4 (CMYK hakkında konuşuyorsak) boyutludur.

Örneğin:

bu iki boyutlu bir kırmızı palet

ve bu onun tek boyutlu gradyanı

İki degradenin (siyahtan renge ve renkliden beyaza) birleşimine ihtiyaç duyduğunuz bir konuda tartışmaya çalışıyorsunuz. Ortadaki varyantın tek doğru olduğunu iddia ediyorsunuz, çünkü Windows'ta Paint'te kullanılır. Yalnızca bir renk bileşeninin göründüğü ve geri kalanının 0 olduğu yukarıdaki örneklerinizde, evet - bu daha doğrudur, ancak bu yalnızca özel bir durumdur. Bir şey demiyorum, sadece çözülmekte olan soruna bağlı olduğunu söylüyorum, ancak rengin açıklığına (R + B + G'nin toplamı) bağlı olarak en genel duruma ayarlamak mantıklı olduğunu düşünüyorum.

Örneğin, Corel ve Adobe gibi daha ciddi grafik düzenleyicilerde, konu degrade dolgular olduğunda, degradenin "ağırlık merkezi" için bir ayar vardır:

bu tartışılacak bir şey değil.

Bu başlıktan kovuldum.

 
Nikolai Semko :


Renk aralığından bahsediyorum. Gradyan değişebilir. Ancak bir rengin tüm tonları sabittir.

Her rengin üç bileşeni vardır - grafikte üç nokta. İçlerinden üç hat geçer. Her satırın grafikte iki bölümü vardır. Segmentler ışığın kırılmasından ortaya çıkar. Kırılma ekseni grafiğin merkezindedir. Her segmentin kendi yükselme açısı vardır. Yükseliş sıfırdan maksimuma gider. Grafikte oluşturulan altı bölümün tümü bir prizmadır. Açıları her aralık için sabittir. Görev, bu bölümlerin her noktasında bileşenlerin değerini bulmaktır. Aynı rengin tüm tonlarını bu şekilde buluyorum. Diğer her şey bu kararın türevsel bir manipülasyonudur. Yükseliş açılarını değiştirebilir, renkleri karıştırabilirsiniz vb. Baz değişmeden kalır.

Çözümünüzde, renk yelpazesi eksik veya bozuk. Her durumda, gölgelerin geçişi düzgün ve uyumlu değildir.


not Ağırlık merkezi hakkında - katılıyorum. Ancak bu sadece grafikteki belirli noktaların hesaplanmasının bir manipülasyonudur. İlk segmentte ikincisine göre daha fazla bileşen değeri elde etmek mümkündür. "Degradenin değişen ağırlık merkezi" bu şekilde ortaya çıkacaktır (yukarıdaki örnekte olduğu gibi).

 
Biraz tic-tac-toe zabatsat mı?
 

Grafik şöyle bir şeye benziyor:



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