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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

用户坐标视图坐标Javaawt坐标概念的建立和应用.docx

1、用户坐标视图坐标Javaawt坐标概念的建立和应用实验1实验报告格式计算机图形学实验1实验报告实验题目:用户坐标、视图坐标、Java awt坐标概念的建立和应用实验内容:掌握用户坐标、视图坐标、Java awt坐标概念,掌握三类坐标的转换算法。编写自己的算法函数,并形成Java语言程序包。编写程序调用验证之。参考程序:有两个示范程序MyCanvas.java和MyLineDrawApplet.java基本概念:用户坐标:是独立于设备的逻辑坐标,可以是用户用来定义设计对象的各种坐标。视图坐标:是设备相关的坐标,随目标渲染设备不同而不同。Javaawt坐标:使用java.awt时的坐标。填充:以已

2、知的某一条线为基准,向周围区域扩展像素,然后对这些像素所在的位置进行着色。将用户坐标转换为视图坐标实际上是将用户自己设计的逻辑坐标转换为设备相关的坐标,将视图坐标转化为AWT坐标就是将视图坐标按照显示窗口的大小进行缩放。算法设计:功能:用户可根据自己输入的用户坐标,进行视图坐标与awt坐标之间的转换,反向的转换原理与正向相同。此外,该程序还可以进行图形的绘制和填充,如矩形,椭圆等图形。算法1:用户坐标向视图坐标的转换 设userMinx、userMaxx分别为用户坐标系x轴的最小值与最大值,userMiny、userMaxy分别为用户坐标系y轴的最小值与最大值;viewMinx、viewMax

3、x分别为视图坐标系x轴的最小值与最大值,viewMiny、viewMaxy分别为视图坐标系y轴的最小值与最大值。若令(userX,userY)为要转换的用户坐标,(viewX,viewY)为转换后的视图坐标。则它们之间的转换关系为:viewX=viewMinx+(userX-userMinx)/(userMaxx-userMinx)*(viewMaxx-viewMinx) ;viewY=viewMiny+(userY-userMiny)/(userMaxy-userMiny)*(viewMaxy-viewMiny) ;算法1实现如下:public double viewX(double use

4、rX) /x坐标的转换 double s=(userX-userMinx)/(userMaxx-userMinx); double t=viewMinx+s*(viewMaxx-viewMinx); /坐标的平移及压缩 return t; public double viewY(double userY) /y坐标的转换 double s=(y-userMiny)/(userMaxy-userMiny); double t=viewMiny+s*(viewMaxy-viewMiny); /坐标的平移及压缩 return t;算法2:视图坐标向awt坐标的转换若令(viewX,viewY)为视图

5、坐标,(x,y)为awt坐标,width、height分别为窗口的宽度和高度,则它们之间的转换关系为:X = viewX * width ;Y = viewY * height ;算法2实现如下:/将视图坐标系的点转换到Java AWT坐标 public int getIntX(double viewX) return (int)(windowWidth * viewX); /注意视图坐标0-1之间 public int getIntY(double viewY) return (int)(windowHeight * (1-viewY); /Y轴方向相反 算法3:绘制矩形 首先将传入的用户坐

6、标转换为awt坐标,通过对传入的坐标比较,找出矩形左上角坐标(ix0,iy0),并求出矩形的宽度width和高度height,利用Graphics类的方法drawRect(ix0,iy0,width,height)可画出矩形。算法3实现如下:public void drawRect(double x1,double y1,double x2,double y2) /从用户的点坐标转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2)?ix1:ix

7、2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1; /矩形高度 graphics.drawRect(ix0,iy0,width,height);代码:(给出主要的Java程序和注解)/文件名:MyCanvas.java/定义用户的canvas类,实现/ 从用户坐标到视图的转换/ 视图到JavaAWT坐标的转换/ 用户坐标系的二维图形的描画方法,等/用编译命令javac -d . MyCanvas.java把本文件制作成包My

8、Canvas/在调用这个包的程序里加入语句import MyCanvas.MyCanvas;package shiyan1; /制作的包名,这里包名和类名同import java.io.*;import java.applet.Applet;import java.awt.*;import java.awt.image.*;/定义canvas类public class MyCanvas extends Component public static void main(String args) Applet m = new Applet() ; m.setSize(256, 256) ; My

