创建绘制y=ax2+bx+c的图像的GUI,其中参数a、b、c及绘图范围等过过界面上的文本编辑框输入
BOOL CDrawImageDlg::OnEraseBkgnd(CDC* pDC)
{
CDialogEx::OnEraseBkgnd(pDC);
if (pDC == NULL)
{
return true;
}
// 从编辑框取值:
std::wstring wsA = GetEditText(IDC_EDIT1);
std::wstring wsB = GetEditText(IDC_EDIT2);
std::wstring wsC = GetEditText(IDC_EDIT3);
std::wstring wsRangeX = GetEditText(IDC_EDIT4);
std::wstring wsRangeY = GetEditText(IDC_EDIT5);
std::wstring wsDrawLeft = GetEditText(IDC_EDIT6);
std::wstring wsDrawTop = GetEditText(IDC_EDIT7);
std::wstring wsDrawRight = GetEditText(IDC_EDIT8);
std::wstring wsDrawBottom = GetEditText(IDC_EDIT9);
// 定义
float fRangeX = (float)wcstof(wsRangeX.c_str(), NULL);
float fRangeY = (float)wcstof(wsRangeY.c_str(), NULL);
// 把编辑框的字符串转换成整数值:
float nA = (float)wcstof(wsA.c_str(), NULL);
float nB = (float)wcstof(wsB.c_str(), NULL);
float nC = (float)wcstof(wsC.c_str(), NULL);
// x轴与 y轴的起始量:
int nStartX = (int)wcstol(wsDrawLeft.c_str(), NULL, 10);
int nStartY = (int)wcstol(wsDrawTop.c_str(), NULL, 10);
// X轴与Y轴的绘制区域,防止画出界:
int nRangeWidth = (int)wcstol(wsDrawRight.c_str(), NULL, 10);
int nRangeHeight = (int)wcstol(wsDrawBottom.c_str(), NULL, 10);
// 绘制外框:
pDC->Rectangle(nStartX, nStartY, nRangeWidth, nRangeHeight);
// 计算坐标中心点:
int nBaseX = nStartX + (nRangeWidth - nStartX) / 2;
int nBaseY = nStartY + (nRangeHeight - nStartY) / 2;
// 绘制Y轴基线(坐标轴)
pDC->MoveTo(nStartX, nBaseY);
pDC->LineTo(nRangeWidth, nBaseY);
// 绘制Y轴基线(坐标轴)
pDC->MoveTo(nBaseX, nStartY);
pDC->LineTo(nBaseX, nRangeHeight);
// 绘制算法图像:
int nFirstPoint = 0;
float fX = 0.0f, fY = 0.0f;
for (fX = -fRangeX; fX <= fRangeX; fX += 1.0f)
{
// 计算数值:
fY = (float)nA * (fX * fX) + (float)nB * fX + (float)nC;
// 绘制到屏幕上:
int x = nBaseX + (int)fX;
int y = nBaseY + (int)fY;
if (nFirstPoint == 0)
{
pDC->MoveTo(x, y);
nFirstPoint = 1;
}
pDC->LineTo(x, y);
}
return true;
}
这个上面不能发送RAR文件,Demo我放在百度网盘,下载地址是:
https://pan.baidu.com/s/1W5RkLL2-MuIKJR6q3XwOwg
我一点 C 币都没有了,如果能用上,求给一点C币,感激不尽。
用plot作图,其中abc用文本框str2num读取
https://jingyan.baidu.com/article/7e440953cf7c192fc0e2efed.html