青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

Triangle - Delaunay Triangulator

Posted on 2014-03-29 16:43 eryar 閱讀(13892) 評(píng)論(17)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE


Triangle - Delaunay Triangulator

eryar@163.com

Abstract. Triangle is a 2D quality mesh generator and Delaunay triangulator. Triangle was created as part of the Quake project in the school of Computer Science at Carnegie Mellon University by Jonathan R. Shewchuk. Triangle is a small C program and its Delaunay refinement algorithm for quality mesh generation is a hybrid one. It includes divide-and-conquer and incremental insertion algorithms and sweepline Delaunay triangulation algorithm. This paper is focused on the usage of the Triangle and visualization the triangulation result in OpenSceneGraph.

Key words. Triangle, Delaunay Triangulator, Mesh Generator

1. Introduction

Triangle可以生成精確的Delaunay三角剖分,限定Delaunay三角剖分(Constrained Delaunay Triangulation),Conforming Delaunay Triangulation,Voronoi圖(Voronoi Diagrams)和高質(zhì)量的三角網(wǎng)格,即生成的網(wǎng)格中沒有瘦長(zhǎng)的三角形,所以適用于有限元分析(Finite Element Analysis)。

在OpenCascade6.2.0版本之前,OpenCascade中網(wǎng)格的生成就是使用了這個(gè)開源庫(kù),由此可見Delaunay三角剖分算法和網(wǎng)格生成算法的重要性及廣泛應(yīng)用。

wps_clip_image-6384

Figure 1.1 Triangle - A 2D Quality Mesh Generator and Delaunay Triangulator

下載Triangle的源程序及更多與Triangle相關(guān)信息的網(wǎng)址如下所示:

http://www.cs.cmu.edu/~quake/triangle.html

下載到源程序后,如果是Windows操作系統(tǒng),還需要在triangle.h之前做些配置,如定義以下幾個(gè)宏:

#define REAL double 
#define ANSI_DECLARATORS 
#include 
"triangle.h" 
#undef REAL 

在triangle.c中定義宏:#define NO_TIMER。有了上面的宏定義,可以編譯出一個(gè)triangle.exe程序了。如果要將triangle用在自己的程序中,還需要定義#define TRILIBRARY。更多宏定義可以參考源程序。


2. Triangle Usage

Triangle有很多開關(guān),可以選擇三角剖分和生成網(wǎng)格的方式,如下圖所示:

wps_clip_image-16944

Figure 2.1 Options for the Triangle

如對(duì)示例文件box.poly進(jìn)行三角剖分,使用命令及生成結(jié)果統(tǒng)計(jì)信息如下所示:

wps_clip_image-27287

Figure 2.2 Triangle Usage

出現(xiàn)統(tǒng)計(jì)信息的同時(shí)也生成了一些文件,如頂點(diǎn)文件box.1.node和三角形文件box.1.ele,如下圖所示:

wps_clip_image-2721

Figure 2.3 Nodes and Triangles data generated by Triangle

wps_clip_image-3509

Figure 2.4 Triangulation Mesh Generated by Triangle[-pc]

wps_clip_image-3599

Figure 2.5 Triangulation Mesh Generated by Triangle[-pqc]

3. Displaying Meshes

在下載的程序中有用于顯示網(wǎng)格的示例程序showme.c,不過(guò)只能用于Unix操作系統(tǒng),不能用于Windows。

wps_clip_image-5805

Figure 3.1 Displaying the Meshes by ShowMe

為了在Windows操作系統(tǒng)中看到生成的網(wǎng)格,用OpenSceneGraph編寫了一個(gè)小程序TriangleViewer顯示網(wǎng)格。其中讀取node和element文件中數(shù)據(jù)的主要程序片段如下所示:

 

std::string TriangleMesh::ReadLine(std::ifstream &theFile)
{
    std::
string theBuffer;

    
bool IsReadNextLine = false;

    
do 
    {
        getline(theFile, theBuffer);

        
// skip comment here.
        if ('#' == theBuffer[0])
        {
            IsReadNextLine 
= true;
        }
        
else
        {
            IsReadNextLine 
= false;
        }
    }
    
while (IsReadNextLine);

    
return theBuffer;
}

