記事"CCanvasでのカスタム指標とインフォグラフィックス"についてのディスカッション

 

新しい記事 CCanvasでのカスタム指標とインフォグラフィックス はパブリッシュされました:

本稿は、より複雑な構造的実装を伴う新しい種類の指標について検討し、擬似3D型指標と動的インフォグラフィックスの開発についても説明します。

これまではプリミティブを使って複雑な形状を構築するためのクラスと原則を調べてきました。ヒストグラム型の指標を作成するクラスについて説明する際に、擬似3Dオブジェクトを色の選択によってプロットすることについて述べてきました(図13)。しかし、ピラミッドは平らな姿ではありません。したがって、与えられた2次元座標系で等値投影を使用する必要があります。基本的な構造にはあまり多くの要素が含まれていません(図14)が、ピラミッド投影法と可視化の方法は、クラスの実装の主要部分です。


図14 CPyramidクラスの基本構造

作者: Alexander Fedosov

 

クールだが、アンチエイリアスはまったくない。ピクセルの正方形で描画するのは時代遅れだ。

アンチエイリアスが自然界に存在することを示す例を挙げよう:


 
Nikolai Semko:

クールだが、アンチエイリアスはまったくない。ピクセルの正方形で描画するのは時代遅れだ。

アンチエイリアスが自然界に存在することを示す例を紹介しよう:


コードは?

 
Rashid Umarov:

コードは?


どういたしまして:

#property copyright   "2009-2017, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property description "Demonstrating Canvas features"
#property script_show_inputs 
//---
#include <Canvas\CanvasPro.mqh>
//+------------------------------------------------------------------+
|入力|
//+------------------------------------------------------------------+
input int pause = 20;   // 画面への出力間隔をミリ秒単位で遅延させる。
input bool top = false; // グラフの下に描く?
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //カラー処理方法
input int Ncirl =30;    // 円の数
input int MaxSizeCircle = 200; // 円の最大サイズ
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
int OnStart(void)
  {

   double r1[],r2[],k1[],k2[];
   int x[],y[];
   uint col[];
   int j=0;
   ArrayResize(r1,Ncirl);
   ArrayResize(r2,Ncirl);
   ArrayResize(k1,Ncirl);
   ArrayResize(k2,Ncirl);
   ArrayResize(x,Ncirl);
   ArrayResize(y,Ncirl);
   ArrayResize(col,Ncirl);
   
   ChartSetInteger(0,CHART_FOREGROUND,top);
   int Width =(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);  // ウィンドウ幅を取得する
   int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // ウィンドウの高さを取得する
   uint ColorScreen=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);// ウィンドウの背景色を取得する

   CCanvasPro canvas;
   if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,format))
     {
      Print("Error creating canvas: ",GetLastError());
      return(-1);
     }
   canvas.SetBack(false);
   canvas.Erase(ColorScreen);
   canvas.Update();
   srand(GetTickCount());
   for(int i=0;i<Ncirl;i++)
     {
      x[i]=rand()%Width;
      y[i]=rand()%Height;
      r1[i]=rand()%MaxSizeCircle;
      r2[i]=rand()%MaxSizeCircle;
      k1[i]=(double)(rand()%10)/1000;
      k2[i]=(double)(rand()%10)/1000;
      col[i]=XRGB(rand()%255,rand()%255,rand()%255);
     }
   while(!IsStopped())
     {
      canvas.Erase(ColorScreen);
      for(int i=0;i<Ncirl;i++) canvas.CircleSS(x[i],y[i],r1[i]*fabs(sin(j*k1[i])),r2[i]*fabs(sin(j*k2[i])),col[i]);
      Sleep(pause);
      canvas.Update();
      j++;
     }

   ObjectDelete(0,"SampleCanvas");
   canvas.Destroy();
   return(0);
  }
ファイル:
 
Rashid Umarov:

コードは?


標準のcCanvasには、すでにすべての図形に対していくつかのスムージング・メソッドが ありますよね?

 
Andrey Barinov:

標準のcCanvasには、すでにすべてのシェイプに対していくつかのスムージング・メソッドが 用意されている。

残念なことに。Wuのメソッドに基づく最後の円関数でさえ、バグを含み、このメソッドの原始性のために円の対角線上の場所のスムージングに顕著な誤差を与え、速度の点で非常に最適ではない。さらに、平滑化された塗りつぶし形状は単に存在しない。
 
Nikolai Semko:
残念だ。Wuの手法に基づく最後の円関数でさえバグを含んでおり、この手法の原始性のために円の対角線上の場所でスムージングに顕著な誤差を与え、速度の点で非常に最適ではない。特に平滑化された塗りつぶし形状は存在しない。
さて、それなら私は質問に参加するしかない。

コードは?
 
Rashid Umarov:

コードは?

アンドレイ・バリノフ
では、私は質問に参加するだけです。

コードは?

なぜ私にこのような質問をするのか不思議です。私はMetaquotesで働いていませんが、そこで働くことを夢見ています。この会社で働いていたら、この問題だけでなく、CCanvas ライブラリでのスムージングの問題だけでなく、たとえば、canvas での本格的な 3D 機能の問題にも取り組むことができたでしょう。
でも、今の私には、膝の上で作った実験しかありません。公開するのが怖いのです。なぜなら、もっとうまくできることはわかっているからです。でも、時間がかかります。

この記事や、たとえばここでの)キャンバスを使ったすべてのリアライゼーションが、なぜスムージングなしで実装されているのか、本当に理解できません。結局のところ、ピクセルのノコギリによるこのひっかかりは、目には印象的であり、アンチエイリアスを使用すれば、どれほどかっこよく見えるかということに同意せざるを得ません。どのウェブサイトに行っても、iPhoneやAndroidを見ても、丸いボタンや丸みを帯びたボタンが並んでいる。そこにアンチエイリアスなしの丸があるだろうか?しかし、なぜMQL5にはスムージングの本格的な実装がないのだろう?私が間違っているのだろうか?だから私はこのトピックを立ち上げ、超自然的なことは何もないことを示すためにこの例を投稿したのだ:
ファイル:
 
Nikolai Semko:

なぜこのような質問をされるのか不思議です。私は Metaquotes で働いているわけではありません。もし私がこの会社で働いていたら、この問題だけでなく、CCanvasライブラリのアンチエイリアスの問題だけでなく、たとえば、canvasのフル3D機能についても、うまく取り組むことができただろう。
しかし、今は、膝の上で組み立てた実験だけである。

仕事をし、記事を書く。そうすればお金ももらえるし、役に立つ。
 

投稿の編集も新規投稿もないのに、10回目にしてトピックに未読マークがついた。

誰かがいじくりまわしているのか、それともフォーラムがキーを押しているのか?

 
Andrey Khatimlianskii:

投稿の編集も新規投稿もないのに、10回目にしてトピックに未読マークがついた。

誰かがいじくりまわしているのか、それともフォーラムがキーを押しているのか?


投稿者(著者?)が自分の投稿を編集しているのではないかと疑っている。

もう一つの選択肢:誰かが投稿を書き始めてやめた。今、この投稿は編集モードでハングアップしており、フォーラムは毎分(5分、10分?)トピックで何かが起こっていると記している。