欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    图形学算法设计和流程图ppt课件.ppt

    • 资源ID:29788703       资源大小:319KB        全文页数:22页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    图形学算法设计和流程图ppt课件.ppt

    DDA算法设计A、数据结构设计函数定义:DDA算法函数:void CTestView:DDALine(int xa,int ya,int xb,int yb)方法调用函数:void CTestView :OnDDALineFunc1()鼠标响应函数:void CTestView :OnDDALineMouse1()鼠标按下事件:void CTestView :OnLButtonDown(UINT nFlags, CPoint point) 鼠标抬起事件:void CTestView :OnLButtonUp(UINT nFlags, CPoint point)B、核心算法设计DDA算法:设直线起点(x0,y0),终点(x1,y1),k为直线斜率,因有直线公式为y=kx+b,则有斜率k=(y1-y0)/(x1-x0);当|k|=1时,y坐标:yi+1=yi+1,x坐标:xi+1=xi+1/k;当|k|1时,y坐标:yi+1=yi+k,x坐标:xi+1=xi+1。DDA算法(1)输入DDA算法(2)处理DDA算法(3)输出DDA算法void CTestView:OnDDALineFunc1()/调用DDALine函数CTestView:DDALine(50,50,150,200);/起点(50,50),终点(150,200)void CTestView:OnDDALineMouse1() /鼠标响应调用DDALine函数flag=5;void CTestView:OnLButtonDown(UINT nFlags, CPoint point) /鼠标按下事件bx=point.x; /获取鼠标按下时的横坐标by=point.y; /获取鼠标按下时的横坐标CView:OnLButtonDown(nFlags, point);void CTestView:OnLButtonUp(UINT nFlags, CPoint point)/鼠标抬起事件CClientDC dc(this);if(flag=5)CTestView:DDALine(bx,by,point.x,point.y); /鼠标响应调用DDALine函数CView:OnLButtonUp(nFlags, point);DDA算法void CTestView:DDALine(int xa,int ya,int xb,int yb) /DDALine函数算法CClientDC dc(this);float x,y,k,dx,dy,temp;if(xa=xb)/当xa=xb时,k=0,直线垂直于y轴for(y=ya;yxb) if(xaxb)/确保直线从左向右画temp=xa;xa=xb;xb=temp;temp=ya;ya=yb;yb=temp;y=ya;for(x=xa;x=1)/判断k的绝对值,|k|=1时执行if(yayb)/确保直线从左向右画temp=xa;xa=xb;xb=temp;temp=ya;ya=yb;yb=temp;x=xa;for(y=ya;y0的M点在圆外,d=0时,d更新为d+2x+3,(x,y)更新为(x+1,y);当d0时,d更新为d+2*(x-y)+5,(x,y)更新为(x+1,y+1)。 当xy时,重复计算绘制点。中点画圆算法-流程图中点画圆算法-1void CTestView :midpointcircle(int xa,int ya,int xb,int yb)CClientDC dc(this);int fzbj=(xb-xa)*(xb-xa)+(yb-ya)*(yb-ya);int r=int(sqrt(double)fzbj),c=0;int x,y;float d;x=0;y=r;d=1.25-r;dc.SetPixel(xa+x,ya+y,c);dc.SetPixel(xa-x,ya+y,c);dc.SetPixel(xa+x,ya-y,c);dc.SetPixel(xa-x,ya-y,c);dc.SetPixel(xa+y,ya+x,c);dc.SetPixel(xa-y,ya+x,c);dc.SetPixel(xa+y,ya-x,c);dc.SetPixel(xa-y,ya+x,c);中点画圆算法-2while(x=y)if(d0) d+=2*x+3;else d+=2*(x-y)+5;y-;x+;dc.SetPixel(xa+x,ya+y,c);dc.SetPixel(xa-x,ya+y,c);dc.SetPixel(xa+x,ya-y,c);dc.SetPixel(xa-x,ya-y,c);dc.SetPixel(xa+y,ya+x,c);dc.SetPixel(xa-y,ya+x,c);dc.SetPixel(xa+y,ya-x,c);dc.SetPixel(xa-y,ya-x,c);void CTestView :Onzero1()flag=6;void CTestView :Onanypoint1()flag=7;中点画圆算法-3void CTestView :OnLButtonDown(UINT nFlags, CPoint point)bx=point.x;by=point.y;CView:OnLButtonDown(nFlags, point);void CTestView :OnLButtonUp(UINT nFlags, CPoint point)CClientDC dc(this);else if(flag=6) CTestView :midpointcircle(0,0,point.x,point.y);else if(flag=7) CTestView :midpointcircle(bx,by,point.x,point.y);CView:OnLButtonUp(nFlags, point);二维图形裁剪-线段裁剪计算点的code值流程图 二维图形裁剪-线段裁剪计算直线与边界交点流程图 二维图形裁剪-线段裁剪算法流程图1 二维图形裁剪-线段裁剪算法流程图2二维图形裁剪-线段裁剪算法流程图总总二维图形裁剪-1void CTestView :OnCohenSutherland1() flag=8;CClientDC dc(this);/边框dc.MoveTo(200,100); /LEFTdc.LineTo(200,400);dc.MoveTo(500,100); /RIGHTdc.LineTo(500,400);dc.MoveTo(200,100);/TOPdc.LineTo(500,100);dc.MoveTo(200,400); /BOTTONdc.LineTo(500,400);void CTestView :OnLButtonDown(UINT nFlags, CPoint point) bx=point.x;by=point.y;CView:OnLButtonDown(nFlags, point);二维图形裁剪-1void CTestView :OnLButtonUp(UINT nFlags, CPoint point) CClientDC dc(this);if(flag=8)dc.MoveTo(bx,by);dc.LineTo(point.x,point.y);ClipLine(bx,by,point.x,point.y);CView:OnLButtonUp(nFlags, point); int CTestView :encode(float x,float y)int c;c=0;if(xXR)c=c|RIGHT;if(yYB)c=c|BOTTOM;else if(yYT)c=c|TOP;return c;二维图形裁剪-2void CTestView :ClipLine(float x1,float y1,float x2,float y2)CClientDC dc(this);float x,y;int code,code1,code2;code1=encode(x1,y1);code2=encode(x2,y2);while(code1!=0 |code2!=0) if(code1&code2)!=0) return; code = code1;if(code1=0)code = code2;二维图形裁剪-3/当直线和左边界有交点if(LEFT&code)!=0)x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);/当直线和右边界有交点else if(RIGHT&code)!=0) x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);/当直线和底边界有交点else if(BOTTOM&code)!=0)y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1); /当直线与上边界有交点else if(TOP & code)!=0)y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);二维图形裁剪-4 if(code=code1)x1=x;y1=y;code1 =encode(x,y); elsex2=x;y2=y;code2 =encode(x,y);CPen pen,*old;pen.CreatePen(0,2,RGB(255,0,0);old=dc.SelectObject(&pen);dc.MoveTo(x1,y1);dc.LineTo(x2,y2);dc.SelectObject(old);

    注意事项

    本文(图形学算法设计和流程图ppt课件.ppt)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开