VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 403|回复: 6

[求助] 我是学机械的,问大家一个问题

[复制链接]
28_avatar_middle
在线会员 新手初来咋到 发表于 2018-6-4 17:27:24 | 显示全部楼层 |阅读模式
3驿站币
用逐点法实现插补圆弧,我学机械的,完全不懂机器语言,老师给了我们第一个象限的程序  要2 3 4象限的程序,希望大神给我在原来的程序改下,然后回复给我,不要给我思路,我是真的啥都不会,下面是程序
// chabu.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "chabu.h"

#include "MainFrm.h"
#include "chabuDoc.h"
#include "chabuView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChabuApp

BEGIN_MESSAGE_MAP(CChabuApp, CWinApp)
        //{{AFX_MSG_MAP(CChabuApp)
        ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
                // NOTE - the ClassWizard will add and remove mapping macros here.
                //    DO NOT EDIT what you see in these blocks of generated code!
        //}}AFX_MSG_MAP
        // Standard file based document commands
        ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
        ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
        // Standard print setup command
        ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChabuApp construction

CChabuApp::CChabuApp()
{
        // TODO: add construction code here,
        // Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CChabuApp object

CChabuApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CChabuApp initialization

BOOL CChabuApp::InitInstance()
{
        AfxEnableControlContainer();

        // Standard initialization
        // If you are not using these features and wish to reduce the size
        //  of your final executable, you should remove from the following
        //  the specific initialization routines you do not need.

#ifdef _AFXDLL
        Enable3dControls();                        // Call this when using MFC in a shared DLL
#else
        Enable3dControlsStatic();        // Call this when linking to MFC statically
#endif

        // Change the registry key under which our settings are stored.
        // TODO: You should modify this string to be something appropriate
        // such as the name of your company or organization.
        SetRegistryKey(_T("Local AppWizard-Generated Applications"));

        LoadStdProfileSettings();  // Load standard INI file options (including MRU)

        // Register the application's document templates.  Document templates
        //  serve as the connection between documents, frame windows and views.

        CSingleDocTemplate* pDocTemplate;
        pDocTemplate = new CSingleDocTemplate(
                IDR_MAINFRAME,
                RUNTIME_CLASS(CChabuDoc),
                RUNTIME_CLASS(CMainFrame),       // main SDI frame window
                RUNTIME_CLASS(CChabuView));
        AddDocTemplate(pDocTemplate);

        // Parse command line for standard shell commands, DDE, file open
        CCommandLineInfo cmdInfo;
        ParseCommandLine(cmdInfo);

        // Dispatch commands specified on the command line
        if (!ProcessShellCommand(cmdInfo))
                return FALSE;

        // The one and only window has been initialized, so show and update it.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();

        return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
        CAboutDlg();

// Dialog Data
        //{{AFX_DATA(CAboutDlg)
        enum { IDD = IDD_ABOUTBOX };
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

// Implementation
protected:
        //{{AFX_MSG(CAboutDlg)
                // No message handlers
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
                // No message handlers
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CChabuApp::OnAppAbout()
{
        CAboutDlg aboutDlg;
        aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CChabuApp message handlers





上一篇:求一个mfc框架下的养老系统
下一篇:排序算法问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

28_avatar_middle
ico_lz  楼主| 新手初来咋到 发表于 2018-6-4 17:34:39 | 显示全部楼层
第二象限的算法是  x向左先走一步,然后y值跟圆的曲线函数比较,点在圆内,那就x再走一步y不动,如果点在圆外,y往下走一步,x不走
第三象限的算法是  x先向右走一步,然后y值跟圆的曲线函数比较,点在圆内,那就y向下走一步x不动,如果点在圆外,x向右走一步,y不走
第四象限的算法是  x先向右走一步,然后y值跟圆的曲线函数比较,点在圆内,那就x再走一步y不动,如果点在圆外,y往上走一步,x不走

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2018-6-4 17:38:27 | 显示全部楼层
楼主的这个程序只是一个空的MFC框架而已,就是类似新建了一个工程,之后什么代码都没写一样啊?
本身楼主说的题目方向就比较专业,一点没有参考的话恐怕不太好写哦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

28_avatar_middle
ico_lz  楼主| 新手初来咋到 发表于 2018-6-4 20:33:13 | 显示全部楼层
Syc 发表于 2018-6-4 17:38
楼主的这个程序只是一个空的MFC框架而已,就是类似新建了一个工程,之后什么代码都没写一样啊?
本身楼主 ...

// chabuView.cpp : implementation of the CChabuView class
//

#include "stdafx.h"
#include "chabu.h"

#include "chabuDoc.h"
#include "chabuView.h"
#include "Cmylinedialog.h"
#include "Cmycircledialog.h"
#include "IntegralDlg.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChabuView

IMPLEMENT_DYNCREATE(CChabuView, CView)

BEGIN_MESSAGE_MAP(CChabuView, CView)
        //{{AFX_MSG_MAP(CChabuView)
        ON_COMMAND(ID_line, Online)
        ON_COMMAND(ID_circle, Oncircle)
        ON_COMMAND(ID_integral, Onintegral)
        //}}AFX_MSG_MAP
        // Standard printing commands
        ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
        ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
        ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChabuView construction/destruction

CChabuView::CChabuView()
{
        // TODO: add construction code here

}

CChabuView::~CChabuView()
{
}

BOOL CChabuView::PreCreateWindow(CREATESTRUCT& cs)
{
        // TODO: Modify the Window class or styles here by modifying
        //  the CREATESTRUCT cs

        return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CChabuView drawing

void CChabuView::OnDraw(CDC* pDC)
{
        CChabuDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        // TODO: add draw code for native data here
        DrawAxisLine(pDC);
        if(nselect==1){
                linechabu(pDC);
        }
        if(nselect==2){
                circlechabu(pDC);
        }
        if(nselect==3){
                integralchabu(pDC);
        }
       
       
}

/////////////////////////////////////////////////////////////////////////////
// CChabuView printing

BOOL CChabuView::OnPreparePrinting(CPrintInfo* pInfo)
{
        // default preparation
        return DoPreparePrinting(pInfo);
}

void CChabuView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
        // TODO: add extra initialization before printing
}

void CChabuView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
        // TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CChabuView diagnostics

#ifdef _DEBUG
void CChabuView::AssertValid() const
{
        CView::AssertValid();
}

void CChabuView::Dump(CDumpContext& dc) const
{
        CView::Dump(dc);
}

CChabuDoc* CChabuView::GetDocument() // non-debug version is inline
{
        ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CChabuDoc)));
        return (CChabuDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CChabuView message handlers

void CChabuView::Online()
{
        // TODO: Add your command handler code here
        Cmylinedialog linedlg;
        if (linedlg.DoModal()==IDOK) {
        x0=linedlg.m_sx;
        y0=linedlg.m_sy;
        x1=linedlg.m_ex;
        y1=linedlg.m_ey;
        nselect=1;//选择直线
        }       
        Invalidate();
       
}

void CChabuView::linechabu(CDC* pDC)
{
        int i,num;
        int f,px,py;
        int scale;
        //float k;

        int orgx,orgy;

        CRect rect;
        GetClientRect(rect);
        orgx=rect.right/2;
        orgy=rect.bottom/2;

        CPen pen,pen1;
        CPen *oldpen;
        CPen *oldpen1;
        pen.CreatePen(PS_SOLID,3,RGB(0,0,0));
        oldpen=pDC->SelectObject(&pen);

        num=x1-x0+y1-y0;
        f=0;

        scale=15;
        x0=x0*scale;y0=y0*scale;x1=x1*scale;y1=y1*scale;
        px=x0;
        py=y0;
        //k=(y1-y0)/(x1-x0);
        orgx=orgx+x0;
        orgy=orgy-y0;

        pDC->MoveTo(orgx+x0,orgy-y0);
        pDC->LineTo(orgx+x1,orgy-y1);

        pen1.CreatePen(PS_SOLID,3,RGB(255,0,0));
        oldpen1=pDC->SelectObject(&pen1);
        pDC->MoveTo(orgx+x0,orgy-y0);

        for(i=0;i<num;i++)
        {
                                       
                if (f>=0) {
                        px=px+scale;
                        pDC->LineTo(orgx+px,orgy-py);
                        f=f-y1+y0;
                }
                else{
                        py=py+scale;
                        pDC->LineTo(orgx+px,orgy-py);
                        f=f+x1-x0;
                }
                Sleep(500);
        }

        pDC->SelectObject(oldpen);
        pDC->SelectObject(oldpen1);

}

void CChabuView::DrawAxisLine(CDC *pDC)
{
        int orgx,orgy;
        CRect rect;
        GetClientRect(rect);
        orgx=rect.right/2;
        orgy=rect.bottom/2;

        CPen pen;
        CPen *oldpen;
        pen.CreatePen(PS_SOLID,3,RGB(0,255,0));
        oldpen=pDC->SelectObject(&pen);
        //绘制Y轴
        pDC->MoveTo(orgx,orgy);
        pDC->LineTo(orgx+200,orgy);
        pDC->LineTo(orgx-200,orgy);

        //绘制X轴
        pDC->MoveTo(orgx,orgy);
        pDC->LineTo(orgx,orgy+200);
        pDC->LineTo(orgx,orgy-200);

        pDC->SelectObject(oldpen);
}

void CChabuView::Oncircle()
{
        // TODO: Add your command handler code here
        Cmycircledialog circledlg;
        if (circledlg.DoModal()==IDOK) {
        x0=circledlg.m_sx;
        y0=circledlg.m_sy;
        x1=circledlg.m_ex;
        y1=circledlg.m_ey;
        radius=circledlg.m_radius;
        angle=circledlg.m_angle;
        nselect=2;//选择圆弧
        }       
        Invalidate();
}

void CChabuView::circlechabu(CDC* pDC)
{
        int i,num;
        int f,px,py;
        int scale;
        //float k;
        int xc,yc;
        int xi,yi;

        int orgx,orgy;

        CRect rect;
        GetClientRect(rect);
        orgx=rect.right/2;
        orgy=rect.bottom/2;

        CPen pen,pen1;
        CPen *oldpen;
        CPen *oldpen1;
        pen.CreatePen(PS_SOLID,3,RGB(0,0,0));
        oldpen=pDC->SelectObject(&pen);

        num=abs(x1-x0)+abs(y1-y0);
        f=0;

        scale=15;
        x0=x0*scale;y0=y0*scale;x1=x1*scale;y1=y1*scale;radius=radius*scale;
        px=x0;
        py=y0;
        xc=x0-radius;
        yc=y0;
        xi=x0;
        yi=y0;
        //k=(y1-y0)/(x1-x0);
        orgx=orgx+xc;
        orgy=orgy-yc;

        pDC->MoveTo(orgx+x0,orgy-y0);
    pDC->AngleArc(orgx+xc,orgy-yc,radius,0,90);

        pen1.CreatePen(PS_SOLID,3,RGB(255,0,0));
        oldpen1=pDC->SelectObject(&pen1);
        pDC->MoveTo(orgx+x0,orgy-y0);

        for(i=0;i<num;i++)
        {                                       
                if (f>=0) {
                        px=px-scale;
                        pDC->LineTo(orgx+px,orgy-py);
                        f=f-2*xi+scale+2*xc;
                        xi=xi-scale;
                }
                else{
                        py=py+scale;
                        pDC->LineTo(orgx+px,orgy-py);
                        f=f+2*yi+scale-2*yc;
                        yi=yi+scale;
                }
                Sleep(500);
        }

        pDC->SelectObject(oldpen);
        pDC->SelectObject(oldpen1);

}

void CChabuView::Onintegral()
{
        // TODO: Add your command handler code here
        CIntegralDlg integraldlg;
        if (integraldlg.DoModal()==IDOK) {
        x0=integraldlg.m_sx;
        y0=integraldlg.m_sy;
        x1=integraldlg.m_ex;
        y1=integraldlg.m_ey;
        bitnum=integraldlg.m_bitnum;
        nselect=3;//数字积分法
        }       
        Invalidate();
       
}

void CChabuView::integralchabu(CDC* pDC)
{
        int i,num;
        int scale;
        int jrx,jry,jx,jy,je;//寄存器 累加器 计数器
        int px,py;//溢出
        int orgx,orgy;
        int sym;

        CRect rect;
        GetClientRect(rect);
        orgx=rect.right/2;
        orgy=rect.bottom/2;

        CPen pen,pen1;
        CPen *oldpen;
        CPen *oldpen1;
        pen.CreatePen(PS_SOLID,3,RGB(0,0,0));
        oldpen=pDC->SelectObject(&pen);

        jrx=x1-x0;
        jx=0;
        jry=y1-y0;
        jy=0;

        sym=jrx-jry;
        if(sym>=0){//x>=y
                if(jrx<=4){
                        bitnum=2;
                }else if((jrx>4)&&(jrx<=8)){
                        bitnum=3;
                }else if((jrx>8)&&(jrx<=16)){
                        bitnum=4;
                }else if((jrx>16)&&(jrx<=32)){
                        bitnum=5;
                }else if((jrx>32)&&(jrx<64)){
                        bitnum=6;
                }else{
                        bitnum=0;
                }
        }else{//x<y
        if(jry<=4){
                        bitnum=2;
                }else if((jry>4)&&(jry<=8)){
                        bitnum=3;
                }else if((jry>8)&&(jry<=16)){
                        bitnum=4;
                }else if((jry>16)&&(jry<=32)){
                        bitnum=5;
                }else if((jry>32)&&(jry<64)){
                        bitnum=6;
                }else{
                        bitnum=0;
                }
        }
       
        num=pow(2,bitnum);
        je=num;       

        px=py=0;
        scale=15;
        x0=x0*scale;y0=y0*scale;x1=x1*scale;y1=y1*scale;radius=radius*scale;

        pDC->MoveTo(orgx+x0,orgy-y0);
    pDC->LineTo(orgx+x1,orgy-y1);

        pen1.CreatePen(PS_SOLID,3,RGB(255,0,0));
        oldpen1=pDC->SelectObject(&pen1);
        pDC->MoveTo(orgx+x0,orgy-y0);

        for(i=0;i<num;i++)
        {       
                jx=jx+jrx;
                jy=jy+jry;

                if (jx>=(je-1)){       
                        px=px+scale;               
                        jx=jx-pow(2,bitnum);
                }

                if (jy>=(je-1)){       
                        py=py+scale;
                        jy=jy-pow(2,bitnum);
                }

                pDC->LineTo(orgx+x0+px,orgy-y0-py);
                Sleep(500);
        }

        pDC->SelectObject(oldpen);
        pDC->SelectObject(oldpen1);

}

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

28_avatar_middle
ico_lz  楼主| 新手初来咋到 发表于 2018-6-4 20:33:36 | 显示全部楼层
Syc 发表于 2018-6-4 17:38
楼主的这个程序只是一个空的MFC框架而已,就是类似新建了一个工程,之后什么代码都没写一样啊?
本身楼主 ...

// chabuDoc.cpp : implementation of the CChabuDoc class
//

#include "stdafx.h"
#include "chabu.h"

#include "chabuDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChabuDoc

IMPLEMENT_DYNCREATE(CChabuDoc, CDocument)

BEGIN_MESSAGE_MAP(CChabuDoc, CDocument)
        //{{AFX_MSG_MAP(CChabuDoc)
                // NOTE - the ClassWizard will add and remove mapping macros here.
                //    DO NOT EDIT what you see in these blocks of generated code!
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChabuDoc construction/destruction

CChabuDoc::CChabuDoc()
{
        // TODO: add one-time construction code here

}

CChabuDoc::~CChabuDoc()
{
}

BOOL CChabuDoc::OnNewDocument()
{
        if (!CDocument::OnNewDocument())
                return FALSE;

        // TODO: add reinitialization code here
        // (SDI documents will reuse this document)

        return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CChabuDoc serialization

void CChabuDoc::Serialize(CArchive& ar)
{
        if (ar.IsStoring())
        {
                // TODO: add storing code here
        }
        else
        {
                // TODO: add loading code here
        }
}

/////////////////////////////////////////////////////////////////////////////
// CChabuDoc diagnostics

#ifdef _DEBUG
void CChabuDoc::AssertValid() const
{
        CDocument::AssertValid();
}

void CChabuDoc::Dump(CDumpContext& dc) const
{
        CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CChabuDoc commands

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

28_avatar_middle
ico_lz  楼主| 新手初来咋到 发表于 2018-6-4 20:36:37 | 显示全部楼层
这个是第一象限的文件,大神们打开帮我看下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

28_avatar_middle
ico_lz  楼主| 新手初来咋到 发表于 2018-6-4 20:41:46 | 显示全部楼层
Syc 发表于 2018-6-4 17:38
楼主的这个程序只是一个空的MFC框架而已,就是类似新建了一个工程,之后什么代码都没写一样啊?
本身楼主 ...

看得到我传的文件吗

chabu.rar.zip

2.27 MB, 下载次数: 4

这个是文件

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-13 08:43

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表