版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、貴州大學(xué)實(shí)驗(yàn)報(bào)告學(xué)院: 計(jì)算機(jī)科學(xué)與信息學(xué)院 專業(yè):軟件工程 班級(jí): 102班姓名學(xué)號(hào)實(shí)驗(yàn)組實(shí)驗(yàn)時(shí)間指導(dǎo)教師成績(jī)實(shí)驗(yàn)項(xiàng)目名稱實(shí)驗(yàn)四 幾何變換實(shí)驗(yàn)?zāi)康恼莆斩S圖形的幾何變換的基本原理。二維圖形的基本幾何變換:位置改變(平移、旋轉(zhuǎn))和變形(縮放、錯(cuò)切,反射、投影等)以及復(fù)合變換。了解三維圖形的錯(cuò)切變換實(shí)驗(yàn)要求根據(jù)本實(shí)驗(yàn)的特點(diǎn)、要求和具體條件,掌握二維圖形的幾何變換的基本原理,了解三維圖形的錯(cuò)切變換,并成功編寫測(cè)試代碼進(jìn)行實(shí)驗(yàn)。1.設(shè)有一三角形ABC,其中三個(gè)頂點(diǎn)為A(5,10),B(1,2),C(8,5),如三角形的頂點(diǎn)A不變,將AB和AC邊縮小一倍后,求縮小后的三角形對(duì)于直線-2x+4y+3=0
2、的對(duì)稱變換后的結(jié)果圖。2將一四邊形以原點(diǎn)為中心,以15°為間隔旋轉(zhuǎn)。3.在三維坐標(biāo)中,對(duì)長(zhǎng)度為1的標(biāo)準(zhǔn)立方體做錯(cuò)切變換,錯(cuò)切單位為2;實(shí)驗(yàn)原理一、實(shí)驗(yàn)原理:標(biāo)準(zhǔn)齊次坐標(biāo)(x,y,1) 二維變換的矩陣表示平移變換旋轉(zhuǎn)變換放縮變換平移變換只改變圖形的位置,不改變圖形的大小。旋轉(zhuǎn)變換不改變圖形的形狀放縮變換引起圖形形狀的變化。復(fù)合變換結(jié)果與變換的順序有關(guān)(矩陣乘法不可交換)二、Java3D在java3D中坐標(biāo)軸的顯示如下所示:Java3D的編程思想顯示如下:在實(shí)驗(yàn)時(shí),要引入相關(guān)的jar包,顯示如下所示:實(shí)驗(yàn)環(huán)境硬件平臺(tái):PC機(jī)軟件:Windows7平臺(tái),eclipse集成開發(fā)環(huán)境,java
3、編程語(yǔ)言。 Java 3D實(shí)驗(yàn)步驟1. 掌握算法原理;2. 依據(jù)算法,編寫源程序并進(jìn)行調(diào)試;3. 對(duì)運(yùn)行結(jié)果進(jìn)行保存與分析;4. 把源程序以文件的形式提交;5. 按格式書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)內(nèi)容處理點(diǎn)的類:package wangqian.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 set
4、X(int x) this.x = x;public int getY() return y;public void setY(int y) this.y = y;三角形的變換核心代碼:三角形點(diǎn)的錄入:public void putPoint1() MyPoint 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);MyP
5、oint point3 = new MyPoint();point3.setX(160);point3.setY(100);pointlist.add(point3);MyPoint point4 = new MyPoint();point4.setX(100);point4.setY(200);pointlist.add(point4);根據(jù)點(diǎn)畫三角形:if (num = 1) for (int i = 1; i < pointlist.size(); i+) / 根據(jù)給出的頂點(diǎn)畫線MyPoint p1 = pointlist.get(i);int x1 = p1.getX();int
6、 y1 = p1.getY();MyPoint p2 = pointlist.get(i - 1);int x2 = p2.getX();int y2 = p2.getY();g.drawLine(x1, y1, x2, y2); 三角形的縮小變換:private void changePictureSize(MyPoint unchangedpoint, double sx, double sy) for (MyPoint pb : pointlist) pb.setX(int) (pb.getX() * sx + unchangedpoint.getX() * (1 - sx);pb.se
7、tY(int) (pb.getY() * sy + unchangedpoint.getY() * (1 - sy);g.setColor(Color.BLUE);drawPicture(1);三角形關(guān)于特定直線的對(duì)稱變換:private void changePictureLocation() for (MyPoint pb : pointlist) 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 +
8、(x1 - pb.getX();pb.setY(int) (y1 - (pb.getY() - y1);g.setColor(Color.BLUE);drawPicture(1);四邊形的旋轉(zhuǎn)變換:四邊形點(diǎn)的錄入和繪畫同三角形四邊形的旋轉(zhuǎn)函數(shù)顯示如下:private void spinPicture() double r;r = 15 / 180.0 * 3.1415926;/ 旋轉(zhuǎn)150for (MyPoint pb : pointlist2) / 遍歷多邊形的頂點(diǎn)double x1 = pb.getX() * Math.cos(r) - pb.getY() * Math.sin(r);/
9、根據(jù)度數(shù)和頂點(diǎn)值來確定改變的頂點(diǎn)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);鍵盤的監(jiān)聽類:class KeyMonitor extends KeyAdapter public void keyPressed(KeyEvent e) switch (e.getKeyCode() case KeyEvent.VK_C:/清空畫布panel.repaint();break
10、;case KeyEvent.VK_1:/準(zhǔn)備進(jìn)行三角形的變換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) (397 / 4);break;case KeyEvent.VK_2:/準(zhǔn)備進(jìn)行四邊形的變換putPoint2();g.setColor(Color.MAGENTA);drawPicture(2);g.drawLine(0, 0, 0, 600);g.
11、drawLine(0, 0, 600, 0);break;case KeyEvent.VK_3:BasicConstruct bc = new BasicConstruct();bc.addMyBox(x, y, z, bc);break;case KeyEvent.VK_S:/圖形的縮小變換changePictureSize(pointlist.get(0), 0.5, 0.5);break;case KeyEvent.VK_L:/圖形的對(duì)稱變換changePictureLocation();break;case KeyEvent.VK_T:/四邊形的旋轉(zhuǎn)變換spinPicture();br
12、eak;case KeyEvent.VK_E:/復(fù)原3D圖形x = 0.1f;y = 0.1f;z = 0.1f;break;case KeyEvent.VK_X:/X軸的錯(cuò)切變換BasicConstruct bc0 = new BasicConstruct();x = x + 0.1f;/x軸錯(cuò)切,改變x軸的比例,bc0.addMyBox(x, y, z, bc0);/長(zhǎng)方體的繪制函數(shù)break;case KeyEvent.VK_Y:/Y軸的錯(cuò)切變換BasicConstruct bc1 = new BasicConstruct();y = y + 0.1f;/y軸錯(cuò)切,改變y軸的比例,bc1
13、.addMyBox(x, y, z, bc1);break;case KeyEvent.VK_Z:/Z軸的錯(cuò)切變換BasicConstruct bc2 = new BasicConstruct();z = z + 0.1f;/z軸錯(cuò)切,改變z軸的比例,bc2.addMyBox(x, y, z, bc2);break;default:;3D圖形的框架搭建/* * 繪制三維圖形的類 * 里面包含了繪制長(zhǎng)方體的方法和鼠標(biāo)的監(jiān)聽事件 */public class BasicConstruct extends JFrame protected SimpleUniverse simpleU;protect
14、ed BranchGroup rootBranchGroup;public BasicConstruct() initial_setup();/* * 初始化步驟 */protected void initial_setup() getContentPane().setLayout(new BorderLayout();/ 得到框架和設(shè)置布局GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();/ 得到配置函數(shù)Canvas3D canvas3D = new Canvas3D(config);/ 創(chuàng)建3
15、d圖形的面板getContentPane().add("Center", canvas3D);/ 把3d圖形面板添加到框架上simpleU = new SimpleUniverse(canvas3D);/ 設(shè)置3d圖形的畫布形式rootBranchGroup = new BranchGroup();/* * 設(shè)置3d畫布的視角以及高光等參數(shù) */public void addDirectionalLight(Vector3f direction, Color3f color) BoundingSphere bounds = new BoundingSphere();boun
16、ds.setRadius(1000d);DirectionalLight lightD = new DirectionalLight(color, direction);lightD.setInfluencingBounds(bounds);rootBranchGroup.addChild(lightD);/* * 本次實(shí)驗(yàn)的核心函數(shù) 創(chuàng)建長(zhǎng)方體的函數(shù) 需要長(zhǎng)方體的長(zhǎng)寬高比例以及顏色 */public void addBox(float x, float y, float z, Color3f diffuse, Color3f spec) Appearance app = new Appear
17、ance();/ 設(shè)置長(zhǎng)方體的視角以及繪制參數(shù)Material mat = new Material();/ 創(chuàng)建節(jié)點(diǎn)mat.setDiffuseColor(diffuse);/ 設(shè)置長(zhǎng)方體的輪廓顏色和表面顏色mat.setSpecularColor(spec);mat.setShininess(5.0f);/ 超出范圍則不顯示app.setMaterial(mat);Box box = new Box(x, y, z, app);/ 創(chuàng)建長(zhǎng)方體TransformGroup tg = new TransformGroup();tg.addChild(box);rootBranchGroup.a
18、ddChild(tg);tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);/* * 創(chuàng)建鼠標(biāo)事件,使長(zhǎng)方體能夠被移動(dòng)和旋轉(zhuǎn) */MouseRotate myMouseRotate = new MouseRotate();myMouseRotate.setTransformGroup(tg);myMouseRotate.setSchedulingBounds(new BoundingSphere();rootBranchGroup
19、.addChild(myMouseRotate);MouseTranslate myMouseTranslate = new MouseTranslate();myMouseTranslate.setTransformGroup(tg);myMouseTranslate.setSchedulingBounds(new BoundingSphere();rootBranchGroup.addChild(myMouseTranslate);MouseZoom myMouseZoom = new MouseZoom();myMouseZoom.setTransformGroup(tg);myMous
20、eZoom.setSchedulingBounds(new BoundingSphere();rootBranchGroup.addChild(myMouseZoom);public void finalise() simpleU.addBranchGraph(rootBranchGroup);simpleU.getViewingPlatform().setNominalViewingTransform();/* * 封裝類需要調(diào)用的函數(shù),主要是整合3d長(zhǎng)方體的創(chuàng)建 */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;實(shí)驗(yàn)結(jié)果本次實(shí)驗(yàn)中圖形的變換可以通過鍵盤來控制。1、運(yùn)行程序之后,點(diǎn)擊“1”進(jìn)入三角形的變換:2、點(diǎn)擊“S”進(jìn)行三角形的縮
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)課件的種類
- 廣安職業(yè)技術(shù)學(xué)院《多孔功能材料》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南衛(wèi)生健康職業(yè)學(xué)院《規(guī)劃理論與規(guī)劃思想》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)院信息安全管理課件
- 贛南科技學(xué)院《量子力學(xué)專題分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 甘孜職業(yè)學(xué)院《巖土工程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《我儲(chǔ)蓄與商業(yè)銀行》課件
- 三年級(jí)數(shù)學(xué)上冊(cè)八認(rèn)識(shí)小數(shù)教案北師大版
- 三年級(jí)數(shù)學(xué)上冊(cè)第八單元分?jǐn)?shù)的初步認(rèn)識(shí)第3課時(shí)分?jǐn)?shù)的簡(jiǎn)單計(jì)算教案新人教版
- 三年級(jí)科學(xué)下冊(cè)第一單元植物的生長(zhǎng)變化第4課種子變成了幼苗教學(xué)材料教科版
- 上海市徐匯區(qū)上海小學(xué)二年級(jí)上冊(cè)語(yǔ)文期末考試試卷及答案
- 精密制造行業(yè)研究分析
- 心源性暈厥護(hù)理查房課件
- 2022-2023學(xué)年浙江省杭州市蕭山區(qū)五年級(jí)(上)期末科學(xué)試卷(蘇教版)
- 船舶輔機(jī):噴射泵
- 巖土工程勘察服務(wù)投標(biāo)方案(技術(shù)方案)
- 疼痛護(hù)理課件
- 副院長(zhǎng)兼總工程師的崗位說明書
- 農(nóng)民專業(yè)合作社章程參考
- 財(cái)務(wù)會(huì)計(jì)制度及核算軟件備案報(bào)告書
- 肌骨超聲簡(jiǎn)介
評(píng)論
0/150
提交評(píng)論