欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    计算机图形学实验四 几何变换教材Word文件下载.docx

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

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

    计算机图形学实验四 几何变换教材Word文件下载.docx

    1、放缩变换平移变换只改变图形的位置,不改变图形的大小。旋转变换不改变图形的形状放缩变换引起图形形状的变化。复合变换结果与变换的顺序有关(矩阵乘法不可交换)二、Java3D在java3D中坐标轴的显示如下所示:Java3D的编程思想显示如下:在实验时,要引入相关的jar包,显示如下所示:实验环境硬件平台:PC机软件:Windows7平台,eclipse集成开发环境,java编程语言。 Java 3D实验步骤1. 掌握算法原理;2. 依据算法,编写源程序并进行调试;3. 对运行结果进行保存与分析;4. 把源程序以文件的形式提交;5. 按格式书写实验报告。实验内容处理点的类:package wangq

    2、ian.draw.transform;public class MyPoint private int x; private int y; public MyPoint() public MyPoint(int x, int y) super(); this.x = x; this.y = y; public int getX() return x; public void setX(int x) public int getY() return y; public void setY(int y) 三角形的变换核心代码:三角形点的录入:public void putPoint1() MyPo

    3、int point1 = new MyPoint(); point1.setX(100); point1.setY(200); pointlist.add(point1); MyPoint point2 = new MyPoint(); point2.setX(20); point2.setY(40); pointlist.add(point2); MyPoint point3 = new MyPoint(); point3.setX(160); point3.setY(100); pointlist.add(point3); MyPoint point4 = new MyPoint(); p

    4、oint4.setX(100); point4.setY(200); pointlist.add(point4);根据点画三角形:if (num = 1) for (int i = 1; i pointlist.size(); i+) / 根据给出的顶点画线 MyPoint p1 = pointlist.get(i); int x1 = p1.getX(); int y1 = p1.getY(); MyPoint p2 = pointlist.get(i - 1); int x2 = p2.getX(); int y2 = p2.getY(); g.drawLine(x1, y1, x2, y

    5、2); 三角形的缩小变换:private void changePictureSize(MyPoint unchangedpoint, double sx, double sy) for (MyPoint pb : pointlist) pb.setX(int) (pb.getX() * sx + unchangedpoint.getX() * (1 - sx); pb.setY(int) (pb.getY() * sy + unchangedpoint.getY() * (1 - sy); g.setColor(Color.BLUE); drawPicture(1);三角形关于特定直线的对称

    6、变换:private void changePictureLocation() double x1 = (pb.getY() + 2 * pb.getX() + 0.75) / 2.5; double y1 = (pb.getY() + 2 * pb.getX() - 3) / 5.0; pb.setX(int) (x1 + (x1 - pb.getX(); pb.setY(int) (y1 - (pb.getY() - y1);四边形的旋转变换:四边形点的录入和绘画同三角形四边形的旋转函数显示如下:private void spinPicture() double r; r = 15 / 1

    7、80.0 * 3.1415926;/ 旋转150 pointlist2) / 遍历多边形的顶点 double x1 = pb.getX() * Math.cos(r) - pb.getY() * Math.sin(r);/ 根据度数和顶点值来确定改变的顶点 double y1 = pb.getX() * Math.sin(r) + pb.getY() * Math.cos(r); pb.setX(int) (x1); pb.setY(int) (y1); g.setColor(Color.ORANGE); drawPicture(2);键盘的监听类: class KeyMonitor exte

    8、nds KeyAdapter public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_C:/清空画布 panel.repaint(); break; case KeyEvent.VK_1:/准备进行三角形的变换 putPoint1(); g.setColor(Color.RED); drawPicture(1); g.drawLine(0, 0, 0, 600); g.drawLine(0, 0, 600, 0); g.drawLine(-30, (int) (-63 / 4), 200, (int)

    9、 (397 / 4); case KeyEvent.VK_2:/准备进行四边形的变换 putPoint2(); g.setColor(Color.MAGENTA); drawPicture(2); case KeyEvent.VK_3: BasicConstruct bc = new BasicConstruct(); bc.addMyBox(x, y, z, bc); case KeyEvent.VK_S:/图形的缩小变换 changePictureSize(pointlist.get(0), 0.5, 0.5); case KeyEvent.VK_L:/图形的对称变换 changePict

    10、ureLocation(); case KeyEvent.VK_T:/四边形的旋转变换 spinPicture(); case KeyEvent.VK_E:/复原3D图形 x = 0.1f; y = 0.1f; z = 0.1f; case KeyEvent.VK_X:/X轴的错切变换 BasicConstruct bc0 = new BasicConstruct(); x = x + 0.1f;/x轴错切,改变x轴的比例, bc0.addMyBox(x, y, z, bc0);/长方体的绘制函数 case KeyEvent.VK_Y:/Y轴的错切变换 BasicConstruct bc1 =

    11、 new BasicConstruct(); y = y + 0.1f;/y轴错切,改变y轴的比例, bc1.addMyBox(x, y, z, bc1); case KeyEvent.VK_Z:/Z轴的错切变换 BasicConstruct bc2 = new BasicConstruct(); z = z + 0.1f;/z轴错切,改变z轴的比例, bc2.addMyBox(x, y, z, bc2); default: ; 3D图形的框架搭建/* * 绘制三维图形的类 * 里面包含了绘制长方体的方法和鼠标的监听事件 */public class BasicConstruct extend

    12、s JFrame protected SimpleUniverse simpleU; protected BranchGroup rootBranchGroup; public BasicConstruct() initial_setup(); /* * 初始化步骤 protected void initial_setup() getContentPane().setLayout(new BorderLayout();/ 得到框架和设置布局 GraphicsConfiguration config = SimpleUniverse .getPreferredConfiguration();/

    13、得到配置函数 Canvas3D canvas3D = new Canvas3D(config);/ 创建3d图形的面板 getContentPane().add(Center, canvas3D);/ 把3d图形面板添加到框架上 simpleU = new SimpleUniverse(canvas3D);/ 设置3d图形的画布形式 rootBranchGroup = new BranchGroup(); * 设置3d画布的视角以及高光等参数 public void addDirectionalLight(Vector3f direction, Color3f color) BoundingS

    14、phere bounds = new BoundingSphere(); bounds.setRadius(1000d); DirectionalLight lightD = new DirectionalLight(color, direction); lightD.setInfluencingBounds(bounds); rootBranchGroup.addChild(lightD); * 本次实验的核心函数 创建长方体的函数 需要长方体的长宽高比例以及颜色 public void addBox(float x, float y, float z, Color3f diffuse, C

    15、olor3f spec) Appearance app = new Appearance();/ 设置长方体的视角以及绘制参数 Material mat = new Material();/ 创建节点 mat.setDiffuseColor(diffuse);/ 设置长方体的轮廓颜色和表面颜色 mat.setSpecularColor(spec); mat.setShininess(5.0f);/ 超出范围则不显示 app.setMaterial(mat); Box box = new Box(x, y, z, app);/ 创建长方体 TransformGroup tg = new Tran

    16、sformGroup(); tg.addChild(box); rootBranchGroup.addChild(tg); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); /* * 创建鼠标事件,使长方体能够被移动和旋转 */ MouseRotate myMouseRotate = new MouseRotate(); myMouseRotate.setTransformGroup(tg); myMouseRotate.s

    17、etSchedulingBounds(new BoundingSphere(); rootBranchGroup.addChild(myMouseRotate); MouseTranslate myMouseTranslate = new MouseTranslate(); myMouseTranslate.setTransformGroup(tg); myMouseTranslate.setSchedulingBounds(new BoundingSphere(); rootBranchGroup.addChild(myMouseTranslate); MouseZoom myMouseZo

    18、om = new MouseZoom(); myMouseZoom.setTransformGroup(tg); myMouseZoom.setSchedulingBounds(new BoundingSphere(); rootBranchGroup.addChild(myMouseZoom); public void finalise() simpleU.addBranchGraph(rootBranchGroup); simpleU.getViewingPlatform().setNominalViewingTransform(); * 封装类需要调用的函数,主要是整合3d长方体的创建

    19、public void addMyBox(float x, float y, float z, BasicConstruct bc) bc.setSize(1024, 768); bc.addBox(x, y, z, new Color3f(1, 0, 0), new Color3f(1, 0, 0); bc.addDirectionalLight(new Vector3f(0f, 0f, -1), new Color3f(1f, 1f, 0f); bc.finalise(); bc.show(); return;实验结果本次实验中图形的变换可以通过键盘来控制。1、运行程序之后,点击“1”进入

    20、三角形的变换:2、点击“S”进行三角形的缩小变换:如上图所示,蓝色的三角形为原三角形缩小后的三角形。3、点击“L”键,进行三角形关于直线-2x+4y+3=0的对称变换:如图所示,直线上方的三角形即为关于直线对称后得到的三角形。4、点击“C”键,清空画布,进行四边形的变换:5、点击“2”键,进行四边形的变换:6、点击“T”键,进行四边形的旋转变换,旋转角度为15度:7、点击“3”查看java3D的立方体:用鼠标拖动即可对立方体进行旋转,查看其3D视图:8、点击“X”键,对立方体进行X轴方向的错切:9、点击“Y”键,对立方体进行Y轴方向的错切:10、点击“Z”键,对立方体进行Z轴方向的错切:实验总

    21、结本次实验让我了解并掌握了图形的基本几何变换,对于本次实验,有如下说明:1、 本次实验继承了JFrame,并在程序中使用了JPanel,使得画笔的获得更为方便,可直接在函数中调用声明为成员变量的画笔,从而避免了作为参数传递的麻烦。2、 本次实验中运用了tanslate(int x,int y)函数,将图形上下文的点平移到当前坐标系中的点 (x,y)。便于实验结果的观察。本次实验的不足在于:改变大小的函数,对称变换的函数以及旋转变换的函数中均存在对double类型数的取整运算,使得实验结果存在必然的误差,在改变大小以及对称变换中体现的不明显,但是在旋转变换中误差很明显:在旋转一周多时图形显示如下:由上图可以看出图形变小了。旋转多周后效果更为明显:给要进行取整运算的表达式加上0.5,这个问题仍然存在,这个旋转问题在本次实验中还没有找到更好的解决办法,希望在今后的学习中可以得到解决。指导教师意见签名: 年 月 日


    注意事项

    本文(计算机图形学实验四 几何变换教材Word文件下载.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开