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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

直线中点Bresenham算法.docx

1、直线中点Bresenham算法学 生: 学 号: 班 级: 网络 实验时间: 2012年12月19日 报告时间: 2012年12月20日 系 别: 计算机系 学 院: 电气与信息工程学院 实验:直线中点Bresenham算法一:原理1、输入直线的两端点p0(x0,y0)和p1(x1,y1)。2、计算初始值x,y,d=x-2y,x=x0,y=y0。3、绘制点(x,y)判断d的符号:若d=scanline 4) 扫描AET表,填充扫描线和多边形相交的区间。二:伪代码class CscanfillView : public CViewprotected: / 仅从序列化创建 CscanfillVie

2、w(); DECLARE_DYNCREATE(CscanfillView)/ 属性public: CscanfillDoc* GetDocument() const;/ 操作public: void PolygonFill(); /上闭下开填充多边形 void CreatBucket(); /建立桶节点 void Et(); /构造边表 void AddEdge(AET *); /将边插入AET表 void EdgeOrder(); /对AET表进行排序/ 重写public: virtual void OnDraw(CDC* pDC); / 重写以绘制该视图 virtual BOOL PreC

3、reateWindow(CREATESTRUCT& cs);protected: virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);/ 实现public: virtual CscanfillView();#ifdef _DEBUG virtual void AssertValid() const; virtual v

4、oid Dump(CDumpContext& dc) const;#endifprotected: COLORREF GetColor; /调色板 CPoint Point7; /定义多边形 Bucket * HeadB,*CurrentB; /桶的头结点和当前节点 AET ENumber,*HeadE,*CurrentE,*T1,*T2; /有效边表的节点/ 生成的消息映射函数protected: DECLARE_MESSAGE_MAP()public: afx_msg void OnMenuAET();#ifndef _DEBUG / scanfillView.cpp 中的调试版本inli

5、ne CscanfillDoc* CscanfillView:GetDocument() const return reinterpret_cast(m_pDocument); #endif三:截图实验:梁友栋-Barsky直线裁剪算法一:原理 梁友栋-Barsky算法进行线段裁剪的步骤 (1) 输入直线段的两端点坐标以及窗口的四条边界坐标。 (2) 若x=0 则p1=p2=0。进一步判断是否满足q10或q20且q20 则进一步计算u1和u2。转(5)。 (3) 若y=0 则p3=p4=0。进一步判断是否满足q30或q40且q20 则进一步计算u1和u2。转(5)。(4) 若上述两条均不满足,

6、则有pk0(k=1,2,3,4)。此时计算u1和u2。(5) 求得u1和u2后,进行判断 若u1u2,则直线段在窗口外,转(7)。若u1Polygon(Point,7);/绘制多边形 /输出多边形的顶点编号 pDC-TextOut(550,410,P0); pDC-TextOut(350,600,P1); pDC-TextOut(230,340,P2); pDC-TextOut(350,30,P3); pDC-TextOut(490,220,P4); pDC-TextOut(600,30,P5); pDC-TextOut(805,450,P6); 三:截图实验:三次B样条曲线算法一:原理三次B

7、样条曲线的n=3,k=0,1,2,3,控制多边形有4个控制点P0、P1、P2和P3,B样条曲线是三次多项式。三次参数曲线可以表示成: P(t)=A0(t) Q0 + A1(t) Q1 + A2(t) Q2 + A3 (t) Q3 (1) A0(t),A1(t),A2(t),A3 (t)是待定参数P1 由Q0,Q1,Q2,Q3确定P2 由Q1,Q2,Q3,Q4确定P1 (1)=P2 (0) P1 (1)=P2 (0) P1 (1)=P2 (0) A0(t) + A1(t)+ A2(t) + A3 (t)=1A0(t) ,A1(t) , A2(t) , A3 (t)0确定 A0(t) ,A1(t)

8、 , A2(t) , A3 (t) 代入(1)式对于B样条曲线来说,特征多边形每增加一个顶点,就相应增加一段B样条曲线。因此, B样条曲线很好地解决了曲线段的连接问题。二:伪代码void CDrawYTQXView:DrawB3_curves() /绘制B样条曲线 CClientDC dc(this); int i,rate=10,m; long lx,ly; m=CtrlPoint-(3+1); double F03,F13,F23,F33; lx=ROUND(pt0.x+4.0*pt1.x+pt2.x)/6.0); /t0的起点x坐标 ly=ROUND(pt0.y+4.0*pt1.y+pt

9、2.y)/6.0);/t0的起点y坐标 dc.MoveTo(lx,ly); CPen MyPen2,*pOldPen2; MyPen2.CreatePen(PS_SOLID,2,RGB(0,0,255); /颜色设置 pOldPen2=dc.SelectObject(&MyPen2); for(i=1;im+2;i+) /m+1段三次样条曲线 for(double t=0;t=1;t+=1.0/rate) F03=(-t*t*t+3*t*t-3*t+1)/6;/计算F0,3(t) F13=(3*t*t*t-6*t*t+4)/6;/计算F1,3(t) F23=(-3*t*t*t+3*t*t+3*

10、t+1)/6;/计算F2,3(t) F33=t*t*t/6;/计算B3,3(t) lx=ROUND(pti-1.x*F03+pti.x*F13+pti+1.x*F23+pti+2.x*F33); ly=ROUND(pti-1.y*F03+pti.y*F13+pti+1.y*F23+pti+2.y*F33); dc.LineTo(lx,ly); dc.SelectObject(pOldPen2); MyPen2.DeleteObject();void CDrawYTQXView:DrawCharPolygon()/绘制控制多边形 CClientDC dc(this); CPen MyPen,*p

11、OldPen; MyPen.CreatePen(PS_SOLID,2,RGB(0,0,0); /控制多边形 pOldPen=dc.SelectObject(&MyPen); for(int i=0;iCtrlPoint;i+) if(i=0) dc.MoveTo(pti); dc.Ellipse(pti.x-2,pti.y-2,pti.x+2,pti.y+2); else dc.LineTo(pti); dc.Ellipse(pti.x-2,pti.y-2,pti.x+2,pti.y+2); dc.SelectObject(pOldPen); MyPen.DeleteObject();void

12、 CDrawYTQXView:OnLButtonDown(UINT nFlags, CPoint point)/获得屏幕控制点坐标 / TODO: Add your message handler code here and/or call default CView:OnLButtonDown(nFlags, point); if(Flag) ptCtrlPoint.x=point.x; ptCtrlPoint.y=point.y; if(CtrlPointN_MAX_POINT) CtrlPoint+; else Flag=false; DrawCharPolygon(); else DrawCharPolygon1();void CDrawYTQXView:OnRButtonDown(UINT nFlags, CPoint point)/调用绘制函数 / TODO: Add your message handler code here and/or call default Flag=false; if(Sign=0)Hermite(); if(Sign=1)DrawBezier(); if(Sign=2)DrawB3_curves(); CView:OnRButtonDown(nFlags, point);三:截图

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1