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

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

?? delaunaytriangulation.java

?? Voronoi圖生成算法 ,Voronoi(沃洛諾依)多邊形網絡常常被用來做為計算機仿真模型.由于按照定義形成Voronoi多邊形網絡較難用程序實現,人們多采用Delauney(狄洛尼)三角形的方法完
?? JAVA
字號:
/*
 * Copyright (c) 2005 by L. Paul Chew.
 * 
 * Permission is hereby granted, without written agreement and without
 * license or royalty fees, to use, copy, modify, and distribute this
 * software and its documentation for any purpose, subject to the following 
 * conditions:
 *
 * The above copyright notice and this permission notice shall be included 
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 * DEALINGS IN THE SOFTWARE.
 */

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.Set;

/**
 * A 2D Delaunay Triangulation (DT) with incremental site insertion.
 * This is not the fastest way to build a DT, but it's a reasonable way
 * to build the DT incrementally and it makes a nice interactive display.
 * There are several O(n log n) methods, but they require that either (1) 
 * the sites are all known initially or (2) the sites are inserted in random
 * order.
 * 
 * @author Paul Chew
 * 
 * Created July 2005.  Derived from an earlier, messier version.
 */
public class DelaunayTriangulation extends Triangulation {
    
    private Simplex mostRecent = null;       // Most recently inserted triangle
    public boolean debug = false;            // Used for debugging
    
    /**
     * Constructor.
     * All sites must fall within the initial triangle.
     * @param triangle the initial triangle
     */
    public DelaunayTriangulation (Simplex triangle) {
        super(triangle);
        mostRecent = triangle;
    }
    
    /**
     * Locate the triangle with point (a Pnt) inside (or on) it.
     * @param point the Pnt to locate
     * @return triangle (Simplex<Pnt>) that holds the point; null if no such triangle
     */
    public Simplex locate (Pnt point) {
        Simplex triangle = mostRecent;
        if (!this.contains(triangle)) triangle = null;
        
        // Try a directed walk (this works fine in 2D, but can fail in 3D)
        Set visited = new HashSet();
        while (triangle != null) {
            if (visited.contains(triangle)) { // This should never happen
                System.out.println("Warning: Caught in a locate loop");
                break;
            }
            visited.add(triangle);
            // Corner opposite point
            Pnt corner = point.isOutside((Pnt[]) triangle.toArray(new Pnt[0]));
            if (corner == null) return triangle;
            triangle = this.neighborOpposite(corner, triangle);
        }
        // No luck; try brute force
        System.out.println("Warning: Checking all triangles for " + point);
        for (Iterator it = this.iterator(); it.hasNext();) {
            Simplex tri = (Simplex) it.next();
            if (point.isOutside((Pnt[]) tri.toArray(new Pnt[0])) == null) return tri;
        }
        // No such triangle
        System.out.println("Warning: No triangle holds " + point);
        return null;
    }
    
    /**
     * Place a new point site into the DT.
     * @param site the new Pnt
     * @return set of all new triangles created
     */
    public Set delaunayPlace (Pnt site) {
        Set newTriangles = new HashSet();
        Set oldTriangles = new HashSet();
        Set doneSet = new HashSet();
        LinkedList waitingQ = new LinkedList();
        
        // Locate containing triangle
        if (debug) System.out.println("Locate");
        Simplex triangle = locate(site);
        
        // Give up if no containing triangle or if site is already in DT
        if (triangle == null || triangle.contains(site)) return newTriangles;
        
        // Find Delaunay cavity (those triangles with site in their circumcircles)
        if (debug) System.out.println("Cavity");
        waitingQ.add(triangle);
        while (!waitingQ.isEmpty()) {
            triangle = (Simplex) waitingQ.removeFirst();      
            if (site.vsCircumcircle((Pnt[]) triangle.toArray(new Pnt[0])) == 1) continue;
            oldTriangles.add(triangle);
            Iterator it = this.neighbors(triangle).iterator();
            for (; it.hasNext();) {
                Simplex tri = (Simplex) it.next();
                if (doneSet.contains(tri)) continue;
                doneSet.add(tri);
                waitingQ.add(tri);
            }
        }
        // Create the new triangles
        if (debug) System.out.println("Create");
        for (Iterator it = Simplex.boundary(oldTriangles).iterator(); it.hasNext();) {
            Set facet = (Set) it.next();
            facet.add(site);
            newTriangles.add(new Simplex(facet));
        }
        // Replace old triangles with new triangles
        if (debug) System.out.println("Update");
        this.update(oldTriangles, newTriangles);
        
        // Update mostRecent triangle
        if (!newTriangles.isEmpty()) mostRecent = (Simplex) newTriangles.iterator().next();
        return newTriangles;
    }
    