9、Canvas my = new MyCanvas(m) ; my.setWindow(-1,1,-1,1); /设定用户坐标系范围 my.createViewport(2) ; my.setViewport(0, 1, 0, 1) ; System.out.println(用户坐标 视图坐标 awt坐标); System.out.print(0.3+ ); double x = my.viewX(0.3) ; System.out.print(x+ ); int xx = my.getIntX(x) ; System.out.println(xx); /用户坐标系范围缺省值(-1,1,-1,1

10、) protected double userMinx=-1; /用户坐标系X轴的最小值 protected double userMaxx=1; /用户坐标系X轴的最大值 protected double userMiny=-1; /用户坐标系Y轴的最小值 protected double userMaxy=1; /用户坐标系Y轴的最大值 /视图的坐标范围缺省值(0,1,0,1) protected double viewMinx; /各视图X轴最小值的数组 protected double viewMaxx; /各视图X轴最大值的数组 protected double viewMiny;

11、/各视图Y轴最小值的数组 protected double viewMaxy; /各视图Y轴最大值的数组 final static int DefaultViewportMax=256; /缺省的视图数 protected int viewportMax=DefaultViewportMax; /最大视图数 protected int viewportNum=0; /当前视图数 protected int currentViewport=0; /当前视图的索引号 /窗口大小 final static int DefaultWindowSize=256; /缺省的窗口大小 protected i

12、nt windowWidth=DefaultWindowSize; /窗口宽度 protected int windowHeight=DefaultWindowSize; /窗口宽度 /定义Java AWT 的Graphics 和 Component protected Graphics graphics; /MyCanvas的Graphics数据类 protected Component component; /MyCanvas的component数据类 protected Color currentFrontColor=Color.white; /当前前景颜色 protected Colo

13、r currentBackColor=Color.white; /当前背景色 /构造方法 /缺省的构造方法中viewportMax=256 public MyCanvas(Component a) component=a; /设定MyCanvas类所用的Component graphics=a.getGraphics(); /设定MyCanvas类所用的graphics windowWidth=a.getSize().width; /窗口宽度 windowHeight=a.getSize().height; /窗口高度 createViewport(DefaultViewportMax); /

14、创建视图 /创建视图 private void createViewport(int max) currentViewport=0; /设定当前视图索引号 viewportMax=max; /设定视图数的最大值 viewMinx=new doubleviewportMax; /存放各视图X轴最小值 viewMaxx=new doubleviewportMax; /存放各视图X轴最大值 viewMiny=new doubleviewportMax; /存放各视图y轴最小值 viewMaxy=new doubleviewportMax; /存放各视图y轴最大值 viewMinxcurrentVie

15、wport=0.0; /设定当前视图的坐标轴范围 viewMinycurrentViewport=0.0; viewMaxxcurrentViewport=1.0; viewMaxycurrentViewport=1.0; viewportNum=1; /当前视图数 /设定用户坐标系范围 public void setWindow(double x1,double x2,double y1,double y2) userMinx=x1; /设定窗口(用户坐标系)X轴的最小值 userMaxx=x2; /设定窗口(用户坐标系)X轴的最大值 userMiny=y1; /设定窗口(用户坐标系)y轴的

16、最小值 userMaxy=y2; /设定窗口(用户坐标系)y轴的最大值 /设定视图 public void setViewport(double x1,double x2,double y1,double y2) currentViewport=viewportNum; /设定新的当前视图索引号 viewportNum+; /当前视图数加1 viewMinxcurrentViewport=x1; /存放视图的X轴最小值 viewMaxxcurrentViewport=x2; /存放视图的X轴最大值 viewMinycurrentViewport=y1; /存放视图的y轴最小值 viewMaxy

