ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:473.97KB ,
资源ID:2167269      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2167269.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学画直线制作过程.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

计算机图形学画直线制作过程.docx

1、计算机图形学画直线制作过程本次程序是计算机图形学老师刚刚布置的一道作业,要求我们画出任意直线的点阵图。在这里分享下制作的过程及效果,希望有兴趣各位朋友能够及时提醒我其中的不足,谢谢!步骤:(一)打开VC+6.0,创建一个MFC AppWizard(exe),工程名为:jask_jd_Line,选择但文档类型,在应用程序向导第六步将基类改为“CFormView”,单击“完成”,创建完成。(二)创建一个新对话框IDD_DLG_INPUT,用来输入直线方程。并添加控件如下:控件名称控件ID 控件标题组框IDC_STATIC 方程式:静态文本IDC_STATICY=编辑框IDC_EDIT1静态文本ID

2、C_STATICX+编辑框IDC_EDIT_SEND静态文本IDC_EDIT2按钮IDOK确定按钮IDCANCEL取消如图:(三)用类向导为对话框IDD_DLG_INPUT创建一个新类CFuncInput,并为控件添加变量:(四)在CFuncInput:DoDataExchange(CDataExchange* pDX)函数中添加如下代码初始化对话框变量值:(这样当弹出对话框时就编辑框中就会有初始值,当然这个也可以不要)SetDlgItemText(IDC_EDIT1,1); SetDlgItemText(IDC_EDIT2,0);(五)打开ResourceView进入Menu项,(删除默认的

3、菜单项,左键单机菜单主项,按Delete就可以了,但是别全部删除了,不然这个菜单会消失的,之后就是编译会出问题,在全部删除之前添加菜单“操作”,这个不用多介绍吧,如下:IDM_DRAWLINE 画线(&D)IDM_NEW 刷新(&N)IDM_COLOR 颜色(&C)(六)用类向导为这三个菜单ID添加响应函数,并添加代码如下:void CTask_jd_LineView:OnDrawline() /主要的函数,根据输入的方程式进行绘制直线 / TODO: Add your command handler code here CFuncInput dlg; /这里注释下,要在task_jd_Lin

4、eView.h文件中添加#includeFuncInput.h包含新建的类 if(dlg.DoModal()=IDOK) float k,c; k=StringtoInt(dlg.m_k); c=StringtoInt(dlg.m_c);/这个StringtoInt是自己定义的函数,代码见后文 CDC *pDC=GetDC(); CBrush brush(Color); CBrush *old=pDC-SelectObject(&brush); CRect rt; GetClientRect(&rt); if(k=0&k=1) /斜率大于0且小于1 int x=-(rt.Width()/2)/

5、10; int y=(int)(k*x+c+0.5); float e=k*x+c-y-0.5; for(int i=0;iEllipse(rt.Width()/2+x*10-3,rt.Height()/2-y*10-3,rt.Width()/2+x*10+3,rt.Height()/2-y*10+3); x+; e+=k; if(e=0) y+; e-; else if(k=-1&k0) /斜率大于-1且小于0 int x=-(rt.Width()/2)/10; int y=(int)(k*x+c+0.5); float e=k*x+c-y+0.5; for(int i=0;iEllipse

6、(rt.Width()/2+x*10-3,rt.Height()/2-y*10-3,rt.Width()/2+x*10+3,rt.Height()/2-y*10+3); x+; e+=k; if(e1) /斜率大于1 int y=-(rt.Height()/2)/10; int x=(int)(y-c)/k+0.5); float e=(y-c)/k-x-0.5; for(int i=0;iEllipse(rt.Width()/2+x*10-3,rt.Height()/2-y*10-3,rt.Width()/2+x*10+3,rt.Height()/2-y*10+3); y+; e+=1/k;

7、 if(e=0) x+; e-; else /斜率小于-1 int y=-(rt.Height()/2)/10; int x=(int)(y-c)/k+0.5); float e=(y-c)/k-x+0.5; for(int i=0;iEllipse(rt.Width()/2+x*10-3,rt.Height()/2-y*10-3,rt.Width()/2+x*10+3,rt.Height()/2-y*10+3); y+; e+=1/k; if(e0) x-; e+; else void CTask_jd_LineView:OnNew() / TODO: Add your command ha

8、ndler code here Invalidate(); CDC* pDC=GetDC(); CTask_jd_LineView:OnDraw(pDC);void CTask_jd_LineView:OnColor() / TODO: Add your command handler code here CColorDialog ColorDialog; /定义颜色对话框对象 if (ColorDialog.DoModal()=IDOK) Color=ColorDialog.GetColor();/*Color在class CTask_jd_LineView中定义:Private:COLOR

9、REF Color;并在void CTask_jd_LineView:OnInitialUpdate()中初始化为:Color=RGB(250,0,0);*/ (七)添加函数将字符串转变成浮点数,函数如下:float StringtoInt(CString str) /将字符串转换成浮点数 float result=0; int dot=0; int d=10; int symbol=1; for(int i=0;i=0&str.GetAt(i)=0&str.GetAt(i)SelectObject(&pen); pDC-MoveTo(Mpoint.x-1,0); pDC-LineTo(Mpo

10、int.x-1,rt.Height(); pDC-MoveTo(0,Mpoint.y-1); pDC-LineTo(rt.Width(),Mpoint.y-1); pDC-SelectObject(pOldPen); /*坐标系(细线)*/ CPen pen1; pen1.CreatePen(PS_SOLID,1,RGB(180,120,0); pOldPen=pDC-SelectObject(&pen1); for(int i=Mpoint.x+10;iMoveTo(i,0); pDC-LineTo(i,rt.Height(); for(i=Mpoint.x-10;i0;i-=10) pDC

11、-MoveTo(i,0); pDC-LineTo(i,rt.Height(); for(i=Mpoint.y+10;iMoveTo(0,i); pDC-LineTo(rt.Width(),i); for(i=Mpoint.y-10;i0;i-=10) pDC-MoveTo(0,i); pDC-LineTo(rt.Width(),i); pDC-SelectObject(pOldPen); (九)到现在为止,应该就可以运行成功了。在我的代码里还添加了一些元素,让界面更好看:在int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)中删除(工具栏

12、):if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY| CBRS_SIZE_DYNAMIC) | !m_wndToolBar.LoadToolBar(IDR_MAINFRAME) TRACE0(Failed to create toolbarn); return -1; / fail to create 和m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDock

13、ing(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);在BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)中添加:cs.lpszName = _T( 绘制任意直线 ); cs.style = WS_OVERLAPPEDWINDOW; cs.cx=500; cs.cy=400; return TRUE;修改static UINT indicators =/ ID_SEPARATOR, / status line indicator /ID_INDICATOR_CAPS, /ID_INDICATOR_NU

14、M, /ID_INDICATOR_SCRL, IDS_INDICATOR_MOUSE /*在String Table中双击最后的空白行,添加ID:IDS_INDICATOR_MOUSE,标题:“ 当前坐标是: “不要忽略这些空格哈,不然没那么好看的,具体的各位自己调整*/;(十)用ClassWizard天机鼠标移动响应函数,并将鼠标位置所在的坐标显示在状态栏上,代码如下:void CTask_jd_LineView:OnMouseMove(UINT nFlags, CPoint point) /显示当前鼠标在该坐标系中的坐标 / TODO: Add your message handler c

15、ode here and/or call default CStatusBar*pFrame=(CStatusBar*)AfxGetMainWnd(); CStatusBar*pStatusBar=(CStatusBar*)pFrame-GetDescendantWindow(AFX_IDW_STATUS_BAR); CString strMousePoint; strMousePoint.Format(t当前坐标为: x=%1.2f, y=%1.2f,1.0*(point.x-Mpoint.x)/10,1.0*(Mpoint.y-point.y)/10); pStatusBar-SetPan

16、eText(pStatusBar-CommandToIndex(IDS_INDICATOR_MOUSE),strMousePoint); CFormView:OnMouseMove(nFlags, point);(十一)这下真的没问题了,下面大家看看我运行的几个截图效果:1、鼠标放上之前:2、鼠标放上之后:3、点击菜单“画线(&D)”后:4、单机确定后:5、点击菜单“刷新(&N)”后返回图2,点击菜单“颜色(&C)”后:6、选择绿色,点击“确定”,再点击菜单“画线”,改变编辑框的内容:7、点击“确定”后:8、点击“颜色”选择粉红,确定,点击画线,改变对话框值:9、点击“确定”后:10、当然鼠标在上面移动式,状态栏的变化是没法截图过来的,就不演示了,有兴趣的做出来后就看得到了,就到此为止吧,还请多多指教!

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2