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

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE 參數(shù)曲面面積

Posted on 2017-12-09 20:55 eryar 閱讀(3420) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCASCADE 參數(shù)曲面面積

eryar@163.com

Abstract. 本文介紹了參數(shù)曲面的第一基本公式,并應(yīng)用曲面的第一基本公式,結(jié)合OpenCASCADE中計(jì)算多重積分的類,對(duì)任意參數(shù)曲面的面積進(jìn)行計(jì)算。

Key Words. Parametric Curve, Parametric Surface, Gauss Integration, Global Properties

1.Introduction

我們知道一元函數(shù)y=f(x)的圖像是一條曲線,二元函數(shù)z=f(x,y)的圖像是一張曲面。但是,把曲線曲面表示成參數(shù)方程則更加便利于研究,這種表示方法首先是由歐洲瑞士數(shù)學(xué)家Euler引進(jìn)的。例如,在空間中的一條曲線可以表示為三個(gè)一元函數(shù):

X=x(t), Y=y(t), Z=z(t)

在向量的概念出現(xiàn)后,空間中的一條曲線可以自然地表示為一個(gè)一元向量函數(shù):

r=r(t)=(x(t), y(t), z(t))

用向量函數(shù)來表示曲線和曲面后,使曲線曲面一些量的計(jì)算方式比較統(tǒng)一。如曲線可以表示為一元向量函數(shù),曲面可以表示為二元向量函數(shù)。

本文結(jié)合OpenCASCADE來介紹參數(shù)曲線曲面積分分別計(jì)算曲線弧長和曲面的面積。結(jié)合《微分幾何》來更好地理解曲線曲面相關(guān)知識(shí)。

2.Curve Natural Parametric Equations

設(shè)曲線C的參數(shù)方程是r=r(t),命:

wps_clip_image-10887

則s是該曲線的一個(gè)不變量,即它與空間中的坐標(biāo)系的選擇無關(guān),也與該曲線的參數(shù)變換無關(guān)。前者是因?yàn)樵诘芽栔苯亲鴺?biāo)變換下,切向量的長度|r’(t)|是不變的,故s不變。關(guān)于后者可以通過積分的變量的替換來證明,設(shè)參數(shù)變換是:

wps_clip_image-21189

并且

wps_clip_image-16009

因此

wps_clip_image-31864

根據(jù)積分的變量替換公式有:

wps_clip_image-29413

不變量s的幾何意義就是曲線段的弧長。這說明曲線參數(shù)t可以是任意的,但選擇不同的參數(shù)得到的參數(shù)方程會(huì)有不同,但是曲線段的弧長是不變的。以曲線弧長作為曲線方程的參數(shù),這樣的方程稱為曲線的自然參數(shù)方程N(yùn)atural Parametric Equations。

由曲線的參數(shù)方程可知,曲線弧長的計(jì)算公式為:

wps_clip_image-8988

幾何意義就是在每個(gè)微元處的切向量的長度求和。

3.Gauss Integration for Arc Length

曲線弧長的計(jì)算就是一元函數(shù)的積分。OpenCASCADE中是如何計(jì)算任意曲線弧長的呢?直接找到相關(guān)的源碼列舉如下:(在類CPnts_AbscissaPoint中)

// auxiliary functions to compute the length of the derivative
static Standard_Real f3d(const Standard_Real X, const Standard_Address C)
{
  gp_Pnt P;
  gp_Vec V;
((Adaptor3d_Curve*)C)->D1(X,P,V);
return V.Magnitude();
}
static Standard_Real f2d(const Standard_Real X, const Standard_Address C)
{
  gp_Pnt2d P;
  gp_Vec2d V;
((Adaptor2d_Curve2d*)C)->D1(X,P,V);
return V.Magnitude();
}
//==================================================================
//function : Length
//purpose  : 3d with parameters
//==================================================================

Standard_Real CPnts_AbscissaPoint::Length(const Adaptor3d_Curve& C,
const Standard_Real U1,
const Standard_Real U2)
{
  CPnts_MyGaussFunction FG;
//POP pout WNT

  CPnts_RealFunction rf = f3d;
  FG.Init(rf,(Standard_Address)&C);
//  FG.Init(f3d,(Standard_Address)&C);

  math_GaussSingleIntegration TheLength(FG, U1, U2, order(C));
if (!TheLength.IsDone()) {
throw Standard_ConstructionError();
}
return Abs(TheLength.Value());
}
//==================================================================
//function : Length
//purpose  : 2d with parameters
//==================================================================

Standard_Real CPnts_AbscissaPoint::Length(const Adaptor2d_Curve2d& C,
const Standard_Real U1,
const Standard_Real U2)
{
  CPnts_MyGaussFunction FG;
//POP pout WNT

  CPnts_RealFunction rf = f2d;
  FG.Init(rf,(Standard_Address)&C);
//  FG.Init(f2d,(Standard_Address)&C);

  math_GaussSingleIntegration TheLength(FG, U1, U2, order(C));
if (!TheLength.IsDone()) {
throw Standard_ConstructionError();
}
return Abs(TheLength.Value());
}

 

上述代碼的意思是直接對(duì)曲線的一階導(dǎo)數(shù)的長度求積分,即是弧長。OpenCASCADE的代碼寫得有點(diǎn)難懂,根據(jù)意思把對(duì)三維曲線求弧長的代碼改寫下,更便于理解:

//! Function for curve length evaluation.
class math_LengthFunction : public math_Function
{
public:
    math_LengthFunction(const Handle(Geom_Curve)& theCurve)
: myCurve(theCurve)
{
}
virtual Standard_Boolean Value(const Standard_Real X, Standard_Real& F)
{
        gp_Pnt aP;
        gp_Vec aV;
        myCurve->D1(X, aP, aV);
        F = aV.Magnitude();
return Standard_True;
}
private:
    Handle(Geom_Curve) myCurve;
};

 

4.First Fundamental Form of a Surface

曲面參數(shù)方程是個(gè)二元向量函數(shù)。根據(jù)《微分幾何》中曲面的第一基本公式(First Fundamental Form of a Surface)可知,曲面上曲線的表達(dá)式為:

r=r(u(t), v(t)) = (x(t), y(t), z(t))

若以s表示曲面上曲線的弧長,則由復(fù)合函數(shù)求導(dǎo)公式可得弧長微分公式:

wps_clip_image-11118

在古典微分幾何中,上式稱為曲面的第一基本公式,E、F、G稱為第一基本量。在曲面上,每一點(diǎn)的第一基本量與參數(shù)化無關(guān)。

利用曲面第一基本公式可以用于計(jì)算曲面的面積。參數(shù)曲面上與u,v參數(shù)空間的元素dudv對(duì)應(yīng)的面積元為:

wps_clip_image-3399

由參數(shù)曲面法向的計(jì)算可知,曲面的面積元素即為u,v方向上的偏導(dǎo)數(shù)的乘積的模。

wps_clip_image-26176

其幾何意義可以理解為參數(shù)曲面的面積微元是由u,v方向的偏導(dǎo)數(shù)的向量圍成的一個(gè)四邊形的面積,則整個(gè)曲面的面積即是對(duì)面積元素求積分。由于參數(shù)曲面有兩個(gè)參數(shù),所以若要計(jì)算曲面的面積,只需要對(duì)面積元素計(jì)算二重積分即可。

5.Gauss Integration for Area

OpenCASCADE的math包中提供了多重積分的計(jì)算類math_GaussMultipleIntegration,由類名可知積分算法采用了Gauss積分算法。下面通過具體代碼來說明OpenCASCADE中計(jì)算曲面積分的過程。要計(jì)算積分,先要定義被積函數(shù)。因?yàn)閰?shù)曲面與參數(shù)曲線不同,參數(shù)曲線只有一個(gè)參數(shù),而參數(shù)曲面有兩個(gè)參數(shù),所以是一個(gè)多元函數(shù)。

//! 2D variable function for surface area evaluation.
class math_AreaFunction : public math_MultipleVarFunction
{
public:
    math_AreaFunction(const Handle(Geom_Surface)& theSurface)
: mySurface(theSurface)
{
}
virtual Standard_Integer NbVariables() const
{
return 2;
}
virtual Standard_Boolean Value(const math_Vector& X, Standard_Real& Y)
{
        gp_Pnt aP;
        gp_Vec aDu;
        gp_Vec aDv;
        mySurface->D1(X(1), X(2), aP, aDu, aDv);
        Y = aDu.Crossed(aDv).Magnitude();
return Standard_True;
}
private:
    Handle(Geom_Surface) mySurface;
};

 

由于參數(shù)曲面是多元函數(shù),所以從類math_MultipleVarFunction派生,并在虛函數(shù)NbVariables()中說明有兩個(gè)變量。在虛函數(shù)Value()中計(jì)算面積元素的值,即根據(jù)曲面第一基本公式中面積元素的定義,對(duì)參數(shù)曲面求一階導(dǎo)數(shù),計(jì)算兩個(gè)偏導(dǎo)數(shù)向量的叉乘的模。