void TriangleMesh::BuildMesh(const std::string& aPolyFile)
{
    std::stringstream ss;

    std::
string theNodeFileName(aPolyFile + ".node");
    std::
string theElementFileName(aPolyFile + ".ele");

    std::ifstream theNodeFile(theNodeFileName.c_str());
    std::ifstream theElementFile(theElementFileName.c_str());

    Standard_Integer theIndex 
= 0;
    Standard_Integer theNodeCount 
= 0;
    Standard_Integer theTriangleCount 
= 0;

    Standard_Integer theIndex1 
= 0;
    Standard_Integer theIndex2 
= 0;
    Standard_Integer theIndex3 
= 0;

    Standard_Real x 
= 0.0;
    Standard_Real y 
= 0.0;

    
// Read mesh size.
    ss << ReadLine(theNodeFile);
    ss 
>> theNodeCount;

    ss.str(
"");
    ss.clear();

    ss 
<< ReadLine(theElementFile);
    ss 
>> theTriangleCount;

    mMesh 
= new Poly_Triangulation(theNodeCount, theTriangleCount, Standard_True);

    
// Read nodes information.
    TColgp_Array1OfPnt2d& theNodes2d = mMesh->ChangeUVNodes();

    
for (Standard_Integer n = 1; n <= theNodeCount; ++n)
    {
        ss.str(
"");
        ss.clear();

        ss 
<< ReadLine(theNodeFile);
        ss 
>> theIndex >> x >> y;

        theNodes2d.SetValue(theIndex, gp_Pnt2d(x, y));
    }

    
// Read triangles information.
    Poly_Array1OfTriangle& theTriangles = mMesh->ChangeTriangles();

    
for (Standard_Integer t = 1; t <= theTriangleCount; ++t)
    {
        ss.str(
"");
        ss.clear();

        ss 
<< ReadLine(theElementFile);
        ss 
>> theIndex >> theIndex1 >> theIndex2 >> theIndex3;

        theTriangles.SetValue(theIndex, Poly_Triangle(theIndex1, theIndex2, theIndex3));
    }
}

如下圖所示為顯示一個(gè)用不同命令生成的Smiley Face的網(wǎng)格:

wps_clip_image-11392

Figure 3.2 Generate Smiley Face Mesh by Triangle [-pc]

wps_clip_image-13806

Figure 3.3 Generate Smiley Face Mesh by Triangle [-pqc]

從上面兩幅圖中的網(wǎng)格可知,下面圖中的網(wǎng)格質(zhì)量較高,為去掉了瘦長(zhǎng)的三角形而增加了一些頂點(diǎn)。


4. Conclusions

在給Triangle程序輸入數(shù)據(jù)時(shí),頂點(diǎn)Vertex數(shù)據(jù)很好理解,只是一些二維點(diǎn),但是如果加上開孔Hole后有些問(wèn)題。后來(lái)才知道,需要在Poly文件中的Segments部分輸入與孔相關(guān)線段形成的閉合區(qū)域,在孔Hole部分只需要輸入位于孔中的任意一個(gè)點(diǎn)即可。

將Triangle生成的結(jié)果可視化,可以看到Triangle生成的網(wǎng)格,方便看到Triangle的不同選項(xiàng)生成的網(wǎng)格效果。

在OpenCascade6.2.0版本中,就以此二維Delaunay三角剖分工具為基礎(chǔ),實(shí)現(xiàn)了任意三維曲面的三角剖分,進(jìn)而對(duì)其可視化。所以學(xué)習(xí)Triangle的用法,結(jié)合OpenCascade的源程序便于理解任意曲面的可視化實(shí)現(xiàn)的方法。

對(duì)Delaunay三角剖分算法感興趣的讀者,可以參考相關(guān)書籍[3],[4],[5],[6]。


5. References

1. Jonathan R. Shewchuk. Triangle: http://www.cs.cmu.edu/~quake/triangle.html

2. Jonathan R. Shewchuk, Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangualtor, Springer-Verlag, Berlin, 1996

3. 汪嘉業(yè) 王文平 屠長(zhǎng)河 楊承磊. 計(jì)算幾何及應(yīng)用.  科學(xué)出版社. 2011

4. 王成恩. 面向科學(xué)計(jì)算的網(wǎng)格劃分與可視化技術(shù). 科學(xué)出版社. 2011

5. 周培德. 計(jì)算幾何-算法設(shè)計(jì)與分析. 清華大學(xué)出版社. 2008

6. Berg M D著 鄧俊輝譯. 計(jì)算幾何-算法與應(yīng)用. 清華大學(xué)出版社. 2009

 

Feedback

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2014-05-04 10:58 by Mr Li
我正在研究這個(gè)三角剖分的源碼

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2014-05-04 15:42 by eryar
厲害!

@Mr Li

# re: Triangle - Delaunay Triangulator[未登錄]  回復(fù)  更多評(píng)論   

2014-05-19 14:46 by D
怎么在tcl語(yǔ)言中呢

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2014-05-20 21:30 by eryar
這個(gè)可以參考netgen,
@D

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-01-14 15:20 by 付振宇
樓主你好,我運(yùn)行Triangle之后,結(jié)果確實(shí)產(chǎn)生了一系列的開關(guān)選擇項(xiàng),但結(jié)果的最后一行卻是“press any key to continue”,直接不給我選擇開關(guān)的 機(jī)會(huì)程序就結(jié)束了,請(qǐng)問(wèn)怎么才能選擇這些開關(guān)呢?

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-01-14 18:17 by eryar
@付振宇
Hi 付振宇,

你好!

Triangle的用法請(qǐng)參考Figure 2.2 Triangle Usage 中紅色線框中的部分。
各開關(guān)的用法請(qǐng)仔細(xì)看Figure 2.1 Options for the Triangle其說(shuō)明。

Best Regards,
Shing Liu

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-01-15 14:14 by 付振宇
@eryar
感謝博主,我現(xiàn)在明白了,原來(lái)是在命令提示符里運(yùn)行源程序編譯產(chǎn)生的exe文件和相應(yīng)的開關(guān)指令,而并非在Visual c++里運(yùn)行。

可是為什么產(chǎn)生的結(jié)點(diǎn)坐標(biāo)和單元信息文件的后綴名是.node和.ele呢,能否通過(guò)修改源程序讓它們都為.txt文件,然后再編寫一段c++程序讀出這些信息,畫出網(wǎng)格剖分圖?

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-01-15 17:55 by eryar
@付振宇

生成的文件后綴名沒有什么關(guān)系的,對(duì)于程序來(lái)說(shuō)都是文本文件,自己寫程序直接讀數(shù)據(jù)都可以了。

有些程序可以用來(lái)顯示Triangle生成的這些文件,加個(gè)后綴好分辨文件中保存的數(shù)據(jù)。

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-03-10 15:03 by 付振宇
@eryar
博主您好,我想用源文件夾中的tricall.c來(lái)調(diào)用triangle,于是在triangle.c中定義了#define TRILIBRARY,并把tricall.c添加到工作空間來(lái),可是編譯的時(shí)候總是報(bào)錯(cuò),問(wèn)題就出在頭文件triangle.h中的一行奇怪代碼上
“#include "triangle.h"
給出的錯(cuò)誤提示貌似是說(shuō)出現(xiàn)了循環(huán)調(diào)用,于是我就把“#include "triangle.h"給刪除了,然后再編譯,這下一編譯更不得了,出現(xiàn)了幾十個(gè)語(yǔ)法錯(cuò)誤。

請(qǐng)問(wèn)這到底是怎么回事,為什么triangle.h要自己引用自己,怎么解決這個(gè)問(wèn)題?

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-03-10 19:21 by eryar
@付振宇
Hi 付振宇,

你好!

請(qǐng)仔細(xì)看看這段話:

~~~~~~~~~~~~~~~~~~~~~~~~~
下載到源程序后,如果是Windows操作系統(tǒng),還需要在triangle.h之前做些配置,如定義以下幾個(gè)宏:
#define REAL double
#define ANSI_DECLARATORS
#include "triangle.h"
#undef REAL

在triangle.c中定義宏:#define NO_TIMER。有了上面的宏定義,可以編譯出一個(gè)triangle.exe程序了。如果要將triangle用在自己的程序中,還需要定義#define TRILIBRARY。
~~~~~~~~~~~~~~~~~~~~~~~~~~
這些內(nèi)容加在tricall.c中,再編譯試試看。

你可以看看makefile,里面有些選項(xiàng)的。

Best Regards,
Shing Liu

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-03-10 20:02 by 付振宇
@eryar
您的意思是在triangle.h中定義宏:
#define REAL double
#define ANSI_DECLARATORS

在triangle.c中定義宏:
#define NO_TIMER
#define TRILIBRARY


至于那個(gè)” #include "triangle.h" “ ,我發(fā)現(xiàn)在tricall.c中已經(jīng)有了,就不用再添加了吧。

按照上面的做法,最終運(yùn)行成功了。

我之前是把下面的代碼都添加到了triangle.h中,才報(bào)錯(cuò)的。
#define REAL double
#define ANSI_DECLARATORS
#include "triangle.h"
#undef REAL

謝謝啦!

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-03-11 19:30 by eryar
@付振宇

運(yùn)行成功就好。

不客氣。

# re: Triangle - Delaunay Triangulator[未登錄]  回復(fù)  更多評(píng)論   

2015-07-30 21:40 by LI
樓主您好,我想知道調(diào)用Triangle中 triangulateio 里面定義的
REAL *pointattributelist;
int *pointmarkerlist;
int numberofpointattributes;

int *trianglelist;
REAL *triangleattributelist;
REAL *trianglearealist;
int *neighborlist;
int numberoftriangles;
int numberofcorners;
int numberoftriangleattributes;*/

int *segmentlist;
int *segmentmarkerlist;
int numberofsegments;
REAL *holelist;
int numberofholes;

REAL *regionlist;
int numberofregions;

int *edgelist;
int *edgemarkerlist;
REAL *normlist;
int numberofedges;

這些都是什么意思,要控制三角形的最小角和面積應(yīng)該怎么設(shè)置參數(shù)???
謝謝!
網(wǎng)上關(guān)于這些介紹比較少,望樓主幫忙,謝謝了!!

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-07-30 22:52 by eryar
@LI

你好!

那些參數(shù)是三角剖分的輸入數(shù)據(jù)。

控制剖分行為的參數(shù)設(shè)置是在結(jié)構(gòu)體behavior中:
/* Data structure for command line switches and file names. This structure */
/* is used (instead of global variables) to allow reentrancy. */

struct behavior {

/* Switches for the triangulator. */
/* poly: -p switch. refine: -r switch. */
/* quality: -q switch. */
/* minangle: minimum angle bound, specified after -q switch. */
/* goodangle: cosine squared of minangle. */
/* vararea: -a switch without number. */
/* fixedarea: -a switch with number. */
/* maxarea: maximum area bound, specified after -a switch. */
/* usertest: -u switch. */
/* regionattrib: -A switch. convex: -c switch. */
/* weighted: 1 for -w switch, 2 for -W switch. jettison: -j switch */
/* firstnumber: inverse of -z switch. All items are numbered starting */
/* from `firstnumber'. */
/* edgesout: -e switch. voronoi: -v switch. */
/* neighbors: -n switch. geomview: -g switch. */
/* nobound: -B switch. nopolywritten: -P switch. */
/* nonodewritten: -N switch. noelewritten: -E switch. */
/* noiterationnum: -I switch. noholes: -O switch. */
/* noexact: -X switch. */
/* order: element order, specified after -o switch. */
/* nobisect: count of how often -Y switch is selected. */
/* steiner: maximum number of Steiner points, specified after -S switch. */
/* incremental: -i switch. sweepline: -F switch. */
/* dwyer: inverse of -l switch. */
/* splitseg: -s switch. */
/* nolenses: -L switch. docheck: -C switch. */
/* quiet: -Q switch. verbose: count of how often -V switch is selected. */
/* usesegments: -p, -r, -q, or -c switch; determines whether segments are */
/* used at all. */
/* */
/* Read the instructions to find out the meaning of these switches. */

int poly, refine, quality, vararea, fixedarea, usertest;
int regionattrib, convex, weighted, jettison;
int firstnumber;
int edgesout, voronoi, neighbors, geomview;
int nobound, nopolywritten, nonodewritten, noelewritten, noiterationnum;
int noholes, noexact, nolenses;
int incremental, sweepline, dwyer;
int splitseg;
int docheck;
int quiet, verbose;
int usesegments;
int order;
int nobisect;
int steiner;
REAL minangle, goodangle;
REAL maxarea;

/* Variables for file names. */

#ifndef TRILIBRARY
char innodefilename[FILENAMESIZE];
char inelefilename[FILENAMESIZE];
char inpolyfilename[FILENAMESIZE];
char areafilename[FILENAMESIZE];
char outnodefilename[FILENAMESIZE];
char outelefilename[FILENAMESIZE];
char outpolyfilename[FILENAMESIZE];
char edgefilename[FILENAMESIZE];
char vnodefilename[FILENAMESIZE];
char vedgefilename[FILENAMESIZE];
char neighborfilename[FILENAMESIZE];
char offfilename[FILENAMESIZE];
#endif /* not TRILIBRARY */

}; /* End of `struct behavior'. */

