亚洲欧美第一页_禁久久精品乱码_粉嫩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);            }        }		if (rob.megaSpeed)	  {	    paintWithoutDoubleBuffering(g); // is in netscape much faster	    return;	  }        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    }    void paintWithoutDoubleBuffering(Graphics g) {	int lg = 0;        int lim = ncon;        int c[] = con;        int v[] = tvert;        if (lim <= 0 || nvert <= 0)            return;	g.setColor(new Color(200, 200, 200));	g.fillRect(0, 0, rob.canvasSize + 200, 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;                g.setColor(gr[grey]);            }           g.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;                  g.setColor(gr[grey]);		}		g.drawString(axisNames[i - lim + 3], v[p2], v[p2+1]); 	}    }	    /** 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一区二区三区免费野_久草精品视频
久久久久久久久99精品| 亚洲国产日韩综合久久精品| 亚洲欧美日韩国产成人精品影院| 自拍偷拍亚洲欧美日韩| 精品国产一区二区三区久久影院| 亚洲欧美日韩国产一区二区三区| 国产一区二区主播在线| 欧美三级电影网| 国产精品久久久久婷婷| 国产一区二区在线影院| 欧美一区二区成人| 亚洲成人1区2区| 色综合久久六月婷婷中文字幕| 久久精品这里都是精品| 久久激情五月激情| 91精品国产91热久久久做人人| 亚洲一区国产视频| 在线观看欧美精品| 自拍av一区二区三区| 国产精品99久久久久久久vr | 色狠狠av一区二区三区| 国产欧美日本一区视频| 狠狠色丁香久久婷婷综合_中| 欧美日本高清视频在线观看| 亚洲欧美日韩中文播放| 91麻豆国产福利在线观看| 国产精品免费看片| 99vv1com这只有精品| 国产精品免费丝袜| 99久久99久久精品国产片果冻| 国产欧美日韩久久| 不卡免费追剧大全电视剧网站| 日本一区二区三区国色天香| 成人午夜又粗又硬又大| |精品福利一区二区三区| av男人天堂一区| 综合分类小说区另类春色亚洲小说欧美| 国产精品 欧美精品| 国产精品久久久久毛片软件| 91视频观看免费| 国产成人在线视频免费播放| 91精品国产免费久久综合| 成人在线视频首页| a亚洲天堂av| jvid福利写真一区二区三区| 99精品国产视频| 91福利精品视频| av爱爱亚洲一区| 一本高清dvd不卡在线观看| 国产成人免费视频网站高清观看视频 | 一区二区三区中文在线| 一本大道综合伊人精品热热| 一区二区三区四区蜜桃| 欧美精品自拍偷拍| 久久草av在线| 中文字幕一区免费在线观看 | 国内精品不卡在线| 国产精品网站导航| 欧美日韩一区二区三区免费看 | 国产色一区二区| 99亚偷拍自图区亚洲| 亚洲成人黄色小说| 日韩视频中午一区| av在线免费不卡| 日韩中文字幕不卡| 国产精品乱子久久久久| 欧美性大战久久久久久久| 韩国一区二区三区| 亚洲国产精品一区二区尤物区| 日韩欧美一卡二卡| 91视频.com| 精品影视av免费| 亚洲免费观看高清完整| 欧美一级午夜免费电影| 91啪九色porn原创视频在线观看| 日本欧美一区二区在线观看| 亚洲欧洲日产国产综合网| 国产偷国产偷精品高清尤物 | 欧美一区二区三区视频在线| 波多野结衣在线一区| 午夜激情久久久| 国产精品成人网| 久久综合色一综合色88| 欧美日本免费一区二区三区| www.成人在线| 国产伦精品一区二区三区免费迷| 午夜精品福利视频网站| 国产精品国产三级国产专播品爱网 | 国产老妇另类xxxxx| 亚洲精品视频一区| 99在线精品观看| 久久久www免费人成精品| 五月天亚洲婷婷| 中文字幕va一区二区三区| 午夜久久久久久电影| 国产欧美精品在线观看| 久久婷婷一区二区三区| 欧美国产精品v| 日韩欧美一级在线播放| 欧美亚洲高清一区二区三区不卡| 成人自拍视频在线观看| 国内精品视频666| 精品在线免费观看| 蜜桃av一区二区三区电影| 亚洲成人动漫av| 一二三四区精品视频| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲国产成人av| 亚洲伦理在线精品| 亚洲视频香蕉人妖| 亚洲色图在线播放| 亚洲精品第一国产综合野| 国产精品国产三级国产aⅴ中文| 国产天堂亚洲国产碰碰| 欧美国产乱子伦 | 久久久久99精品国产片| 精品免费国产一区二区三区四区| 欧美精品aⅴ在线视频| 欧美日韩一区国产| 欧美三级三级三级爽爽爽| 欧美午夜寂寞影院| 欧美日韩综合一区| 欧美疯狂性受xxxxx喷水图片| 精品视频资源站| 欧美日韩一区在线| 日韩欧美国产一二三区| 日韩精品一区二区三区中文精品 | 麻豆成人91精品二区三区| 奇米色一区二区| 国产伦精品一区二区三区免费迷| 国产成人精品免费视频网站| 成人性生交大片免费看中文网站| 成人毛片视频在线观看| eeuss影院一区二区三区| 日本精品视频一区二区| 在线播放视频一区| 精品久久久久久久久久久久包黑料| 精品国产凹凸成av人导航| 日本一区二区三区视频视频| 亚洲男女毛片无遮挡| 无吗不卡中文字幕| 国内成+人亚洲+欧美+综合在线| 91蜜桃婷婷狠狠久久综合9色| 国产91精品久久久久久久网曝门| 日本一二三四高清不卡| 亚洲免费视频中文字幕| 亚洲在线免费播放| 国产麻豆日韩欧美久久| 欧美午夜一区二区三区| 7777女厕盗摄久久久| 国产欧美日产一区| 亚洲乱码一区二区三区在线观看| 国产精品乱码妇女bbbb| 亚洲第一综合色| 欧美日韩在线一区二区| 天堂精品中文字幕在线| 亚洲一区二区三区中文字幕 | 视频一区二区三区在线| 成人晚上爱看视频| 欧美猛男gaygay网站| 欧美激情一区不卡| 美腿丝袜亚洲三区| 色综合久久久久| 久久久久久免费网| 亚洲成av人片一区二区梦乃| 丁香婷婷综合激情五月色| 欧美日韩电影在线| 《视频一区视频二区| 精品一区二区三区在线播放视频 | 日韩视频在线观看一区二区| 午夜一区二区三区在线观看| 久久精品亚洲精品国产欧美| 精品国产乱码91久久久久久网站| 亚洲欧美成aⅴ人在线观看| 久久国产精品一区二区| 欧美色网站导航| 国产精品毛片a∨一区二区三区| 美腿丝袜一区二区三区| 欧美色图一区二区三区| 日韩码欧中文字| 懂色av一区二区夜夜嗨| 久久网站热最新地址| 欧美aaa在线| 91精品婷婷国产综合久久| 亚洲综合区在线| 99riav一区二区三区| 久久综合色8888| 美女视频一区二区| 91.com在线观看| 亚洲小少妇裸体bbw| 91片在线免费观看| 亚洲免费av高清| 色8久久人人97超碰香蕉987| 一区二区三区四区蜜桃| 99精品热视频| 亚洲视频一区二区在线| www.av精品| 一区二区三区在线视频免费| 99久久99久久精品免费看蜜桃| 国产精品久久夜|