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

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

?? polyhedralboundedsolidsplitter.java

?? 基于java的3d開發庫。對坐java3d的朋友有很大的幫助。
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
        ArrayList<_PolyhedralBoundedSolidSplitterSectorClassification> nbr,        PolyhedralBoundedSolid inSolid, InfinitePlane inSplittingPlane)    {        int start, i;        _PolyhedralBoundedSolidHalfEdge head, tail;        _PolyhedralBoundedSolidSplitterSectorClassification n;        int nnbr = nbr.size();        if ( nnbr <= 0 ) return;        n = nbr.get(0);        //- Locate the head of an ABOVE-sequence --------------------------        i = 0;        while ( !( nbr.get(i).cl == n.BELOW &&                   nbr.get( (i+1)%nnbr ).cl == n.ABOVE )  ) {            i++;            if ( i >= nnbr ) {                return;            }        }        start = i;        head = nbr.get(i).sector;        //-----------------------------------------------------------------        while ( true ) {            //- Locate the final sector of the sequence ------------------            while ( !( nbr.get(i).cl == n.ABOVE &&                       nbr.get( (i+1)%nnbr ).cl == n.BELOW ) ) {                i = (i+1) % nnbr;            }            tail = nbr.get(i).sector;            //- Insert null edge -----------------------------------------            int d1;            d1 = inSplittingPlane.doContainmentTestHalfSpace(head.next().startingVertex.position, VSDK.EPSILON);            //System.out.println("LMEV:");            if ( d1 != inSplittingPlane.OUTSIDE ) {                //System.out.println("  - H1: " + tail);                //System.out.println("  - H2: " + head);                inSolid.lmev(tail, head, inSolid.getMaxVertexId()+1, head.startingVertex.position);                sone.add(new _PolyhedralBoundedSolidSplitterNullEdge(tail.previous().parentEdge));            }            else {                //System.out.println("  - H1: " + head);                //System.out.println("  - H2: " + tail);                inSolid.lmev(head, tail, inSolid.getMaxVertexId()+1, head.startingVertex.position);                sone.add(new _PolyhedralBoundedSolidSplitterNullEdge(head.previous().parentEdge));            }            //- Locate the start of the next sequence --------------------            while ( !( nbr.get(i).cl == n.BELOW &&                       nbr.get( (i+1) % nnbr ).cl == n.ABOVE ) ) {                i = (i+1) % nnbr;                if ( i == start ) {                    return;                }            }        }    }    /**    Vertex neighborhood classifier, as presented in section [MANT1988].14.5,    and program 14.3.    It appears that original algorithm from [MANT1988] assumes a left handed    geometry or orientation or other difference to current Vitral SDK    implementation of the boundary representation. That difference implies    a reverse order in some cases, so `inplaneEdgesOn` check is added here    to keep current implementation's consistency.    */    private static void splitClassify(PolyhedralBoundedSolid inSolid, InfinitePlane inSplittingPlane)    {        int i;        sone = new ArrayList<_PolyhedralBoundedSolidSplitterNullEdge>();        /// Following variable `nbr` from program [MANT1988].14.3.        ArrayList<_PolyhedralBoundedSolidSplitterSectorClassification> nbr;        for ( i = 0; i < soov.size(); i++ ) {            nbr = getNeighborhood(soov.get(i), inSplittingPlane);            if ( inplaneEdgesOn(nbr) ) {                Collections.reverse(nbr);            }            reclassifyOnSectors(nbr, inSplittingPlane);            reclassifyOnEdges(nbr);            insertNullEdges(nbr, inSolid, inSplittingPlane);        }    }    /**    Following section [MANT1988].14.7.2. and program [MANT1988].14.9.    */    private static _PolyhedralBoundedSolidHalfEdge    canJoin(_PolyhedralBoundedSolidHalfEdge he)    {        _PolyhedralBoundedSolidHalfEdge ret;        int i;        for ( i = 0; i < ends.size(); i++ ) {            if ( neighbor(he, ends.get(i)) ) {                ret = ends.get(i);                ends.remove(i);                tieds.add(ret);                return ret;            }        }        ends.add(he);        return null;    }    private static void printNbr(ArrayList<_PolyhedralBoundedSolidSplitterSectorClassification> neighborSectorsInfo)    {        int i;        for ( i = 0; i < neighborSectorsInfo.size(); i++ ) {            System.out.println("  - " + neighborSectorsInfo.get(i));        }    }    private static void printEnds()    {        int i;        for ( i = 0; i < ends.size(); i++ ) {            System.out.println("  - ends[" + i + "]: " + ends.get(i));        }    }    /**    Following section [MANT1988].14.7.2. and program [MANT1988].14.10.    */    private static void cut(_PolyhedralBoundedSolidHalfEdge he)    {        PolyhedralBoundedSolid s;        s = he.parentLoop.parentFace.parentSolid;        if ( he.parentEdge.rightHalf.parentLoop ==             he.parentEdge.leftHalf.parentLoop ) {            sonf.add(he.parentLoop.parentFace);            s.lkemr(he.parentEdge.rightHalf, he.parentEdge.leftHalf);        }        else {            s.lkef(he.parentEdge.rightHalf, he.parentEdge.leftHalf);        }    }    /**    */    private static boolean isLoose(_PolyhedralBoundedSolidHalfEdge he)    {        int i;        for ( i = 0; i < tieds.size(); i++ ) {            if ( he == tieds.get(i) ) return false;        }        return true;    }    /**    Following section [MANT1988].14.7.2. and program [MANT1988].14.9.    */    private static void splitConnect()    {                int i;        ends = new ArrayList<_PolyhedralBoundedSolidHalfEdge>();        tieds = new ArrayList<_PolyhedralBoundedSolidHalfEdge>();        //-----------------------------------------------------------------        _PolyhedralBoundedSolidEdge nextedge;        _PolyhedralBoundedSolidHalfEdge h1, h2;        sonf = new ArrayList<_PolyhedralBoundedSolidFace>();        Collections.sort(sone);        //System.out.println(sone.get(0).e.rightHalf.parentLoop.parentFace.parentSolid);        for ( i = 0; i < sone.size(); i++ ) {            //System.out.println("- " + i + " ---------------------------------------------------------------------");            //System.out.println(" - " + sone.get(i).e + " / " + sone.get(i).e.rightHalf.startingVertex.position);            nextedge = sone.get(i).e;            //System.out.println("    . edge.rightHalf: " + nextedge.rightHalf);            h1 = canJoin(nextedge.rightHalf);            //System.out.println("    . h1: " + h1);            if ( h1 != null ) {                //System.out.println("    . -> JOIN H1");                join(h1, nextedge.rightHalf, false);                tieds.add(nextedge.rightHalf);                if ( !isLoose(h1.mirrorHalfEdge()) ) {                    //System.out.println("    . -> CUT H1");                    cut(h1);                }            }            //System.out.println("    . edge.leftHalf: " + nextedge.leftHalf);            h2 = canJoin(nextedge.leftHalf);            //System.out.println("    . h2: " + h2);            if ( h2 != null ) {                //System.out.println("    . -> JOIN H2");                join(h2, nextedge.leftHalf, false);                tieds.add(nextedge.leftHalf);                if ( !isLoose(h2.mirrorHalfEdge()) ) {                    //System.out.println("    . -> CUT H2");                    cut(h2);                }            }            if ( h1 != null && h2 != null ) {                //System.out.println("    . -> CUT DUAL");                cut(nextedge.rightHalf);            }            //printEnds();        }    }    /**    Following section [MANT1988].14.8. and program [MANT1988].14.12.    */    private static void classify(PolyhedralBoundedSolid S,                                 PolyhedralBoundedSolid Above,                                 PolyhedralBoundedSolid Below)    {        int i;        facesToFixAbove = new ArrayList<_PolyhedralBoundedSolidFace>();        facesToFixBelow = new ArrayList<_PolyhedralBoundedSolidFace>();        for ( i = 0; i < sonf.size()/2; i++ ) {            movefac(sonf.get(i), Above);            facesToFixAbove.add(sonf.get(i));            movefac(sonf.get(i+sonf.size()/2), Below);            facesToFixBelow.add(sonf.get(i+sonf.size()/2));        }    }    private static boolean isNullFace(_PolyhedralBoundedSolidFace f)    {        int i;        for ( i = 0; i < sonf.size(); i++ ) {            if ( sonf.get(i) == f ) return true;        }        return false;    }    /**    */    private static void destroy(PolyhedralBoundedSolid inSolid)    {        inSolid.polygonsList =            new CircularDoubleLinkedList<_PolyhedralBoundedSolidFace>();        inSolid.edgesList =            new CircularDoubleLinkedList<_PolyhedralBoundedSolidEdge>();        inSolid.verticesList =            new CircularDoubleLinkedList<_PolyhedralBoundedSolidVertex>();    }    /**    A face `a` is "inside" other `b` (and should be an internal loop) if    all vertices from `b` are inside the polygon of `a`.    PRE: given faces are coplanar.    */    private static boolean faceInsideFace(        _PolyhedralBoundedSolidFace a, _PolyhedralBoundedSolidFace b)    {        int i;        _PolyhedralBoundedSolidLoop l;        _PolyhedralBoundedSolidHalfEdge he, heStart;        a.calculatePlane();        for ( i = 0; i < b.boundariesList.size(); i++ ) {            heStart = b.boundariesList.get(i).boundaryStartHalfEdge;            he = heStart;            do {                if ( a.testPointInside(he.startingVertex.position, VSDK.EPSILON) == Geometry.OUTSIDE ) {                    return false;                }                he = he.next();            } while ( he != heStart );        }        return true;    }    /**    */    private static void fixNullFaces(ArrayList<_PolyhedralBoundedSolidFace> l)    {        if ( l.size() == 1 ) {            l.remove(0);            return;        }        int i, j;        for ( i = 0; i < l.size(); i++ ) {            for ( j = 0; j < l.size(); j++ ) {                if ( i == j ) continue;                if ( faceInsideFace(l.get(j), l.get(i) ) ) {                    l.get(i).parentSolid.lkfmrh(l.get(i), l.get(j));                    l.remove(j);                    // Repeat he process with remaining list                    fixNullFaces(l);                    return;                }            }        }    }    /**    Following section [MANT1988].14.8. and program [MANT1988].14.11.    */    private static void splitFinish(PolyhedralBoundedSolid inSolid,                             ArrayList<PolyhedralBoundedSolid> outSolidsAbove,                             ArrayList<PolyhedralBoundedSolid> outSolidsBelow)    {        int i;        int firstHalfSize;        _PolyhedralBoundedSolidFace newface;        PolyhedralBoundedSolid newAbove, newBelow;        firstHalfSize = sonf.size();        for ( i = 0; i < firstHalfSize; i++ ) {            newface = inSolid.lmfkrh(sonf.get(i).boundariesList.get(1), inSolid.getMaxFaceId()+1);            sonf.add(newface);        }        newAbove = new PolyhedralBoundedSolid();        newBelow = new PolyhedralBoundedSolid();        classify(inSolid, newAbove, newBelow);        fixNullFaces(facesToFixAbove);        fixNullFaces(facesToFixBelow);        cleanup(newAbove);        newAbove.validateModel();        cleanup(newBelow);        newBelow.validateModel();        outSolidsAbove.add(newAbove);        outSolidsBelow.add(newBelow);        destroy(inSolid);    }    /**    Given the input `inSolid` and the cutting plane `inSplittingPlane`,    this method appends to the `outSolidsAbove` list the solids resulting    from cutting the solid with the plane and resulting above the plane,    similarly, `outSolidsBelow` will be appended with solid pieces    resulting below the plane.    Current macro-algorithm follows the strategy outlined on sections    [MANT1988].14.1, [MANT1988].14.2 and [MANT1988].14.3 and program    [MANT1988].14.1.    */    public static void split(                      PolyhedralBoundedSolid inSolid,                      InfinitePlane inSplittingPlane,                      ArrayList<PolyhedralBoundedSolid> outSolidsAbove,                      ArrayList<PolyhedralBoundedSolid> outSolidsBelow)    {        //-----------------------------------------------------------------        inSolid.validateModel();        splitGenerate(inSolid, inSplittingPlane);        splitClassify(inSolid, inSplittingPlane);        if ( sone.size() <= 0 ) {            // Plane should be tested here before asuming this order!            outSolidsAbove.add(inSolid);            outSolidsBelow.add(new PolyhedralBoundedSolid());            return;        }        splitConnect();        splitFinish(inSolid, outSolidsAbove, outSolidsBelow);        //-----------------------------------------------------------------        soov = null;        sone = null;        sonf = null;    }}//===========================================================================//= EOF                                                                     =//===========================================================================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看91av| 91精品午夜视频| 国产精品亚洲一区二区三区妖精 | 国产欧美日韩在线看| 2022国产精品视频| 国产婷婷色一区二区三区在线| www一区二区| 久久免费偷拍视频| 国产精品三级av| 亚洲精品自拍动漫在线| 亚洲一线二线三线久久久| 一个色综合网站| 免费观看91视频大全| 国产传媒一区在线| 99久久久久久| 91精品国产综合久久久久久漫画 | 国产欧美精品一区| 亚洲视频一二三区| 亚洲国产精品一区二区久久恐怖片| 五月天中文字幕一区二区| 美女mm1313爽爽久久久蜜臀| 国产精品一区二区在线播放| 99re8在线精品视频免费播放| 91福利国产精品| 宅男噜噜噜66一区二区66| 精品88久久久久88久久久| 中文字幕欧美三区| 亚洲成人你懂的| 国产成人精品免费在线| 欧美三级中文字幕| 久久久久久黄色| 亚洲成人免费视| 懂色一区二区三区免费观看| 欧美日韩综合一区| 久久久久久久久久看片| 香蕉成人伊视频在线观看| 国内精品伊人久久久久av影院| 99久久99久久综合| 日韩精品一区二区三区四区| 亚洲摸摸操操av| 国产在线乱码一区二区三区| 精品视频在线视频| 国产精品乱子久久久久| 蜜桃一区二区三区在线| 欧美午夜宅男影院| 中文字幕第一页久久| 美国毛片一区二区| 欧美日韩国产天堂| 亚洲精品国产精品乱码不99| 国产成人精品一区二| 337p亚洲精品色噜噜噜| 亚洲精品va在线观看| 国产91精品露脸国语对白| 精品国产一区久久| 日本女优在线视频一区二区| 在线国产电影不卡| 成人欧美一区二区三区在线播放| 老司机午夜精品99久久| 欧美美女直播网站| 亚洲精品成人精品456| 成人av午夜影院| 国产日韩亚洲欧美综合| 精品一区二区三区视频| 精品久久国产字幕高潮| 日韩不卡一区二区三区| 欧美日韩精品系列| 天天av天天翘天天综合网色鬼国产| www.66久久| 亚洲国产高清在线| www.亚洲精品| 亚洲精品一二三| 91婷婷韩国欧美一区二区| 中文字幕在线播放不卡一区| 高清不卡在线观看| 最新热久久免费视频| av一区二区三区黑人| 亚洲精品福利视频网站| 日本精品视频一区二区| 亚洲一区二区三区四区五区黄 | 粉嫩高潮美女一区二区三区| 久久综合资源网| 国产成人综合在线观看| 国产精品―色哟哟| 99久久久久久| 午夜电影一区二区三区| 欧美大片在线观看| 国产一区二区三区在线观看精品 | 日韩欧美高清在线| 韩国精品主播一区二区在线观看| 久久久欧美精品sm网站| 91在线国内视频| 亚洲尤物在线视频观看| 欧美一级黄色片| 高清免费成人av| 一区二区三区加勒比av| 欧美一区二区三区影视| 国产在线一区观看| 一色桃子久久精品亚洲| 欧美视频中文一区二区三区在线观看| 日韩精品亚洲专区| 久久久www成人免费无遮挡大片| 91香蕉视频mp4| 日韩成人精品在线| 国产精品久久毛片av大全日韩| 色婷婷一区二区| 美女国产一区二区| 亚洲人午夜精品天堂一二香蕉| 欧美精品一卡两卡| 国产成人亚洲精品青草天美| 亚洲最大成人网4388xx| 精品国产一区二区精华| 91麻豆免费观看| 久久精品国产久精国产爱| 亚洲视频1区2区| 精品国产麻豆免费人成网站| 91国产免费看| 丁香激情综合五月| 日本欧美久久久久免费播放网| 国产精品丝袜一区| 精品理论电影在线观看| 欧美亚洲日本国产| 不卡在线视频中文字幕| 蜜臀精品一区二区三区在线观看| 国产精品久久777777| 精品国产91乱码一区二区三区| 欧美一a一片一级一片| 成人av在线一区二区三区| 久久精品国产秦先生| 日日摸夜夜添夜夜添亚洲女人| 亚洲视频网在线直播| 中文字幕va一区二区三区| 精品日韩欧美一区二区| 欧美一级爆毛片| 欧美色精品在线视频| 91热门视频在线观看| 国产xxx精品视频大全| 美女性感视频久久| 日日摸夜夜添夜夜添亚洲女人| 亚洲精品视频一区二区| 国产精品毛片a∨一区二区三区| 欧美成人免费网站| 日韩欧美一区中文| 正在播放亚洲一区| 欧美日韩精品电影| 9191成人精品久久| 91精品视频网| 欧美日韩国产首页| 欧美卡1卡2卡| 91精品久久久久久久99蜜桃| 欧美亚洲一区二区在线观看| 91官网在线观看| 欧美午夜电影在线播放| 欧美日韩高清一区二区不卡| 91豆麻精品91久久久久久| 色婷婷av一区二区三区软件| 91黄色激情网站| 欧美日韩另类一区| 欧美一区永久视频免费观看| 欧美一区二区三区四区视频| 日韩欧美色综合网站| 一区二区三区在线不卡| 亚洲乱码中文字幕综合| 亚洲午夜久久久久久久久久久| 亚洲www啪成人一区二区麻豆| 日韩在线一二三区| 国产一区视频在线看| 99热这里都是精品| 欧美在线一区二区三区| 欧美一级淫片007| 久久久精品tv| 一区二区三区欧美在线观看| 日韩中文字幕区一区有砖一区| 久久精品国产精品亚洲综合| 成人av动漫网站| 欧美日韩美女一区二区| 久久久久久久综合| 亚洲欧美经典视频| 久久国产精品无码网站| k8久久久一区二区三区| 91精品国产综合久久久久久久 | 日韩一区二区三区在线视频| 久久久久久久久97黄色工厂| 亚洲三级在线播放| 日韩中文字幕91| 成人av在线看| 欧美丰满一区二区免费视频| 国产欧美一区二区精品忘忧草| 亚洲综合色区另类av| 久久精品久久综合| 91同城在线观看| 精品成人a区在线观看| 亚洲一区电影777| 成人午夜免费电影| 欧美一级二级三级蜜桃| 激情文学综合丁香| 91黄色在线观看| 国产日本一区二区| 日本美女一区二区| 色综合久久久久| 国产目拍亚洲精品99久久精品|