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条)

报告相同问题?

悬赏问题

  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn