亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? threed.java

?? 一個由c轉成java的3D robot 仿真平臺
?? JAVA
字號:
/* A set of classes to parse, represent and display 3D wireframe models   represented in Wavefront .obj format. *//* I adapted this program, so that it doesn't read in a file any more, but   gets the vertices and connections directly by an instance of the 'RoboProto'   class. The orignal program is from the book 'Hooked on Java'.*/package RoboPackII;import java.applet.Applet;import java.awt.Graphics;import java.awt.Color;import java.awt.Event;import java.awt.Image;import java.awt.*;class FileFormatException extends Exception {    public FileFormatException(String s) {        super(s);    }}/** The representation of a 3D model */class Model3D {    float[] vert;    int tvert[];    int nvert = 0, maxvert;    int[] con;    int ncon = 0, maxcon;    boolean transformed;    Matrix3D mat;    RoboProto rob;    Image offscreen;  // to double-buffer the image      float xmin, xmax, ymin, ymax, zmin, zmax;    Model3D (RoboProto datarob) {        mat = new Matrix3D ();        rob = datarob;	offscreen = rob.roboCanvas.createImage(rob.canvasSize, rob.canvasSize);		maxvert = rob.numberOfPoints + 4;// 4 vert. for the coodinates system	maxcon = rob.numberOfEdges + 3;  // 3 connections for the --"--"--	vert = new float[maxvert * 3];	con = new int[maxcon];	for (int i = 0; i < rob.numberOfPoints; i++)	  addVert((float) rob.PL[i].x, (float) rob.PL[i].y, 		  (float) rob.PL[i].z);	addVert(-15.0f, 0.0f, 0.0f);// my coordinates system origin	addVert(-12.0f, 0.0f, 0.0f);//point on the x-axis	addVert(-15.0f, 3.0f, 0.0f);//point on the y-axis	addVert(-15.0f, 0.0f, 3.0f);//point on the z-axis	for (int i = 0; i < rob.numberOfEdges; i++)	  add((int) rob.el[i].p1, (int) rob.el[i].p2);	add(rob.numberOfPoints, rob.numberOfPoints + 1);//connects the origin						// and the point on the x-axis	add(rob.numberOfPoints, rob.numberOfPoints + 2);//connects the origin						// and the point on the y-axis	add(rob.numberOfPoints, rob.numberOfPoints + 3);//connects the origin						// and the point on the z-axis    }      /** Add a vertex to this model */    int addVert(float x, float y, float z) {        int i = nvert;        if (i >= maxvert)            if (vert == null) {                maxvert = 100;                vert = new float[maxvert * 3];            } else {                maxvert *= 2;                float nv[] = new float[maxvert * 3];                System.arraycopy(vert, 0, nv, 0, vert.length);                vert = nv;            }        i *= 3;        vert[i] = x;        vert[i + 1] = y;        vert[i + 2] = z;        return nvert++;    }    /** Add a line from vertex p1 to vertex p2 */    void add(int p1, int p2) {        int i = ncon;        if (p1 >= nvert || p2 >= nvert)            return;        if (i >= maxcon)            if (con == null) {                maxcon = 100;                con = new int[maxcon];            } else {                maxcon *= 2;                int nv[] = new int[maxcon];                System.arraycopy(con, 0, nv, 0, con.length);                con = nv;            }        if (p1 > p2) {            int t = p1;            p1 = p2;            p2 = t;        }        con[i] = (p1 << 16) | p2;        ncon = i + 1;    }      /** Transform all the points in this model */    void transform() {        if (transformed || nvert <= 0)            return;        if (tvert == null || tvert.length < nvert * 3)            tvert = new int[nvert*3];        mat.transform(vert, tvert, nvert);        transformed = true;    }    private void sort(int lo0, int hi0) {        int a[] = con;        int lo = lo0;        int hi = hi0;        if (lo >= hi)            return;        int mid = a[(lo + hi) / 2];        while (lo < hi) {            while (lo < hi && a[lo] < mid) {                lo++;            }            while (lo < hi && a[hi] >= mid) {                hi--;            }            if (lo < hi) {                int T = a[lo];                a[lo] = a[hi];                a[hi] = T;            }        }        if (hi < lo) {            int T = hi;            hi = lo;            lo = T;        }        sort(lo0, lo);        sort(lo == lo0 ? lo + 1 : lo, hi0);    }    /** eliminate duplicate lines */    void compress() {        int limit = ncon;        int c[] = con;        sort(0, ncon - 1);        int d = 0;        int pp1 = -1;        for (int i = 0; i < limit; i++) {            int p1 = c[i];            if (pp1 != p1) {                c[d] = p1;                d++;            }            pp1 = p1;        }        ncon = d;    }    static Color gr[];    /** Paint this model to a graphics context.  It uses the matrix associated        with this model to map from model space to screen space.         The next version of the browser should have double buffering,        which will make this *much* nicer */    void paint(Graphics g) {	        if (vert == null || nvert <= 0)            return;        transform();        if (gr == null) {            gr = new Color[16];            for (int i = 0; i < 16; i++) {                int grey = (int) (100*Math.pow(i/15.0, 2.3));                gr[i] = new Color(grey, grey, grey);            }        }		int lg = 0;        int lim = ncon;        int c[] = con;        int v[] = tvert;        if (lim <= 0 || nvert <= 0)            return;	Graphics offscreenG = offscreen.getGraphics();// for double-buffering		offscreenG.setColor(new Color(200, 200, 200));	offscreenG.fillRect(0, 0, rob.canvasSize + 10, rob.canvasSize + 100);	for (int i = 0; i < lim; i++) {            int T = c[i];            int p1 = ((T >> 16) & 0xFFFF) * 3;            int p2 = (T & 0xFFFF) * 3;            int grey = v[p1 + 2] + v[p2 + 2];            if (grey < 0)                grey = 0;            if (grey > 15)                grey = 15;            if (grey != lg) {                lg = grey;                offscreenG.setColor(gr[grey]);            }           offscreenG.drawLine(v[p1], v[p1 + 1],                                v[p2], v[p2 + 1]);        }	String[] axisNames = { "x", "y", "z" };	for (int i = lim - 3; i < lim; i++) {		// the axis names are painted 		int T = c[i];       		int p1 = ((T >> 16) & 0xFFFF) * 3;       		int p2 = (T & 0xFFFF) * 3;                int grey = v[p1 + 2] + v[p2 + 2];                if (grey < 0)                  grey = 0;                if (grey > 15)                  grey = 15;                if (grey != lg) {                  lg = grey;                  offscreenG.setColor(gr[grey]);		}		offscreenG.drawString(axisNames[i - lim + 3], v[p2], v[p2+1]); 	}	g.drawImage(offscreen, 0, 0, rob.roboCanvas);// the completed image is				  	       // copied to the screen at once    }    /** Find the bounding box of this model */    void findBB() {        if (nvert <= 0)            return;        float v[] = vert;        float xmin = v[0], xmax = xmin;        float ymin = v[1], ymax = ymin;        float zmin = v[2], zmax = zmin;        for (int i = nvert * 3; (i -= 3) > 0;) {            float x = v[i];            if (x < xmin)                xmin = x;            if (x > xmax)                xmax = x;            float y = v[i + 1];            if (y < ymin)                ymin = y;            if (y > ymax)                ymax = y;            float z = v[i + 2];            if (z < zmin)                zmin = z;            if (z > zmax)                zmax = z;        }        this.xmax = xmax;        this.xmin = xmin;        this.ymax = ymax;        this.ymin = ymin;        this.zmax = zmax;        this.zmin = zmin;    }}/** A class to put a 3D model into a page */class ThreeD implements Runnable {    Canvas goalCanvas;  // the wireframe gets painted into this canvas    RoboProto rob; // 'rob' is needed as a reference for 'Model3D'    Model3D md;    boolean painted = true;    float xfac;    int prevx, prevy;    float xtheta, ytheta;    float axtheta = 0.0f, aytheta = 0.0f;    float scalefudge = 0.5f;    Matrix3D amat = new Matrix3D(), tmat = new Matrix3D();    String message = null;     float f1 = 1, f2 = 1; //variables for the calculation of the scale factor       public ThreeD(Canvas inCanvas, RoboProto dataRobot) {	// the canvas has to be 500x500 pixels large	goalCanvas = inCanvas;	rob = dataRobot;		axtheta = 21.0f;	tmat.yrot(ytheta);        tmat.xrot(axtheta);	amat.mult(tmat);        if (painted) {            painted = false;            this.repaint();	}    }    public void setScale(float newScale) {	if (newScale > 0) {	  scalefudge = newScale;   	  xfac = 0.7f * (f1 < f2 ? f1 : f2) * scalefudge;	}    }    public void run() {        try {            Thread.currentThread().setPriority(Thread.MIN_PRIORITY);            Model3D m = new Model3D (rob);            md = m;            m.findBB();            m.compress();         	    float xw = m.xmax - m.xmin;            float yw = m.ymax - m.ymin;            float zw = m.zmax - m.zmin;            if (yw > xw)                xw = yw;            if (zw > xw)                xw = zw;            f1 = goalCanvas.size().width / xw; // the model gets adapted             f2 = goalCanvas.size().height / xw;// to the canvas size            xfac = 0.7f * (f1 < f2 ? f1 : f2) * scalefudge;        } catch(Exception e) {          md = null;          message = e.toString();        }	this.repaint();    }    public void start() {        if (md == null && message == null)          {	    new Thread(this).start();	    repaint();	  }    }    public void stop() {    }    public void setVert(int no, Points newCoordinates){	if ((no >= 0) && (no < rob.numberOfPoints))	  {	    md.vert[3 * no] = (float)newCoordinates.x;	    md.vert[3 * no + 1] = (float)newCoordinates.y;	    md.vert[3 * no + 2] = (float)newCoordinates.z;	    md.transformed = false;	  }    }    public boolean mouseDown(Event e, int x, int y) {        prevx = x;        prevy = y;        return true;    }    public boolean mouseDrag(Event e, int x, int y) {        tmat.unit();        float xtheta = (y - prevy) *  90.0f / goalCanvas.size().height;	float ytheta = (prevx - x) * 180.0f / goalCanvas.size().width;        tmat.xrot(-axtheta);        if (axtheta + xtheta < 0.0)  	  axtheta = 0.0f;        else if (axtheta + xtheta > 90.0)	       axtheta = 90.0f;             else axtheta += xtheta;	tmat.yrot(ytheta);        tmat.xrot(axtheta);	amat.mult(tmat);        if (painted) {            painted = false;            this.repaint();        }        prevx = x;        prevy = y;        return true;    }    public void repaint() {	this.paint(goalCanvas.getGraphics());    }    public void paint(Graphics g) {	// this g is the graphics of the canvas        if (md != null) {            md.mat.unit();            md.mat.translate(-(md.xmin + md.xmax) / 2,                             -(md.ymin + md.ymax) / 2,                             -(md.zmin + md.zmax) / 2);            md.mat.mult(amat);            md.mat.scale(xfac, -xfac, 16 * xfac / goalCanvas.size().width);            md.mat.translate(goalCanvas.size().width / 2,			     goalCanvas.size().height / 2, 8);            md.transformed = false;            md.paint(g);            setPainted();        } else if (message != null) {            g.drawString("Error in model:", 3, 20);            g.drawString(message, 10, 40);        }    }    private synchronized void setPainted() {        painted = true;        notifyAll();    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲6080在线| 欧美一区二区三区四区在线观看| 色一情一乱一乱一91av| 日韩欧美国产一区在线观看| 亚洲视频精选在线| 国产激情精品久久久第一区二区| 精品视频一区二区不卡| 国产精品传媒在线| 久久精品国产色蜜蜜麻豆| 91成人网在线| 亚洲欧洲日本在线| 粉嫩av一区二区三区粉嫩| 欧美一区在线视频| 一区二区激情视频| 成人午夜免费av| 久久久久久亚洲综合| 五月激情丁香一区二区三区| 色94色欧美sute亚洲13| 中文字幕乱码久久午夜不卡| 国产一区二区三区在线观看免费视频 | 亚洲日穴在线视频| 国产精品99久久久久久似苏梦涵 | 精品国产91洋老外米糕| 亚洲综合在线视频| 91美女精品福利| 18涩涩午夜精品.www| 国产黄色精品视频| 欧美激情一二三区| 国产精品素人一区二区| aaa国产一区| 国产亚洲综合色| 韩日精品视频一区| 日韩欧美国产综合| 精品一区二区在线播放| 欧美成人精品二区三区99精品| 日韩av成人高清| 欧美一区二区国产| 蜜桃视频第一区免费观看| 欧美一级黄色大片| 久久精品久久99精品久久| 91精品国产综合久久久蜜臀粉嫩 | 成人综合在线观看| 欧美激情中文不卡| 99麻豆久久久国产精品免费 | 久久精品亚洲乱码伦伦中文| 国产在线播精品第三| 国产欧美日韩麻豆91| caoporn国产一区二区| 亚洲人成网站色在线观看| 一本一本久久a久久精品综合麻豆| 亚洲日本va午夜在线影院| 色中色一区二区| 天堂成人国产精品一区| 精品久久一区二区| 东方欧美亚洲色图在线| 成人欧美一区二区三区视频网页| 一本久道中文字幕精品亚洲嫩| 亚洲影视在线观看| 欧美一二三在线| 成人午夜在线播放| 亚洲一区二区av在线| 日韩三区在线观看| 日韩一区二区免费电影| 色婷婷狠狠综合| 亚洲高清免费一级二级三级| 制服.丝袜.亚洲.另类.中文| 精品亚洲欧美一区| 亚洲欧洲国产日本综合| 欧美乱妇23p| 国产精品一区二区久久精品爱涩| 最新热久久免费视频| 91精品久久久久久久99蜜桃| 国产剧情一区二区三区| 亚洲影院久久精品| 国产亚洲短视频| 欧美日韩不卡一区二区| 国产 日韩 欧美大片| 亚洲大尺度视频在线观看| 久久夜色精品国产噜噜av| 91老师国产黑色丝袜在线| 日产精品久久久久久久性色| 国产欧美一区二区三区在线老狼| 欧美日韩一级二级三级| 成人av动漫网站| 久久国产人妖系列| 亚洲午夜一二三区视频| 中文字幕不卡在线播放| 欧美一级艳片视频免费观看| 成人激情免费视频| 久久国产欧美日韩精品| 午夜久久久久久| 亚洲欧美日韩成人高清在线一区| 国产夜色精品一区二区av| 91精品欧美一区二区三区综合在| 国产成人午夜精品5599| 天天操天天综合网| 亚洲最新视频在线观看| 中文字幕 久热精品 视频在线| 日韩一区二区在线观看| 在线中文字幕一区| 91色在线porny| 成人精品亚洲人成在线| 国产成人精品免费网站| 久久狠狠亚洲综合| 蜜桃视频在线一区| 日韩二区三区在线观看| 亚洲gay无套男同| 一区av在线播放| 亚洲精品中文在线观看| 国产精品欧美一区二区三区| 久久免费午夜影院| 26uuu久久天堂性欧美| 日韩欧美二区三区| 91精品婷婷国产综合久久 | 亚洲精品第一国产综合野| 国产色婷婷亚洲99精品小说| 久久综合九色欧美综合狠狠 | 欧美日韩你懂得| 欧美亚洲禁片免费| 欧美日韩一区在线| 欧美日韩第一区日日骚| 欧美日产在线观看| 制服丝袜亚洲精品中文字幕| 欧美久久一二区| 日韩一级成人av| 精品日韩欧美在线| 国产欧美精品国产国产专区| 欧美韩国日本不卡| 亚洲桃色在线一区| 又紧又大又爽精品一区二区| 亚洲影视在线观看| 另类中文字幕网| 国产麻豆精品一区二区| 成人免费电影视频| 欧美在线一二三四区| 91精品国产综合久久久蜜臀图片| 日韩欧美一二区| 久久久综合激的五月天| 国产精品电影一区二区三区| 一区二区三区免费在线观看| 亚洲电影你懂得| 久久国产精品色| www.色精品| 欧美日韩亚洲另类| 久久久久久久久久久99999| 国产精品每日更新| 亚洲国产精品久久不卡毛片| 久久99国产乱子伦精品免费| 成人sese在线| 欧美精品第1页| 久久久国产精品麻豆| 一区二区在线观看视频| 午夜精品一区在线观看| 国产黄人亚洲片| 欧美三级中文字幕| 欧美国产精品劲爆| 亚洲18影院在线观看| 国产精品一二三四区| 欧美亚洲国产bt| 国产欧美一区二区三区沐欲| 亚洲精品日产精品乱码不卡| 日本不卡的三区四区五区| 成人一级黄色片| 91精品久久久久久蜜臀| 国产精品国产自产拍高清av王其 | 色综合久久久网| 精品少妇一区二区三区在线播放| 亚洲素人一区二区| 久久成人免费网站| 欧美天堂一区二区三区| 欧美国产欧美综合| 国产不卡视频一区二区三区| 亚洲色欲色欲www| 日韩欧美国产不卡| 亚洲另类色综合网站| 国产精品一区二区三区99| 在线播放亚洲一区| 久久综合九色综合97_久久久| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲国产欧美一区二区三区丁香婷| 粉嫩一区二区三区在线看| 91精品国产色综合久久久蜜香臀| 亚洲另类在线一区| 成人18视频在线播放| 久久先锋资源网| 日韩av电影免费观看高清完整版 | 色综合色狠狠天天综合色| 久久中文字幕电影| 精品国产免费人成电影在线观看四季| 蜜桃精品视频在线观看| 97精品国产97久久久久久久久久久久| 欧美大度的电影原声| 香蕉久久一区二区不卡无毒影院 | 欧美亚洲一区二区在线观看| 国产精品色婷婷久久58| 国产精品主播直播| 久久综合资源网| 精品一区二区三区久久| 日韩欧美资源站| 奇米888四色在线精品|