有了被積函數(shù),只需要在定義域?qū)ζ溆?jì)算二重積分,相應(yīng)代碼如下所示:

void evalArea(const Handle(Geom_Surface)& theSurface, const math_Vector& theLower, const math_Vector& theUpper)
{
    math_IntegerVector aOrder(1, 2, math::GaussPointsMax());
    math_AreaFunction aFunction(theSurface);
    math_GaussMultipleIntegration anIntegral(aFunction, theLower, theUpper, aOrder);
if (anIntegral.IsDone())
{
        anIntegral.Dump(std::cout);
}
}

 

通過theLower和theUpper指定定義域,由于采用了Gauss-Legendre算法計(jì)算二重積分,所以需要指定階數(shù),且階數(shù)越高積分結(jié)果精度越高,這里使用了OpenCASCADE中最高的階數(shù)。

下面通過對(duì)基本曲面的面積計(jì)算來驗(yàn)證結(jié)果的正確性,并將計(jì)算結(jié)果和OpenCASCADE中計(jì)算面積的類BRepGProp::SurfaceProperties()結(jié)果進(jìn)行對(duì)比。

6.Elementary Surface Area Test

下面通過對(duì)OpenCASCADE中幾個(gè)初等曲面的面積進(jìn)行計(jì)算,代碼如下所示:

/*
Copyright(C) 2017 Shing Liu(eryar@163.com)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files(the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, 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.
*/
#include <gp_Pnt.hxx>
#include <gp_Vec.hxx>
#include <math.hxx>
#include <math_Function.hxx>
#include <math_MultipleVarFunction.hxx>
#include <math_GaussMultipleIntegration.hxx>
#include <Geom_Plane.hxx>
#include <Geom_ConicalSurface.hxx>
#include <Geom_CylindricalSurface.hxx>
#include <Geom_SphericalSurface.hxx>
#include <Geom_ToroidalSurface.hxx>
#include <Geom_BSplineSurface.hxx>
#include <Geom_RectangularTrimmedSurface.hxx>
#include <GeomConvert.hxx>
#include <GProp_GProps.hxx>
#include <TopoDS_Face.hxx>
#include <BRepGProp.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#pragma comment(lib, "TKernel.lib")
#pragma comment(lib, "TKMath.lib")
#pragma comment(lib, "TKG2d.lib")
#pragma comment(lib, "TKG3d.lib")
#pragma comment(lib, "TKGeomBase.lib")
#pragma comment(lib, "TKGeomAlgo.lib")
#pragma comment(lib, "TKBRep.lib")
#pragma comment(lib, "TKTopAlgo.lib")
//! 2D variable function for surface area evaluation.
class math_AreaFunction : public math_MultipleVarFunction
{
public:
    math_AreaFunction(const Handle(Geom_Surface)& theSurface)
        : mySurface(theSurface)
    {
    }
    virtual Standard_Integer NbVariables() const
    {
        return 2;
    }
    virtual Standard_Boolean Value(const math_Vector& X, Standard_Real& Y)
    {
        gp_Pnt aP;
        gp_Vec aDu;
        gp_Vec aDv;
        Standard_Real E = 0.0;
        Standard_Real F = 0.0;
        Standard_Real G = 0.0;
        mySurface->D1(X(1), X(2), aP, aDu, aDv);
        E = aDu.Dot(aDu);
        F = aDu.Dot(aDv);
        G = aDv.Dot(aDv);
        Y = Sqrt(E * G - F * F);
        //Y = aDu.Crossed(aDv).Magnitude();
        return Standard_True;
    }
private:
    Handle(Geom_Surface) mySurface;
};
void evalArea(const Handle(Geom_Surface)& theSurface, const math_Vector& theLower, const math_Vector& theUpper)
{
    math_IntegerVector aOrder(1, 2, math::GaussPointsMax());
    math_AreaFunction aFunction(theSurface);
    math_GaussMultipleIntegration anIntegral(aFunction, theLower, theUpper, aOrder);
    if (anIntegral.IsDone())
    {
        anIntegral.Dump(std::cout);
    }
}
void evalArea(const Handle(Geom_BoundedSurface)& theSurface)
{
    math_IntegerVector aOrder(1, 2, math::GaussPointsMax());
    math_Vector aLower(1, 2, 0.0);
    math_Vector aUpper(1, 2, 0.0);
    theSurface->Bounds(aLower(1), aUpper(1), aLower(2), aUpper(2));
    math_AreaFunction aFunction(theSurface);
    math_GaussMultipleIntegration anIntegral(aFunction, aLower, aUpper, aOrder);
    if (anIntegral.IsDone())
    {
        anIntegral.Dump(std::cout);
    }
}
void testFace(const TopoDS_Shape& theFace)
{
    GProp_GProps aSurfaceProps;
    BRepGProp::SurfaceProperties(theFace, aSurfaceProps);
    std::cout << "Face area: " << aSurfaceProps.Mass() << std::endl;
}
void testPlane()
{
    std::cout << "====== Test Plane Area =====" << std::endl;
    Handle(Geom_Plane) aPlaneSurface = new Geom_Plane(gp::XOY());
    math_Vector aLower(1, 2);
    math_Vector aUpper(1, 2);
    // Parameter U range.
    aLower(1) = 0.0;
    aUpper(1) = 2.0;
    // Parameter V range.
    aLower(2) = 0.0;
    aUpper(2) = 3.0;
    evalArea(aPlaneSurface, aLower, aUpper);
    // Convert to BSpline Surface.
    Handle(Geom_RectangularTrimmedSurface) aTrimmedSurface =
        new Geom_RectangularTrimmedSurface(aPlaneSurface, aLower(1), aUpper(1), aLower(2), aUpper(2));
    Handle(Geom_BSplineSurface) aBSplineSurface = GeomConvert::SurfaceToBSplineSurface(aTrimmedSurface);
    evalArea(aBSplineSurface);
    // Test Face.
    TopoDS_Face aFace = BRepBuilderAPI_MakeFace(aTrimmedSurface, Precision::Confusion()).Face();
    testFace(aFace);
    aFace = BRepBuilderAPI_MakeFace(aBSplineSurface, Precision::Confusion()).Face();
    testFace(aFace);
}
void testCylinder()
{
    std::cout << "====== Test Cylinder Area =====" << std::endl;
    Handle(Geom_CylindricalSurface) aCylindrialSurface = new Geom_CylindricalSurface(gp::XOY(), 1.0);
    math_Vector aLower(1, 2);
    math_Vector aUpper(1, 2);
    aLower(1) = 0.0;
    aUpper(1) = M_PI * 2.0;
    aLower(2) = 0.0;
    aUpper(2) = 3.0;
    evalArea(aCylindrialSurface, aLower, aUpper);
    // Convert to BSpline Surface.
    Handle(Geom_RectangularTrimmedSurface) aTrimmedSurface =
        new Geom_RectangularTrimmedSurface(aCylindrialSurface, aLower(1), aUpper(1), aLower(2), aUpper(2));
    Handle(Geom_BSplineSurface) aBSplineSurface = GeomConvert::SurfaceToBSplineSurface(aTrimmedSurface);
    evalArea(aBSplineSurface);
    // Test Face.
    TopoDS_Face aFace = BRepBuilderAPI_MakeFace(aTrimmedSurface, Precision::Confusion()).Face();
    testFace(aFace);
    aFace = BRepBuilderAPI_MakeFace(aBSplineSurface, Precision::Confusion()).Face();
    testFace(aFace);
}
void testSphere()
{
    std::cout << "====== Test Sphere Area =====" << std::endl;
    Handle(Geom_SphericalSurface) aSphericalSurface = new Geom_SphericalSurface(gp::XOY(), 1.0);
    math_Vector aLower(1, 2);
    math_Vector aUpper(1, 2);
    aSphericalSurface->Bounds(aLower(1), aUpper(1), aLower(2), aUpper(2));
    evalArea(aSphericalSurface, aLower, aUpper);
    // Convert to BSpline Surface.
    Handle(Geom_BSplineSurface) aBSplineSurface = GeomConvert::SurfaceToBSplineSurface(aSphericalSurface);
    evalArea(aBSplineSurface);
    // Test Face.
    TopoDS_Face aFace = BRepBuilderAPI_MakeFace(aSphericalSurface, Precision::Confusion()).Face();
    testFace(aFace);
    aFace = BRepBuilderAPI_MakeFace(aBSplineSurface, Precision::Confusion()).Face();
    testFace(aFace);
}
void test()
{
    testPlane();
    testSphere();
    testCylinder();
}
int main(int argc, char* argv[])
{
    test();
    return 0;
}

 

計(jì)算結(jié)果如下圖所示:

