int x;//индекс исходного цвета в массиве оттенковif(_mode==0) x=(clr.x[ArrayMaximum(clr.x,0,3)]+clr.x[ArrayMinimum(clr.x,0,3)])/2; // Светлота= (MAX+MIN)/2 Вариант из https://ru.wikipedia.org/wiki/HSL. Тот вариант к которому изначально стремился Петр.if(_mode==1) x=(int)round((clr.rgb.b+clr.rgb.g+clr.rgb.r)/3.0); // мой вариант, который мне кажется более логичным и правильнымif(_mode==2) x=127; // То, что в результате получилась у Петра из-за его алгоритмической путаницы. У него цветовой "сгусток" не гуляет, а стоит ровно по центру.
int ColorShades(uint _clr,uint& _shades[],int _mode=0)
{
SuintRGB clr;
if(ArrayResize(_shades,256)!=256) return(-1); //ошибка resize()
clr.clr=_clr;
int x;//индекс исходного цвета в массиве оттенковif(_mode==0) x=(ArrayMaximum(clr.x,3)+ArrayMinimum(clr.x,3))/2; // Светлота= (MAX+MIN)/2 Вариант из https://ru.wikipedia.org/wiki/HSL. Тот вариант к которому изначально стремился Петр.
else if(_mode==1) x=(int)round((clr.rgb.b+clr.rgb.g+clr.rgb.r)/3.0); // мой вариант, который мне кажется более логичным и правильным
else x=127; // То, что в результате получилась у Петра из-за его алгоритмической путаницы. У него цветовой "сгусток" не гуляет, а стоит ровно по центру.double d, kr, kg, kb;
if(x>0)
{
//движение от черного
d=double(x);
kr=clr.rgb.r/d;
kg=clr.rgb.g/d;
kb=clr.rgb.b/d;
for(int i=0; i<=x; i++)
{
clr.rgb.r=(uchar)fmin(255,kr*i);
clr.rgb.g=(uchar)fmin(255,kg*i);
clr.rgb.b=(uchar)fmin(255,kb*i);
_shades[i]=clr.clr;
}
}
if(x<255)
{
//движение от белого
d=double(255-x);
kr=(255-clr.rgb.r)/d;
kg=(255-clr.rgb.g)/d;
kb=(255-clr.rgb.b)/d;
for(int i=255, j=0; i>x; i--, j++)
{
clr.rgb.r=(uchar)fmax(0,255.0-kr*j);
clr.rgb.g=(uchar)fmax(0,255.0-kg*j);
clr.rgb.b=(uchar)fmax(0,255.0-kb*j);
_shades[i]=clr.clr;
}
if(x==0) _shades[0]=0;
}
return(x);
}
色0,0,0と255,255,255のアルゴリズムを確認してください。
これから確認します。
色0,0,0と255,255,255のアルゴリズムを確認してください。
確認しました。0,0,0,0, - エラーが発生します。アドバイザーがアンロードする。
255,255,255で結構です。
この観察に感謝します。調べてみるよ。
どうだ、ニコライ?
無から有を生んだと認めるか?そうですね、アルゴリズムはあなたより遅いかもしれませんし、バグもいくつかありました。MT5ではまだデバッグされていません。 でも、うまくいくんです。
このようなコードがあることに気づいていますか?
は100%これと同じです。
その後、あなたのコードがなぜこんなに遅くなったのか、不思議に思うことはないはずです。
255,255,255で結構です。
99%の「ウィンドウズ・シェード」と矛盾しないか?
私は「告発」に参加します、我慢できませんでした :)
プログラミングをしてはいけないという良い例です。GUI全体がこのような書き方をしているのであれば、しばらく見ることはないでしょう。:(
どの行も「傑作」です。これだけエラーや失敗が積み重なれば、mql4はうまくいくだろうという期待も高まります。mt4が使われる理由がわかりました。
このようなコードの公開と、その後の批判に対する反応は、フォーラムの参加者を尊重していないと思います。彼らはあなたに危害を加えたいのではなく、あなたを助けたいのです。
アルゴリズムの比較については、視覚的に比較することができます。あなたのアルゴリズムが「ウィンドウズ・シェード」に99%近いシェードを出していることを数字で証明したわけではないのです。
左側があなたのアプローチ、右側がニコライ・セムコの アプローチという感じです。(ニコライ・セムコの スクリプトを改造したものを使用)。
Yuriさん、ご参加とご理解、そしてわかりやすいお手本をありがとうございました。あなたの変更後、私のコードはより快適になりました。
しかし、ここで少し説明しておきます。
Yuriさん、参加と洞察、そしてわかりやすい例をありがとうございました。あなたの変更後、私のコードはより快適になりました。
しかし、ここで少し説明しておきます。
そうかもしれませんね :)
そのようなコードがあることを理解していますか?
は100%これと同じです。
その後、あなたのコードがずっと遅くなることを不思議に思う必要はありません。
まあ、それは私のアルゴリズムを理解していない愚かさなのですが。
そうかもしれませんね :)
そうですね。
ただ、冒頭でミスがあり、すでに以前の記事で訂正しています
これは99%の「Windowsの色合い」と一致しているのでしょうか?
はい、間違いがあります。気がつかなかった。グレーレンジに属する色でありながら、中盤までに白に到達する。だから、徐々に白になるはずです。
...
その後、あなたのコードがなぜこんなに遅くなるのか不思議に思うことはないでしょう。
一般に、他人の実績あるコードをパクって、その非の打ちどころのなさに覆われて、(頭を使って解決策を探している)他人に自分の方がいかに優れているかを伝えるのは都合がいいものです。そうでしょう、ニコライさん(笑)