最小角看字面應(yīng)該是:minangle
最大面積是:maxarea

Best Regards,
Shing Liu

# re: Triangle - Delaunay Triangulator[未登錄]  回復(fù)  更多評(píng)論   

2015-08-03 13:30 by LI
@eryar
謝謝您的答復(fù)!
但是我還有一些疑問(wèn),寫在給您的郵件中,期待您的回復(fù)!
謝謝!

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2015-08-04 21:26 by eryar
@LI
不客氣。

建議你還是先把triangle編譯出一個(gè)exe,仔細(xì)看看相關(guān)命令選項(xiàng),
如"-a"就可以設(shè)置最大面積約束;

再把你的數(shù)據(jù)放到文件中,再用那個(gè)exe程序帶不同的選項(xiàng)來(lái)試試看。

# re: Triangle - Delaunay Triangulator  回復(fù)  更多評(píng)論   

2016-03-17 09:34 by 王亞輝
@付振宇
您好,請(qǐng)問(wèn)您的“press any key to continue”問(wèn)題是怎么解決的呢?
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            性欧美8khd高清极品| 国产精品中文字幕欧美| 在线不卡a资源高清| 国产精品久久久久国产精品日日 | 欧美一级久久久| 亚洲欧美视频一区| 性欧美1819性猛交| 欧美亚洲网站| 久久成人资源| 欧美电影在线播放| 亚洲欧洲中文日韩久久av乱码| 久久超碰97中文字幕| 久久国产福利国产秒拍| 美国十次了思思久久精品导航| 欧美激情一区二区三级高清视频 | 亚洲久色影视| 国产精品欧美久久久久无广告| 欧美激情第9页| 国产精品国产三级国产专播品爱网| 欧美亚洲第一区| 韩国一区二区三区在线观看| 亚洲美女精品久久| 亚洲综合久久久久| 老司机久久99久久精品播放免费 | 亚洲激情国产| 亚洲欧美一区二区精品久久久| 久久精品最新地址| 欧美福利电影在线观看| 国产裸体写真av一区二区| 91久久精品网| 久久九九热免费视频| 亚洲欧洲另类国产综合| 久久国产综合精品| 国产精品久久二区| 亚洲免费观看高清完整版在线观看熊 | 日韩午夜在线视频| 久久精品亚洲一区二区三区浴池| 欧美freesex8一10精品| 亚洲最新视频在线| 狂野欧美性猛交xxxx巴西| 欧美精品成人一区二区在线观看 | 亚洲先锋成人| 国产一区二区三区在线观看视频 | 欧美亚一区二区| 国产热re99久久6国产精品| 影院欧美亚洲| 在线观看中文字幕不卡| 一区二区三区高清不卡| 午夜精品久久久久久久99热浪潮 | 永久域名在线精品| 亚洲一区中文| 翔田千里一区二区| 免费成人在线观看视频| 亚洲电影天堂av| 亚洲一区二区三区四区在线观看| 久久av在线看| 欧美日本在线视频| 国产一区二区三区的电影| 亚洲国产一区二区在线| 午夜久久美女| 亚洲精品一区二区三区99| 欧美在线日韩精品| 国产精品国色综合久久| 91久久在线播放| 亚洲美女黄色| 午夜精品久久久久久久99樱桃 | 亚洲国产欧美一区二区三区同亚洲| 亚洲亚洲精品在线观看| 亚洲大片av| 一区二区电影免费观看| 亚洲在线中文字幕| 久久激情视频| 国产日本亚洲高清| 1769国产精品| 欧美一区激情| 亚洲美女色禁图| 欧美sm视频| 在线欧美视频| 久久免费视频网站| 亚洲在线观看免费| 欧美午夜在线一二页| 亚洲精品在线电影| 欧美国产国产综合| 一区二区三区蜜桃网| 久久久久久久久久久久久女国产乱| 国产精品久久久久9999高清| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲一区二区视频| 欧美成人69av| 伊人一区二区三区久久精品| 一二美女精品欧洲| 久久精品日产第一区二区三区| 免费成人高清| 在线亚洲欧美视频| 欧美午夜精品一区| 久久亚洲精品一区| 久久免费一区| 亚洲国产mv| 久久成人资源| 玖玖视频精品| 久久久水蜜桃av免费网站| 国产麻豆视频精品| 亚洲欧美成人一区二区在线电影| 亚洲欧洲一区二区在线播放| 欧美激情久久久久| 一区二区欧美亚洲| 一区二区免费在线视频| 国产精品极品美女粉嫩高清在线 | 欧美一区二区| 最新亚洲激情| 美女脱光内衣内裤视频久久网站| 久久国产精品一区二区三区| 亚洲高清三级视频| 亚洲免费高清| 国产精品―色哟哟| 久久婷婷影院| 欧美久久久久久久| 欧美一区日韩一区| 久久永久免费| 9久re热视频在线精品| 亚洲婷婷综合久久一本伊一区| 国产亚洲精品bt天堂精选| 欧美成年视频| 国产精品豆花视频| 免费在线观看一区二区| 欧美一区视频在线| 国产老女人精品毛片久久| 在线亚洲美日韩| 99国产精品国产精品毛片| 国产精品电影在线观看| 久久精品人人做人人爽| 久久这里只精品最新地址| 在线精品视频一区二区| 美女性感视频久久久| 国产精品不卡在线| 欧美激情亚洲综合一区| 欧美日韩国产综合新一区| 久久免费高清| 国产精品日韩在线| 亚洲三级影片| 一区二区三区在线视频观看 | 亚洲国产精品久久91精品| 在线一区免费观看| 亚洲精品美女在线| 一区二区精品国产| 亚洲精品一区二区在线观看| 亚洲天堂av在线免费观看| 国产欧美亚洲视频| 日韩一级成人av| 亚洲精品视频免费观看| 久久精品国产一区二区三区免费看| 这里只有精品在线播放| 久久手机精品视频| 久久一本综合频道| 国产欧美精品一区二区三区介绍 | 久久久久久欧美| 欧美午夜免费| 亚洲激情电影中文字幕| 最近中文字幕mv在线一区二区三区四区 | 欧美日韩国产综合网| 最新亚洲电影| 亚洲最新中文字幕| 欧美成人有码| 亚洲国产人成综合网站| 国产一区二区成人| 久久电影一区| 猛男gaygay欧美视频| 黄色小说综合网站| 久久综合伊人77777蜜臀| 亚洲女同同性videoxma| 久久综合网络一区二区| 香蕉尹人综合在线观看| 欧美99久久| 精品成人国产| 久久精品人人做人人爽| 欧美在线三级| 黄页网站一区| 欧美~级网站不卡| 亚洲黑丝在线| 亚洲视频第一页| 国产精品久久99| 欧美一区二区视频97| 久久在线视频在线| 亚洲国产精品成人一区二区| 麻豆乱码国产一区二区三区| 亚洲国产欧美不卡在线观看| 一本色道久久综合亚洲精品不 | 欧美人妖另类| 午夜国产不卡在线观看视频| 久久久91精品| 亚洲免费电影在线观看| 国产精品久久国产精麻豆99网站| 欧美一区视频| 亚洲精品在线一区二区| 欧美一区二区黄| 亚洲国产欧美久久| 久久视频精品在线| 欧美一区免费| 精品999在线播放| 欧美韩日亚洲|