顺便说一句,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);
}
您只需对图形 重新计算 graph.CalculateMaxMinValues(),然后比例就会更新。
如果调用参数为 true 的 CGraphic::Redraw(const bool rescale=false) 方法,缩放比例将自动重新计算(无需单独调用CalculateMaxMinValues)。
对,明白了。)
是否有可能在图表上绘制两个或更多刻度--类似于尺子,以厘米和英寸为单位进行划分,只有在使用该点绘制图表时才给出数值?
新文章 可视化!类似于 R 语言 "plot (绘图)" 的 MQL5 图形库已发布:
在研究交易逻辑时, 图形形式的直观表达是非常重要的。科学界中流行的一些编程语言 (如 R 和 Python) 拥有可视化的特殊 "plot (绘图)" 功能。它能够以直观方式绘制线, 点分布和直方图。在 MQL5 中, 您可以使用 CGraphics 类完成相同的操作。
正如我们在上图中所见, 当使用 0.7 步长时, 我们简单地忽略了一个断点。结果就是, 结果曲线的真实双曲线函数几乎什么也没做。
当使用函数时, 也许会发生除零错误。有两种方式来处理这个问题:
FpNoZeroCheckOnDivision=1
作者:MetaQuotes Software Corp.