wps_clip_image-21244

上述代碼計(jì)算了曲面的面積,再將曲面轉(zhuǎn)換成B樣條曲面,再使用算法計(jì)算面積。再將曲面和轉(zhuǎn)換的B樣條曲面生成拓樸面,利用OpenCASCADE中計(jì)算曲面面積功能進(jìn)行對(duì)比。使用自定義函數(shù)math_AreaFunction利用多重積分類計(jì)算的結(jié)果與OpenCASCADE中計(jì)算曲面面積的值是一致的。當(dāng)把曲面轉(zhuǎn)換成B樣條曲面后,OpenCASCADE計(jì)算的曲面面積偏大。

7.Conclusion

在學(xué)習(xí)《高等數(shù)學(xué)》的積分時(shí),其主要的一個(gè)應(yīng)用就是計(jì)算弧長、面積和體積等。學(xué)習(xí)高數(shù)抽象概念時(shí),總會(huì)問學(xué)了高數(shù)有什么用?就從計(jì)算機(jī)圖形方面來看,可以利用數(shù)學(xué)工具對(duì)任意曲線求弧長,對(duì)任意曲面計(jì)算面積等,更具一般性。

通過自定義被積函數(shù)再利用積分算法來計(jì)算任意曲面的面積,將理論與實(shí)踐結(jié)合起來了。即將曲面的第一基本公式與具體的代碼甚至可以利用OpenCASCADE生成對(duì)應(yīng)的圖形,這樣抽象的理論就直觀了,更便于理解相應(yīng)的概念。

8.References

1.朱心雄. 自由曲線曲面造型技術(shù). 科學(xué)出版社. 2000

2.陳維桓. 微分幾何. 北京大學(xué)出版社. 2006

3.同濟(jì)大學(xué)數(shù)學(xué)教研室. 高等數(shù)學(xué). 高等教育出版社. 1996

Feedback

# re: OpenCASCADE 參數(shù)曲面面積  回復(fù)  更多評(píng)論   

2020-05-14 11:56 by 七星重劍
真專業(yè),佩服

# re: OpenCASCADE 參數(shù)曲面面積  回復(fù)  更多評(píng)論   

