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

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

?? threed.java.bck

?? 一個由c轉成java的3D robot 仿真平臺
?? BCK
字號:
/* 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.*;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;    float xmin, xmax, ymin, ymax, zmin, zmax;    Model3D (RoboProto datarob) {        mat = new Matrix3D ();        mat.xrot(20);        mat.yrot(30);	rob = datarob;	maxvert = rob.numberOfPoints;	maxcon = rob.numberOfEdges;	vert = new float[maxvert * 3];	con = new int[maxcon];	for (int i = 0; i < maxvert; i++)	  addVert((float) rob.PL[i].x, (float) rob.PL[i].y, 		  (float) rob.PL[i].z);	for (int i = 0; i < maxcon; i++)	  add((int) rob.el[i].p1, (int) rob.el[i].p2);    }      /** 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) (170*(1-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;	g.clearRect(0, 0, 499, 499);  	g.drawRect(2, 2, 490, 496);        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]);        }    }    /** 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 scalefudge = 0.5f;    Matrix3D amat = new Matrix3D(), tmat = new Matrix3D();    String message = null;     float f1 = 1, f2 = 1; //variables for the determination of the scale factor       public ThreeD(Canvas inCanvas, RoboProto dataRobot) {	// the canvas has to be 500x500 pixels large	goalCanvas = inCanvas;	rob = dataRobot;        amat.yrot(5);        amat.xrot(5);    }    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 = (prevy - y) * 360.0f / goalCanvas.size().width;        float ytheta = (x - prevx) * 360.0f / goalCanvas.size().height;	if (rob.rotateEverywhere)	  tmat.xrot(xtheta); // else this rotation is prohibited        tmat.yrot(ytheta);	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一区二区三区免费野_久草精品视频
亚洲精品老司机| 黄网站免费久久| 亚洲午夜精品一区二区三区他趣| 亚洲精品一区二区精华| 精品久久久久一区| 久久色视频免费观看| 久久婷婷国产综合精品青草| 91精彩视频在线| 欧美三级视频在线播放| 91麻豆精品国产| 日韩精品一区二区三区三区免费 | 国产精品久久夜| 欧美极品aⅴ影院| 又紧又大又爽精品一区二区| 一区二区在线看| 亚洲人快播电影网| 国产人成一区二区三区影院| 中文字幕第一区综合| 亚洲影院久久精品| 国产一区二区三区综合| 在线观看欧美日本| 欧美mv日韩mv亚洲| 亚洲免费电影在线| 六月丁香综合在线视频| av在线不卡观看免费观看| 884aa四虎影成人精品一区| 久久色在线视频| 午夜精品免费在线| 97久久超碰国产精品电影| 欧美mv日韩mv| 亚洲一二三专区| 国产91精品一区二区| 国产清纯白嫩初高生在线观看91| 精品一区二区三区影院在线午夜| 欧美日韩黄色一区二区| 亚洲精品国产精华液| 日本精品一级二级| 婷婷久久综合九色综合伊人色| 3atv一区二区三区| 韩国女主播一区二区三区| 亚洲国产精品成人综合色在线婷婷 | 91 com成人网| 亚洲二区视频在线| 色呦呦国产精品| 亚洲免费观看视频| 在线观看国产91| 一区二区三区视频在线看| 风间由美中文字幕在线看视频国产欧美| 日韩一级完整毛片| 奇米777欧美一区二区| 884aa四虎影成人精品一区| 亚洲女与黑人做爰| 一本大道综合伊人精品热热 | 国产亚洲欧美中文| 韩国精品久久久| 国产精品久久毛片| 在线一区二区视频| 亚洲午夜一区二区三区| 日韩一区二区三区高清免费看看 | 国产麻豆成人精品| 国产婷婷精品av在线| 爽好久久久欧美精品| 91精品国产综合久久香蕉的特点| 偷拍与自拍一区| 精品88久久久久88久久久| 国产在线精品一区二区夜色| 国产精品国产三级国产普通话三级 | 日韩一区二区精品葵司在线 | 粉嫩嫩av羞羞动漫久久久 | 国产成人精品三级麻豆| 欧亚洲嫩模精品一区三区| 日韩国产欧美在线观看| 欧美日韩国产中文| 成人精品免费看| 国产成人午夜精品影院观看视频 | 国产清纯白嫩初高生在线观看91 | 亚洲资源在线观看| 精品国精品自拍自在线| 欧美在线一区二区三区| 免费观看一级欧美片| 亚洲地区一二三色| 亚洲国产欧美日韩另类综合 | 日韩欧美高清一区| 欧美日韩高清一区二区三区| 91一区二区三区在线观看| 国产91精品免费| 国内精品久久久久影院薰衣草| 亚洲不卡av一区二区三区| 亚洲国产aⅴ成人精品无吗| 尤物在线观看一区| 亚洲一二三专区| 午夜日韩在线电影| 视频一区二区三区入口| 亚洲综合成人在线视频| 国内一区二区在线| 亚洲色图在线看| 欧美疯狂性受xxxxx喷水图片| 亚洲色欲色欲www在线观看| 国产精品亚洲人在线观看| 蜜桃视频在线一区| 国产精品每日更新在线播放网址| 在线视频欧美区| 久久99精品久久久久婷婷| 亚洲日本在线看| 久久久久国产精品厨房| 在线视频综合导航| 国产在线日韩欧美| 亚洲精品视频免费看| 精品国产精品网麻豆系列| 欧美日免费三级在线| av网站免费线看精品| 国产91精品在线观看| 亚洲精品久久嫩草网站秘色| 日本一二三不卡| 国产清纯在线一区二区www| 欧美一区二区三区视频在线| 97超碰欧美中文字幕| 狠狠色综合日日| 毛片av一区二区| 老汉av免费一区二区三区 | 亚洲丝袜制服诱惑| 国产精品久久久久毛片软件| 亚洲情趣在线观看| 另类小说欧美激情| 亚洲一线二线三线视频| 久久精品视频一区二区| 欧美丰满一区二区免费视频 | 精品国产一区二区三区av性色| 亚洲一区免费在线观看| 成人精品免费网站| 欧美精品一区二区高清在线观看 | 91视频一区二区三区| 亚洲一区二区三区四区在线观看| 91麻豆精品国产91久久久| 东方欧美亚洲色图在线| 亚洲综合图片区| 欧美挠脚心视频网站| 欧美精品1区2区3区| 在线观看日韩av先锋影音电影院| 99久久99久久精品免费看蜜桃| 99精品欧美一区二区三区小说| 国产iv一区二区三区| 97成人超碰视| 国产高清久久久| 91一区二区在线观看| 欧美日本乱大交xxxxx| 日韩欧美国产小视频| 国产色婷婷亚洲99精品小说| 国产精品第一页第二页第三页| 亚洲欧洲性图库| 日韩电影一区二区三区四区| 精品在线免费观看| 不卡的电影网站| 91精品午夜视频| 国产精品高潮久久久久无| 亚洲一区二区三区在线播放| 蜜臀久久久久久久| www.亚洲精品| 日韩一级黄色片| 亚洲天堂精品在线观看| 日韩av在线发布| 色偷偷久久一区二区三区| 久久九九全国免费| 久久se这里有精品| 欧美日韩一区不卡| 日韩制服丝袜av| 精品欧美乱码久久久久久| 色哟哟精品一区| 最新欧美精品一区二区三区| 国产精品一区久久久久| 精品国产一区二区亚洲人成毛片 | 美国三级日本三级久久99| 亚洲一二三区在线观看| 中文在线一区二区| 国产欧美一区二区在线观看| 精品国产自在久精品国产| 日韩女优电影在线观看| 日韩欧美一区二区三区在线| 国产成人夜色高潮福利影视| 亚洲一区二区在线播放相泽| 最新日韩在线视频| 日韩伦理av电影| ...av二区三区久久精品| 国产精品网站在线| 在线观看一区二区视频| 亚洲国产日产av| 欧美一卡二卡在线观看| 国产真实乱偷精品视频免| 久久久精品一品道一区| 成人开心网精品视频| 亚洲另类中文字| 欧美三级电影一区| 精品亚洲porn| 亚洲天堂免费看| 欧美日韩午夜在线| 国产乱一区二区| 一区二区三区成人| 日韩三级.com| 一本一道综合狠狠老| 亚洲一区二区三区精品在线|