patatos123 2018-04-29 11:01 采纳率: 33.3%
浏览 3565
已采纳

MATLAB GUI页面设计,求曲线图像

创建绘制y=ax2+bx+c的图像的GUI,其中参数a、b、c及绘图范围等过过界面上的文本编辑框输入

  • 写回答

2条回答

  • maxos 2018-04-30 07:00
    关注

    图片说明
    关键代码如下:

     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币,感激不尽。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程