ところで、CircleWu関数は簡略化し、高速化することができる:
{
if(r<=0)
return;
//--- 予備計算
double r2=r*r;
double quarter=round(r*M_SQRT1_2);
//--- 行のスタイルを設定する
uint prev_style=m_style;
if(style!=UINT_MAX)
LineStyleSet(style);
uint mask=1<<m_style_idx;
//--- ドロー
for(int dx=0; dx<=quarter; dx++)
{
double dy=sqrt(r2-dx*dx);
double alpha1=dy-floor(dy);
double alpha2=1-alpha1;
if((m_style&mask)==mask)
{
PixelTransform4(x,y,dx,(int)(dy)+1,clr,alpha1);
PixelTransform4(x,y,dx,(int)(dy),clr,alpha2);
PixelTransform4(x,y,(int)dy+1,dx,clr,alpha1);
PixelTransform4(x,y,(int)dy,dx,clr,alpha2);
}
mask<<=1;
if(mask==0x1000000)
mask=1;
}
//--- 前の行のスタイルを設定する
if(style!=UINT_MAX)
m_style=prev_style;
}
よくやった!ありがとう。すでにCircleAAアルゴリズムを修正するつもりだったんだ。 ところで、CircleWu関数は簡略化し、高速化することができる:
グラフ自体や各関数のプロパティはいつでも変更できる。例えば、グラフの軸にキャプションを追加し、曲線の名前を変更し、スプライン近似モードを有効にしてみましょう:
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
CGraphic graphic;
graphic.Create(0,"Graphic",0,30,30,780,380);
double x[]={-10,-4,-1,2,3,4,5,6,7,8};
double y[]={-5,4,-10,23,17,18,-9,13,17,4};
CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
curve.Name("Example");
curve.LinesIsSmooth(true);
graphic.XAxis().Name("X - axis");
graphic.XAxis().NameSize(12);
graphic.YAxis().Name("Y - axis");
graphic.YAxis().NameSize(12);
graphic.YAxis().ValuesWidth(15);
graphic.CurvePlotAll();
graphic.Update();
DebugBreak();
}
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
グラフ自体や各関数のプロパティはいつでも変更できる。例えば、グラフの軸にキャプションを追加し、曲線の名前を変更し、スプライン近似モードを有効にしてみよう:
{
curve.LinesIsSmooth(true);
У меня метод называется LinesSmooth LineIsSmooth нету. Продолжаю изучать дальше :)
チャート上に曲線が再描画されると、スケールも更新されるようにするにはどうすればよいですか?
graphicfirst.Redraw(); и Update()
カーブ自体は更新されますが、古い価格の目盛りが残り、チャートがキャンバスの枠外に移動してしまいます。
見つけました。CalculateMaxMinValues() を実行する必要があります。)
例えば、配列の値を変更した場合に、既に作成されたチャートを正しく再描画する方法を教えてください。Redraw()やUpdate()は効果がありません。
こんにちは。具体的にどのようにチャートを再描画しようとしたのですか?
もし、特定の曲線のデータを変更するだけでよいのであれば、ここに動作例があります:
//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
//--- データ 1
double x1[]={-10,-4,-1,2,3,4,5,6,7,8};
double y1[]={-5,4,-10,23,17,18,-9,13,17,4};
//--- データ 2
double x2[]={-10,-10,10,10};
double y2[]={-10,10,-10,10};
//--- グラフィック
CGraphic graph;
graph.HistoryNameWidth(80);
graph.Create(0,"Graph",0,30,30,830,430);
//--- ポイント
CCurve *curve=graph.CurveAdd(x1,y1,CURVE_LINES);
graph.CurvePlot(0);
graph.Update();
Sleep(1000);
curve.Update(x2,y2);
graph.Redraw(true);
graph.Update();
Sleep(1000);
}
こんにちは、具体的にどのようにグラフを描き直そうとしましたか?
もし、特定の曲線のデータを変更するだけでよいのであれば、ここに動作例があります:
P.S.グラフィックス・ライブラリに関するスレッドが フォーラムにありますが、その中でこの質問はすでに提起されています。ありがとうございます。すでに解決しました。1つの配列に対してだけ、まったく同じことをしました。グラフに対しても同様に graph.CalculateMaxMinValues() を再計算する必要があり、その後スケールが更新されます。
パラメータtrueでCGraphic::Redraw(const bool rescale=false)メソッドを呼び出すと、スケールは自動的に再計算されます(別途CalculateMaxMinValuesを 呼び出す必要はありません)。
分かりました。)
定規のように、2つ以上の目盛りをつけることは可能ですか?定規のように、センチメートルとインチで区切り、そのポイントがグラフのプロットに使われた場合のみ値を表示することはできますか?

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 可視化の可能性 Rのプロットに似たMQL5のグラフィックス ライブラリ はパブリッシュされました:
トレードロジックを勉強する際、チャートの視覚的な表現は非常に重要です。科学分野で人気のある数々のプログラミング言語 (R や Python など) は可視化のための関数”プロット”があります。これらは視覚化するために、線、点の分布、ヒストグラムなどを描くことができます。MQL5でも、CGraphics クラスを使用して、同じことができます。
ゼロの除算エラーが発生する可能性があります。この問題に対処する 2 つの方法があります。
FpNoZeroCheckOnDivision=1
作者: MetaQuotes Software Corp.