17、currentViewport=y2; /存放视图的y轴最大值 /视图复位 public void resetViewport() currentViewport=0; /当前视图索引号重归于零 viewMinxcurrentViewport=0.0; /设定当前视图的坐标轴范围 viewMinycurrentViewport=0.0; viewMaxxcurrentViewport=1.0; viewMaxycurrentViewport=1.0; viewportNum=1; /当前视图数 /将视图坐标系的点转换到Java AWT坐标 public int getIntX(double x

18、) return (int)(windowWidth * x); /注意视图坐标0-1之间 public int getIntY(double y) return (int)(windowHeight * (1-y); /Y轴方向相反 /将用户坐标的点转换到视图坐标 public double viewX(double x) double s=(x-userMinx)/(userMaxx-userMinx); double t=viewMinxcurrentViewport+s* /坐标的平移及压缩 (viewMaxxcurrentViewport-viewMinxcurrentViewpor

19、t); return t; public double viewY(double y) double s=(y-userMiny)/(userMaxy-userMiny); double t=viewMinycurrentViewport+s* /坐标的平移及压缩 (viewMaxycurrentViewport-viewMinycurrentViewport); return t; /将用户坐标的点转换到Java AWT坐标 public int getX(double x) double xx=viewX(x); /先将x转换到视图坐标 int ix=getIntX(xx); /将视图坐标

20、转换到Java AWT坐标 return ix; public int getY(double y) double yy=viewY(y); /先将y转换到视图坐标 int iy=getIntY(yy); /将视图坐标转换到Java AWT坐标 return iy; /将用户坐标系的宽度、高度值投影到Java AWT坐标 public int getDimensionX(double w) double x=viewMaxxcurrentViewport-viewMinxcurrentViewport; x*=windowWidth*w/(userMaxx-userMinx); /按比例投影,

21、经由视图坐标系 return (int)Math.abs(x); /用户坐标系可能反向 public int getDimensionY(double h) double y=viewMaxycurrentViewport-viewMinycurrentViewport; y*=windowHeight*h/(userMaxy-userMiny); /按比例投影,经由视图坐标系 return (int)Math.abs(y); /用户坐标系可能反向 /有关当前颜色的设定方法:画笔颜色、前景色、背景色 public Color getColor() return currentFrontColo

22、r; /得到当前颜色序号 public void setColor(Color c) graphics.setColor(c); /设置图形对象的颜色 currentFrontColor=c; /设定当前颜色序号 public Color getForeground() return currentFrontColor; /得到当前前景色序号 public void setForeground(Color c) component.setForeground(c); /设置前景色 currentFrontColor=c; /设定当前前景色序号 public Color getBackgroun

23、d() return currentBackColor; /得到当前背景色序号 public void setBackground(Color c) component.setBackground(c); /设置背景色 currentBackColor=c; /设定当前背景色序号 /-各类图形的描画方法- /直线画法:两点式参数 public void drawLine(double x1,double y1,double x2,double y2) /从用户的点坐标转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x

24、2); int iy2=getY(y2); graphics.drawLine(ix1,iy1,ix2,iy2); /这个方法它是怎样画直线的? /矩形画法:对角式参数 public void drawRect(double x1,double y1,double x2,double y2) /从用户的点坐标转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2)?ix1:ix2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2

25、; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1; /矩形高度 graphics.drawRect(ix0,iy0,width,height); /矩形填充 public void fillRect(double x1,double y1,double x2,double y2) /从用户的点坐标转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2

26、)?ix1:ix2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1; /矩形高度 graphics.fillRect(ix0,iy0,width,height); /填充算法如何实现? /矩形区域的清除 public void clearRect(double x1,double y1,double x2,double y2) /从用户的点坐标转换到Java AWT坐标 int ix1=getX(x1); int iy1=ge

27、tY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2)?ix1:ix2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1; /矩形高度 graphics.clearRect(ix0,iy0,width,height); /算法等同填充 /圆角矩形画法 public void drawRoundRect(double x1,double y1,double x2,d

28、ouble y2, double arcW,double arcH) /圆弧高度、圆弧宽度 /从用户坐标的点转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2)?ix1:ix2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1; /矩形高度 int iarcWidth=getDi

29、mensionX(arcW); /圆弧宽度投影到Java AWT坐标 int iarcHeight=getDimensionX(arcH); /圆弧高度投影 graphics.drawRoundRect(ix0,iy0,width,height,iarcWidth,iarcHeight); /圆角矩形填充 public void fillRoundRect(double x1,double y1,double x2,double y2, double arcW,double arcH) /圆弧高度、圆弧宽度 /从用户坐标的点转换到Java AWT坐标 int ix1=getX(x1); int iy1=getY(y1); int ix2=getX(x2); int iy2=getY(y2); int ix0=(ix1ix2)?ix1:ix2; /矩形左上角坐标 int iy0=(iy1iy2)?iy1:iy2; int width=Math.abs(ix1-ix2)+1; /矩形宽度,单位像素 int height=Math.abs(iy1-iy2)+1;

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

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