    /**
     * Main program; used for testing.
     */
    public static void main (String[] args) {
        Simplex tri = new Simplex(new Pnt[] {new Pnt(-10,10), new Pnt(10,10), new Pnt(0,-10)});
        System.out.println("Triangle created: " + tri);
        DelaunayTriangulation dt = new DelaunayTriangulation(tri);
        System.out.println("DelaunayTriangulation created: " + dt);
        dt.delaunayPlace(new Pnt(0,0));
        dt.delaunayPlace(new Pnt(1,0));
        dt.delaunayPlace(new Pnt(0,1));
        System.out.println("After adding 3 points, the DelaunayTriangulation is a " + dt);
        dt.printStuff();
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕第一区第二区| 欧美欧美欧美欧美| 免费成人在线观看| 视频一区二区中文字幕| 一区二区免费视频| 亚洲电影在线免费观看| 亚洲精品写真福利| 亚洲美女免费在线| 18成人在线视频| 亚洲欧洲精品一区二区三区不卡| 日本一区二区三区国色天香| 久久精品一区八戒影视| 国产欧美日韩综合精品一区二区 | 欧美性做爰猛烈叫床潮| 欧美亚洲日本国产| 欧美伊人久久久久久久久影院 | 亚洲电影第三页| 一区二区三区四区蜜桃| 亚洲午夜激情av| 亚洲成在人线免费| 日本人妖一区二区| 久久综合综合久久综合| 国产老妇另类xxxxx| 成人免费毛片高清视频| www.亚洲色图.com| 欧美日韩国产三级| 精品国产乱码久久久久久夜甘婷婷 | 亚洲婷婷综合久久一本伊一区| 亚洲欧洲精品成人久久奇米网| 一区二区三区自拍| 日韩精品免费视频人成| 精品一二三四区| 成人av午夜电影| 欧美久久婷婷综合色| 精品av久久707| 18欧美乱大交hd1984| 免费观看一级欧美片| 久草热8精品视频在线观看| 成人福利视频网站| 一本大道久久精品懂色aⅴ| 欧美一区二区在线视频| 久久先锋影音av鲁色资源| 亚洲色图制服诱惑| 久久99国产精品久久99| 91丨porny丨蝌蚪视频| 在线综合+亚洲+欧美中文字幕| 久久综合狠狠综合久久激情| 亚洲精品视频免费观看| 国产美女娇喘av呻吟久久| 色婷婷综合久久久久中文| 精品国精品国产| 国产精品免费人成网站| 久久精品水蜜桃av综合天堂| 成人avav影音| 欧美视频完全免费看| 久久久久久毛片| 天堂成人国产精品一区| 久久99精品久久久久久动态图| 91麻豆国产福利在线观看| 精品国精品国产尤物美女| 五月婷婷激情综合网| 成人自拍视频在线观看| 精品日韩一区二区三区免费视频| 亚洲视频网在线直播| 国产成人a级片| 日韩女优av电影在线观看| 午夜私人影院久久久久| 91欧美激情一区二区三区成人| 欧美精品一区二区三区四区| 在线成人午夜影院| 亚洲精品五月天| 成人91在线观看| 欧美国产成人精品| 精品一区二区三区视频在线观看 | 91精品一区二区三区在线观看| 亚洲特级片在线| 不卡区在线中文字幕| 欧美三级欧美一级| 亚洲一区二区av在线| 欧美午夜影院一区| 一区二区三区成人| 欧美三级一区二区| 亚洲成人免费在线观看| 欧美日韩在线直播| 婷婷综合另类小说色区| 欧美日韩国产小视频| 日本v片在线高清不卡在线观看| 国产精品另类一区| 一区二区免费视频| www.爱久久.com| 国产精品成人免费在线| 国产电影精品久久禁18| 精品国产一区二区精华| 免费欧美在线视频| 精品国产乱码久久| 国产91丝袜在线播放九色| 久久综合国产精品| 国产69精品久久99不卡| 国产精品初高中害羞小美女文| 一本久久a久久精品亚洲| 亚洲一区二区在线免费观看视频 | 久久精品国产一区二区三区免费看| 国产成人精品一区二区三区四区 | 日韩欧美的一区| 蜜臀91精品一区二区三区| 精品对白一区国产伦| 国产成人一级电影| 亚洲人精品一区| 91精品国产综合久久婷婷香蕉| 男女激情视频一区| 欧美国产成人精品| 欧美日韩精品二区第二页| 美女一区二区三区在线观看| 久久精品夜夜夜夜久久| 91国产免费看| 国产一区二区免费看| 最新热久久免费视频| 欧美日韩国产成人在线免费| 国产综合久久久久影院| 亚洲同性同志一二三专区| 欧美一级日韩一级| 国产成人精品亚洲777人妖| 一区二区视频在线| 777午夜精品免费视频| 国产乱人伦偷精品视频免下载| 国产日韩综合av| 欧美欧美欧美欧美| 国产精品亚洲一区二区三区妖精 | 最新国产成人在线观看| 欧美一区二区三级| 色综合天天狠狠| 久久成人av少妇免费| 亚洲同性gay激情无套| 欧美精品一区二区久久婷婷| 成人av动漫网站| 麻豆专区一区二区三区四区五区| 国产精品丝袜在线| 日韩一二三区不卡| 成人精品视频一区二区三区| 精品一区二区免费| 日韩高清一级片| 亚洲中国最大av网站| 亚洲国产精品av| 久久精品视频免费| 日韩精品一区二区三区中文不卡 | 欧美mv日韩mv国产网站| 精品污污网站免费看| 91视频一区二区| 国产91在线观看丝袜| 久久av资源网| 蜜桃av一区二区| 婷婷久久综合九色国产成人| 一区二区三区中文在线观看| 国产精品久久久久久妇女6080 | 大胆欧美人体老妇| 国产一区二区三区四| 久久精品国产秦先生| 免费在线观看日韩欧美| 美女视频一区在线观看| 视频一区免费在线观看| 三级一区在线视频先锋| 日本美女一区二区三区视频| 亚洲一区二区美女| 水野朝阳av一区二区三区| 日韩精彩视频在线观看| 日本不卡免费在线视频| 美女在线观看视频一区二区| 精品一区二区三区影院在线午夜| 韩国av一区二区三区四区| 国产在线视频一区二区| 国产成人精品aa毛片| 成人午夜电影网站| 色一情一乱一乱一91av| 一本久久精品一区二区| 欧美日韩高清一区| 日韩精品一区二区三区中文不卡| 久久久亚洲精华液精华液精华液| 久久精品亚洲国产奇米99| 亚洲欧洲另类国产综合| 性做久久久久久久久| 久久不见久久见免费视频1| 国产精品一区专区| 99精品久久只有精品| 欧美日精品一区视频| 日韩一区二区三区在线观看| 国产亚洲一二三区| 一区二区三区免费观看| 欧美aⅴ一区二区三区视频| 日本欧美加勒比视频| 国产成人免费av在线| 99久久精品国产麻豆演员表| 欧美色综合影院| 久久精品视频网| 午夜精品久久久久久不卡8050| 国产精品一区二区不卡| 在线观看亚洲精品视频| 久久影院午夜论| 午夜激情一区二区三区| 成人精品国产一区二区4080| 欧美一区日本一区韩国一区|