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

上传人:日度 文档编号:164131358 上传时间:2021-01-26 格式:DOC 页数:15 大小:114.50KB
返回 下载 相关 举报
用户坐标、视图坐标、Javaawt坐标概念的建立和应用_第1页
第1页 / 共15页
用户坐标、视图坐标、Javaawt坐标概念的建立和应用_第2页
第2页 / 共15页
用户坐标、视图坐标、Javaawt坐标概念的建立和应用_第3页
第3页 / 共15页
用户坐标、视图坐标、Javaawt坐标概念的建立和应用_第4页
第4页 / 共15页
用户坐标、视图坐标、Javaawt坐标概念的建立和应用_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《用户坐标、视图坐标、Javaawt坐标概念的建立和应用》由会员分享,可在线阅读,更多相关《用户坐标、视图坐标、Javaawt坐标概念的建立和应用(15页珍藏版)》请在金锄头文库上搜索。

1、实验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、viewMaxx分别为视图坐标系x轴的最小值与最大值,viewMi

3、ny、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 userX) /x坐标的转换double s=(userX

4、-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)为视图坐标,(x,y)为awt坐标,width、height分别为窗口的

5、宽度和高度,则它们之间的转换关系为: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:绘制矩形首先将传入的用户坐标转换为awt坐标,通过对传入的坐标比较,找出矩形左上角坐标(ix0,iy0)

6、,并求出矩形的宽度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:ix2;/矩形左上角坐标int iy0=(iy1iy2)?iy1:iy2;int width

7、=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把本文件制作成包MyCanvas/在调用这个包的程序里加入语句import MyCanvas.MyCanvas;packages

8、hiyan1;/制作的包名,这里包名和类名同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) ;MyCanvas my = new MyCanvas(m) ;my.setWindow(-1,1,-1,1);/设定用户

9、坐标系范围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)protected double userMinx=-1;/用户坐标系X轴的最小值protected double userMaxx=1

10、;/用户坐标系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;/各视图Y轴最小值的数组protected double viewMaxy;/各视图Y轴最大值的数组final static int DefaultViewportMa

11、x=256;/缺省的视图数 protected int viewportMax=DefaultViewportMax;/最大视图数protected int viewportNum=0;/当前视图数protected int currentViewport=0;/当前视图的索引号/窗口大小final static int DefaultWindowSize=256;/缺省的窗口大小protected int windowWidth=DefaultWindowSize;/窗口宽度protected int windowHeight=DefaultWindowSize;/窗口宽度/定义Java A

12、WT 的Graphics 和 Componentprotected Graphics graphics;/MyCanvas的Graphics数据类protected Component component;/MyCanvas的component数据类protected Color currentFrontColor=Color.white;/当前前景颜色protected Color currentBackColor=Color.white;/当前背景色/构造方法/缺省的构造方法中viewportMax=256public MyCanvas(Component a) component=a;/

13、设定MyCanvas类所用的Componentgraphics=a.getGraphics();/设定MyCanvas类所用的graphicswindowWidth=a.getSize().width;/窗口宽度windowHeight=a.getSize().height;/窗口高度createViewport(DefaultViewportMax);/创建视图/创建视图private void createViewport(int max) currentViewport=0;/设定当前视图索引号viewportMax=max;/设定视图数的最大值viewMinx=new doublevi

14、ewportMax;/存放各视图X轴最小值viewMaxx=new doubleviewportMax;/存放各视图X轴最大值viewMiny=new doubleviewportMax;/存放各视图y轴最小值viewMaxy=new doubleviewportMax;/存放各视图y轴最大值viewMinxcurrentViewport=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轴的最小值userMaxy=y2;/设定窗口(用户坐标系)y

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号