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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

图形学实验报告画直线圆剪裁.docx

1、图形学实验报告画直线圆剪裁一实验目的:1理解并掌握中点画线算法的基本思想和算法实现在面板随意位置画线。2理解并掌握中点画圆算法的基本思想和算法实现在面板以任意位置为圆心画半径任意的圆。3. 理解并掌握裁剪直线的基本思想和算法实现在任意绘制的矩形中裁剪所画直线。二 实验内容:1 中点画线 1.1基本原理:假定直线斜率|k|=1,且已确定当前象素点P(Xp ,Yp ),然后确定下一个象素点,即T 或B之一。M为T,B中点,Q为理想直线与栅格线的交点。若M在Q的下方,选T,否则选B。使用直线的正负划分性来判断M和Q的位置关系(即:F(x,y)a*x+b*y+c=0)。然后构造判别式:d=F(M)=F

2、(xp+1,yp+0.5)=a(xp+1)+b(yp+0.5)+c其中a=y0-y1, b=x1-x0, c=x0y1-x1y0当d0,M在L(Q点)上方,取右方B为下一个象素;当d=0,选T或B均可,约定取B为下一个象素判断了M的位置之后则可以依次的画出各个点,从而得到一条直线。但是上面的这个算法存在浮点运算,所以将其乘以2去掉浮点运算,实现整数运算,提高效率。而对于|k|1的情况,只需将x与y的位置对调考虑则很容易得到正确的算法实现。并且在本次的中点算法中可以绘制任意斜率的直线。1.2函数流程直线方程:a*x+b*y+c=0, p1(x1,y1), p2(x2,y2)= a=y1-y2;b

3、=x2-x1.点到直线的距离:distance=|a*x0-b*y0+c|/sqrt(a*a + b*b)设directionX,directionY分别为从(x1,y1)=(x2,y2)的单位变化量(+/-1)当直线偏向X轴时,当前象素为(xk, yk),下一个象素可能为:(xk+directionX, yk)或者(xk+directionX,yk+directionY)这两点到直线的距离分别为: d1=|a*xk+b*yk+c+a*directionX|/sqrt(a*a + b*b); d2=|a*xk+b*yk+c+a*directionX+b*directonY|/sqrt(a*a

4、+ b*b);便于运算,定义:f(xk,yk)= d2 * d2 - d1 * d1 (将d1和d2的分母去掉了的)= b*b + *b*directonY*(a*xk+b*yk+c+a*directionX) ;当f(xk,yk)=0的时候,下一个点为(xk+directionX, yk) :f(xk+directionX, yk) = f(xk,yk) + 2*a*b*directionX*directionY ;当直线偏向Y轴时,当前象素为(xk, yk),下一个象素可能为:(xk, yk+directionY)或者(xk+directionX,yk+directionY)这两点到直线的

5、距离分别为:d1=|a*xk+b*yk+c+b*directionY|/sqrt(a*a + b*b);d2=|a*xk+b*yk+c+b*directionY+a*directonX|/sqrt(a*a + b*b);便于运算,定义:f(xk,yk)= d2 * d2 - d1 * d1 (将d1和d2的分母去掉了的)= a*a + *a*directonX*(a*xk+b*yk+c+b*directionY) ;当f(xk,yk)=0的时候,下一个点为(xk+directionX, yk) :f(xk+directionX, yk) = f(xk,yk) + 2*a*b*direction

6、X*directionY ;1.3截图2 中点画圆2.1基本原理:对于圆上的点,F(x, y)=0;对于圆外的点,F(x, y)0;而对于圆内的点,F(x, y) 0。假设M是P1和P2的中点,即M =(xp+1, yp-0.5)。那么,当F(M) e.getX() /获取xmin,xmax,ymin,ymax绘制剪裁矩形 xmin = e.getX(); xmax = xstart; else xmin = xstart; xmax = e.getX(); if (ystart e.getY() ymin = e.getY(); ymax = ystart; else ymin = ysta

7、rt; ymax = e.getY(); if (xmin width) xmax = width; if (ymin height) ymax = height; clip.drawRectBoth(xmin, ymin, xmax, ymax); clip.setClipRect(xmin, ymin, xmax, ymax); public void mouseMoved(MouseEvent e) void resetSize(int width, int height) /绘图面板 if (this.width = width & this.height = height) retu

8、rn; this.width = width; this.height = height; bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); g2 = (Graphics2D) bi.getGraphics(); g2.setColor(Color.white); g2.fillRect(0, 0, width, height); g2.dispose(); setSize(width, height); public void clear()/清屏 g2 = (Graphics2D) bi.getGraphi

9、cs(); g2.setColor(Color.white); g2.fillRect(0, 0, width, height); g2.dispose(); paint(getGraphics(); public void paint(Graphics g) g.drawImage(bi, 0, 0, width, height, this); public void update(Graphics g) paint(g); public void stop() public void setOperate(int op) currentOperate = op; needConnectPo

10、int = false; public void mouseClicked(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) MainFrame mf; BufferedImage bi; LineOP line; ClipOP clip; CircleOP circle; Graphics2D g2; int xstart; int ystart; int xcurrent; int ycurrent; int xend; int yend; private int xmin; private int ymin; private int xmax; private int ymax; int width = 0; int height = 0; int currentOperate = DrawLine; Color color;boolean needConnectPoint = false; public static final int DrawLine = 1;

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

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