2020-05-15 11:09 by eryar
@七星重劍
這些算法最后都是數(shù)學(xué)理論的應(yīng)用,能理論聯(lián)系實(shí)踐挺有收獲的
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久激情综合| 亚洲图片欧洲图片日韩av| 久久大逼视频| 永久免费精品影视网站| 美女视频黄免费的久久| 国产亚洲精品美女| 亚洲日本aⅴ片在线观看香蕉| 久久免费偷拍视频| 久久影视精品| 夜夜嗨av一区二区三区| 999亚洲国产精| 国产精品稀缺呦系列在线| 欧美资源在线观看| 久久综合九九| 亚洲一区二区三区在线播放| 午夜精品99久久免费| 精品成人国产在线观看男人呻吟| 欧美激情欧美激情在线五月| 欧美日韩午夜剧场| 久久精品国产精品亚洲综合| 蜜臀av性久久久久蜜臀aⅴ| 久久精品一区二区三区不卡牛牛| 午夜伦欧美伦电影理论片| 亚洲福利av| 亚洲午夜国产一区99re久久| 在线欧美日韩| 亚洲先锋成人| 亚洲国产精品久久91精品| 亚洲性夜色噜噜噜7777| 亚洲国产精品电影| 亚洲欧美日韩国产综合精品二区| 亚洲国产黄色| 亚欧成人在线| 亚洲视频久久| 欧美国内亚洲| 另类天堂视频在线观看| 国产精品啊啊啊| 亚洲第一在线综合在线| 国产精品人人做人人爽人人添| 欧美高清在线| 国产最新精品精品你懂的| 一区二区三区www| 亚洲美女电影在线| 久久国产主播精品| 香蕉久久精品日日躁夜夜躁| 欧美人在线视频| 亚洲第一视频| 1769国内精品视频在线播放| 午夜精品在线看| 亚洲欧美日韩综合国产aⅴ| 欧美激情视频一区二区三区免费| 久久久天天操| 国产麻豆综合| 亚洲午夜av| 亚洲尤物在线视频观看| 欧美日韩成人综合天天影院| 欧美激情精品久久久久久久变态| 国产亚洲欧美一区二区| 亚洲一区二区三区免费在线观看| 中文av字幕一区| 欧美日韩黄视频| 日韩视频中文| 在线视频亚洲一区| 欧美日韩一区三区| 9i看片成人免费高清| 中文日韩在线视频| 欧美小视频在线观看| 一本色道久久综合精品竹菊| 亚洲午夜一级| 国产欧美日韩一区二区三区在线| 亚洲一区久久| 久久久久久久高潮| 在线观看三级视频欧美| 久久综合伊人| 亚洲精品美女在线观看播放| 一本大道久久精品懂色aⅴ| 欧美三级在线播放| 亚洲一区二区在线看| 欧美与欧洲交xxxx免费观看| 国产伊人精品| 欧美91精品| 亚洲少妇最新在线视频| 久久成人精品无人区| 精品粉嫩aⅴ一区二区三区四区| 狼人天天伊人久久| 亚洲精品一区在线观看| 亚洲欧美一区二区三区极速播放| 国产亚洲一本大道中文在线| 久久人体大胆视频| 日韩一区二区高清| 久久精品99国产精品酒店日本| 亚洲电影av| 欧美婷婷久久| 久久日韩精品| 9色精品在线| 女同性一区二区三区人了人一| 亚洲精品欧美日韩专区| 国产精品拍天天在线| 久久最新视频| 亚洲一区二区少妇| 欧美高清不卡在线| 香蕉免费一区二区三区在线观看| 激情亚洲一区二区三区四区| 欧美巨乳在线观看| 久久频这里精品99香蕉| 正在播放亚洲| 亚洲国产精品久久人人爱蜜臀 | 午夜精品福利一区二区三区av | 亚洲图片欧洲图片日韩av| 狠狠色丁香婷综合久久| 国产精品激情电影| 美女999久久久精品视频| 亚洲欧美电影院| 亚洲人成绝费网站色www| 久久亚洲图片| 欧美一级大片在线免费观看| 亚洲美女精品一区| 亚洲第一区在线| 国产精品综合久久久| 欧美日韩国产麻豆| 免费成人在线视频网站| 性视频1819p久久| 这里只有精品丝袜| 99成人在线| 亚洲人成小说网站色在线| 女仆av观看一区| 久久视频精品在线| 欧美制服第一页| 亚洲欧美日韩在线一区| 一本色道久久综合亚洲精品按摩| 亚洲国产小视频在线观看| 国内伊人久久久久久网站视频 | 欧美日韩一区二区三区免费| 欧美成人一区二区在线| 麻豆av一区二区三区| 久久精品一区二区三区中文字幕| 欧美一区2区三区4区公司二百| 亚洲素人在线| 一本色道久久综合亚洲精品按摩 | 久久精品在线视频| 欧美中文在线字幕| 久久精品理论片| 久久精彩视频| 久久久久久久999| 久久一综合视频| 欧美不卡一卡二卡免费版| 嫩草成人www欧美| 欧美成人黑人xx视频免费观看| 久久综合狠狠综合久久激情| 久久一区视频| 亚洲国产精品一区二区尤物区| 欧美激情国产日韩| 亚洲精品黄色| 亚洲午夜伦理| 久久精品国产在热久久| 免费成人高清视频| 欧美日韩视频第一区| 国产精品一卡二卡| 极品少妇一区二区| 亚洲精品欧美一区二区三区| 一本久道综合久久精品| 亚洲男女自偷自拍图片另类| 欧美综合国产| 欧美韩国一区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产一区欧美日韩| 久久久人成影片一区二区三区观看| 一区二区久久久久久| 亚洲一区三区视频在线观看| 亚洲欧美日韩一区二区| 裸体一区二区三区| 欧美午夜精品一区| 黄色小说综合网站| 日韩一二三在线视频播| 欧美在线播放一区| 亚洲国产精品久久久久秋霞不卡| 一区二区久久久久久| 久久久综合香蕉尹人综合网| 欧美久久久久中文字幕| 国产日本亚洲高清| 日韩视频不卡中文| 久久久精品久久久久| 亚洲精品中文字| 久久久久国产免费免费| 欧美日韩一区三区四区| 尤物在线精品| 欧美亚洲色图校园春色| 亚洲国产精品一区二区第一页| 午夜精品久久久久久久男人的天堂| 欧美国产第二页| 精品二区久久| 欧美在线亚洲| 亚洲图片欧美日产| 欧美激情1区2区3区| 国产精品免费一区二区三区在线观看| 国产精品vvv| 亚洲六月丁香色婷婷综合久久| 久久精品国产免费看久久精品| 亚洲精选国产| 欧美大胆成人|