精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 計算坐標點距離,平行線交點算法詳解

開發 前端
到這里,詳細介紹了平面坐標系下的距離判斷。線段平行和線段交點的計算。關于斜率的計算,稍微涉及了高中的知識。但是整體的計算過程也就初中水平了。

1. 前言

主要記錄一些關于坐標和線段的計算方法。因為經常會碰見,需要在平面上,計算坐標點。

例如兩個坐標點之間的距離,兩個線段是否平行,兩個不相交的線段的交點。

由于程序中的坐標原點,都是左上角開始的。所以很少涉及象限的問題。以下的一些算法,不會強調象限問題。

這里,主要介紹如何使用勾股定理計算坐標距離,斜率計算線段交點等。

2. 根據兩個坐標點,計算距離

平面中,兩點之間,直線最短。而在已知兩個坐標點的x軸和y軸的情況下。我們可以通過勾股定理,來計算兩個坐標點的距離。

因為,兩個坐標點之間x軸的距離和y軸的距離可以看做三角形的兩條直角邊。斜邊就是我們要計算的距離了。

而勾股定理為:a^2^+b^2^=C^2^

讓我們帶入到代碼中來實現:

public double getPointDistance(Point point1, Point point2) {
int a = point2.y - point1.y;
int b = point2.x - point1.x;
return Math.sqrt(a * a + b * b);
}

兩個坐標point1,point2 其實順序無所謂。

兩個x軸坐標相減,得到的是在x軸上的距離。這個值可能為正,也可能為負。但無所謂,因為進行平方之后。只會是正數。

同理,Y軸也是一樣的。所以我們計算時不用管哪個坐標點是前還是后。

Math.sqrt()是 java 提供的開平方工具。

我們得到的X軸的距離和Y軸的距離,都是相對于x軸和y軸垂直的。所以這兩個距離組合的就是直角三角形的兩條直角邊。

兩點的距離就是直角三角形的斜邊了。也就是上面公式中的勾股定義直接計算即可。

有些小伙伴可能就會問了,如果這兩個點的Y軸或者X軸的值是相同的。那么還可以這么計算么?

結論當然是可以了。

用上面的代碼舉例子,如果兩個坐標點的Y軸相同。那么它們的距離實際上就是X軸的距離。

int a = point2.y - point1.y; //兩個值相同,那么a的結果就是0
int b = point2.x - point1.x; // 那么距離就是 b的值。
// 帶入進去0的平方也是0.那么就是b的平方進行開方運算。結果也就是b。(來源:zinyan.com
Math.sqrt(0+b*b);

所以,如果兩個坐標點的Y軸相同,或者X軸相同。那么最后計算的結果仍然是正確的。

但,我們可以添加一個判斷,來減少這種情況下的多余的平方,開方計算。

所以,完整版代碼如下所示:

public double getPointDistance(Point point1, Point point2) {
int a = point2.y - point1.y;
int b = point2.x - point1.x;
if (a == 0)
return b;
if (b == 0)
return a;
return Math.sqrt(a * a + b * b);
}

但是,如果我們的x軸和y軸的坐標值是 double? 或者 float 。就不能這么判斷了。

因為浮點運算,本身就不精確。我們判斷的時候,需要考慮到這個浮動范圍。

我們也可以不用考慮這方面的優化。因為多一個平方開方,也耗費不了多少內存和時間。

3. 計算兩個線段的交點

計算:在平面直角坐標系中點A和點B組成了線段A,點C和點D組成了線段B。如果他們有交點。那么交點坐標是多少。

而在平面直角坐標系中,同一平面內兩條直線只有相交和平行兩種情況。這個定義是一個數學定理。

所以我們計算交點的時候,可以先處理一下兩個線段是否平行的問題。

3.1 判斷線段是否平行

那么,該如何判斷兩個線段是否平行呢?很簡單比較兩個線段的斜率是否相同即可。

斜率,計算的是一條直線相對橫坐標軸的傾斜角度。所以它也叫做角系數。

例如,這兩個線段,都相較于X軸傾斜了30°,那么不就是證明了這兩個線段是平行線了么。

而直線的斜率公式為:k=(y2-y1)/(x2-x1)。其中K值就是斜率結果了。

那么線段是否平行就可以寫為:

public boolean getParallel(Point pointA, Point pointB, Point pointC, Point pointD) {
int line1K = (pointB.y - pointA.y) / (pointB.x - pointA.x);
int line2K = (pointD.y - pointC.y) / (pointD.x - pointC.x);
return line1K==line2K
}

但是如果碰見了線段的x軸是相同的怎么辦?也就是說線段垂直于X軸上。那么上面的方法就有問題了。

因為pointB.x - pointA.x =0了。

所以,我們需要進行變種:

//實際比較模式:
(pointB.y - pointA.y) / (pointB.x - pointA.x)==(pointD.y - pointC.y) / (pointD.x - pointC.x)

//改除法為乘法:
(pointB.y - pointA.y) * (pointD.x - pointC.x) == (pointD.y - pointC.y) * (pointB.x - pointA.x)

這兩個等式是相同的。

這樣我們就可以判斷兩個線條是否平行了。完整代碼如下:

public boolean getParallel(Point pointA, Point pointB, Point pointC, Point pointD) {
return (pointB.y - pointA.y) * (pointD.x - pointC.x) == (pointD.y - pointC.y) * (pointB.x - pointA.x)
}

那么,方法中的坐標點,有前后要求么?答案是沒有的。只需要知道這個直線上的任意兩點就可以。

點斜式斜率公式:K=(y2-y1)/(x2-x1)?也可以寫為:K=(y1-y2)/(x1-x2) 這兩個公式的結果是等值的。

公式中的K?就是斜率值,而x和y是坐標點X軸和Y軸的值。

將上面的公式進行簡單的變換,我們可以得到:

  • y2=K(x2-x1)+y1
  • x2=(y2-y1)/K+x1  

也就是說,x1,y1 是已知的坐標點。斜率K也知道的情況下。我們如果知道交點的X軸就可以計算出Y軸坐標。反之當我們知道Y軸坐標也可以計算出X軸坐標。

3.2 計算線段交點

在某種情況下,交點坐標的某個值是可以快速確定的。例如其中一條線段垂直X軸。或者平行于X軸。那么它們兩個線段的交點的X軸或者Y軸就是已經明確了。

例如有坐標點:Point pointA?, Point pointB?, Point pointC?, Point pointD。其中 pointA 和 pointB 組合成線段1,pointC 和pointD組合成線段2。

public  Point getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {
Point point =new Point();
if (pointA.x - pointB.x == 0) {
//線段1 兩個坐標的x軸相等 說明是垂直x軸的情況,它們的交點x軸就是pointA的x軸
point.x= pointA.x ;
//解釋1:線段1垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段2的坐標計算斜率。
//解釋2:我在其他方法中判斷過平行線的情況,所以如果線段1垂直,那么線段2肯定不會垂直。
int k = (pointD.y-pointC.y)/(pointD.x-pointC.x);
//解釋3:代入公式:y2=K(x2-x1)+y1。在已知x2,x1,y1,K的情況下求y2
point.y= k*(point.x-pointC.x)+pointC.y;
}else if (pointC.x - pointD.x == 0) {
//線段2 垂直X軸的情況。它們的交點X軸就是線段2中的坐標的X軸
point.x = pointC.x;
//解釋1:線段2垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段1的坐標計算斜率。
int k = (pointB.y - pointA.y) / (pointB.x - pointA.x);
//代入公式進行計算y軸坐標值
point.y = k * (point.x - pointA.x) + pointA.y;
}
return point;
}

可以得到垂直的,而平行于x軸的情況也可以參照上面的示例進行額外處理:

public  Point getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {
Point point =new Point();
if (pointA.x - pointB.x == 0) {
//線段1 兩個坐標的x軸相等 說明是垂直x軸的情況,它們的交點x軸就是pointA的x軸
point.x= pointA.x ;
//解釋1:線段1垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段2的坐標計算斜率。
//解釋2:我在其他方法中判斷過平行線的情況,所以如果線段1垂直,那么線段2肯定不會垂直。
//因為是交點,所以交點坐標是滿足線段2的斜率公式的。
int k = (pointD.y-pointC.y)/(pointD.x-pointC.x);
//解釋3:代入公式:y2=K(x2-x1)+y1。 在已知x2,x1,y1,K的情況下求y2
point.y= k*(point.x-pointC.x)+pointC.y;
}else if (pointC.x - pointD.x == 0) {
//線段2 垂直X軸的情況。它們的交點X軸就是線段2中的坐標的X軸
point.x = pointC.x;
//解釋1:線段2垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段1的坐標計算斜率。
int k = (pointB.y - pointA.y) / (pointB.x - pointA.x);
//代入公式 進行計算y軸坐標值
point.y = k * (point.x - pointA.x) + pointA.y;
}else if(pointA.y-pointB.y==0){
//說明線段1,平行于X軸
point.y= pointA.y;
//使用線段2,計算斜率K。因為線段1平行x軸是沒有斜率的
int k = (pointD.y-pointC.y)/(pointD.x-pointC.x);
//代入公式: x2=(y2-y1)/K+x1 在已知y2,y1,K,x1的情況下求x2
point.x = (point.y - line2start.y) / k + line2start.x;
}else if(pointD.y-pointC.y==0){
//說明線段2,平行于X軸
point.y = pointD.y;
int k = (pointB.y-pointA.y)/(pointB.x-pointA.x);
//使用線段1,計算斜率K。因為線段2平行x軸是沒有斜率的zinyan.com
point.x =(point.y - line1start.y) / k + line1start.x;
}


return point;

}

通過上面的方法,應該給大家詳細介紹了。線段平行或者垂直情況下。快速計算交點的運算邏輯。

但是,如果線段并不垂直或者平行于X軸或者Y軸。那么如何計算呢?在實際處理過程中,不垂直才是最多的場景。所以上面的方法還需要進行擴充。

仍然使用:Point pointA?, Point pointB?, Point pointC?, Point pointD  這四個坐標點,計算未知的交點。

假如交點坐標是Point point。我們來一步步推導相關的方程組。

int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //線段1的斜率
int k2= (pointD.y - pointC.y) / (pointD.x - pointC.x); //線段2的斜率

線段1的斜率和線段2的斜率肯定是不一樣的。但是線段公式中斜率是一個常量。也就是說只要是直線上的任意兩點,計算出來的斜率是固定的。我們再根據點斜式公式的變種:y2=K(x2-x1)+y1? 和x2=(y2-y1)/K+x1。可以得到以下:

PS: x1 ,x2,y1,y2 只是表示的變量,不是數值*2哦。別弄混了。

int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //線段1的斜率
int k2= (pointD.y - pointC.y) / (pointD.x - pointC.x); //線段2的斜率


point.x =(point.y-pointB.y)/k1+porintB.x; // 根據線段1的點斜式公式可以得到的方程組
point.x =(point.y-pointD.y)/k2+porintD.x; // 根據線段2的點斜式公式可以得到的方程組
point.y = k1(point.x-pointA.x)+pointA.y;
point.y = k2(point.x-pointC.x)+pointC.y;

在上面的計算過程中,x和y的兩種算法得到的結果是相同的。我們先求x軸坐標的話,從y的兩個等式進行計算。得到以下方程組:

k1(point.x-pointA.x)+pointA.y-(k2(point.x-pointC.x)+pointC.y)=0; //第一步
//第一步去除乘法括號
k1*point.x-k1*pointA.x+pointA.y-(k2*point.x-k2*pointC.x+pointC.y)=0;
//去除所有的括號
k1*point.x-k1*pointA.x+pointA.y-k2*point.x+k2*pointC.x-pointC.y=0;
//由于point.x 是未知數,其他的都是已知數。我們將未知數和已知進行等式的移動, 從左邊移動到右邊的時候,正負要互換
k1*point.x-k2*point.x=k1*pointA.x-pointA.y-k2*pointC.x+pointC.y;
//左邊的等式可以繼續簡化
(k1-k2)*point.x = k1*pointA.x-pointA.y-k2*pointC.x+pointC.y;
//確保左邊只有一個point.x 這個未知變量
point.x= (k1*pointA.x-pointA.y-k2*pointC.x+pointC.y)/(k1-k2);

通過上面的推導,當我們知道線段1的斜率,線段2的斜率。以及線段1的某個坐標點坐標。線段2的某個坐標點坐標。

我們就可以直接通過公式:(k1*pointA.x-pointA.y-k2*pointC.x+pointC.y)/(k1-k2)計算出交點的x軸坐標。

當我們知道x軸坐標。之后通過y2=K(x2-x1)+y1點斜式方程的變種。直接計算y軸的坐標:

point.x = (k1*pointA.x-pointA.y-k2*pointC.x+pointC.y)/(k1-k2);
point.y = k1(point.x-pointA.x)+pointA.y; //直接得到Y值的坐標

上面計算y軸坐標是使用的線段1的斜率進行計算的。所以x1和y1的值需要時線段1上的坐標點。

我們也可以使用線段2進行計算得到y軸值:

point.y = k2(point.x-pointC.x)+pointC.y; //直接得到Y值的坐標

到這里,我們就可以得到斜線的交點了。我們總結一下方法:

public  Point getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {
Point point =new Point();
if (pointA.x - pointB.x == 0) {
//線段1 兩個坐標的x軸相等 說明是垂直x軸的情況,它們的交點x軸就是pointA的x軸
point.x= pointA.x ;
//解釋1:線段1垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段2的坐標計算斜率。
//解釋2:我在其他方法中判斷過平行線的情況,所以如果線段1垂直,那么線段2肯定不會垂直。
//因為是交點,所以交點坐標是滿足線段2的斜率公式的。
int k = (pointD.y-pointC.y)/(pointD.x-pointC.x);
//解釋3:代入公式:y2=K(x2-x1)+y1。 在已知x2,x1,y1,K的情況下求y2
point.y= k*(point.x-pointC.x)+pointC.y;
}else if (pointC.x - pointD.x == 0) {
//線段2 垂直X軸的情況。它們的交點X軸就是線段2中的坐標的X軸
point.x = pointC.x;
//解釋1:線段2垂直X軸,所以它的斜率值計算是0.無法計算,所以我們使用線段1的坐標計算斜率。
int k = (pointB.y - pointA.y) / (pointB.x - pointA.x);
//代入公式 進行計算y軸坐標值(zinyan.com)
point.y = k * (point.x - pointA.x) + pointA.y;
}else if(pointA.y-pointB.y==0){
//說明線段1,平行于X軸
point.y= pointA.y;
//使用線段2,計算斜率K。因為線段1平行x軸是沒有斜率的
int k = (pointD.y-pointC.y)/(pointD.x-pointC.x);
//代入公式: x2=(y2-y1)/K+x1 在已知y2,y1,K,x1的情況下求x2
point.x = (point.y - line2start.y) / k + line2start.x;
}else if(pointD.y-pointC.y==0){
//說明線段2,平行于X軸
point.y = pointD.y;
int k = (pointB.y-pointA.y)/(pointB.x-pointA.x);
//使用線段1,計算斜率K。因為線段2平行x軸是沒有斜率的
point.x =(point.y - line1start.y) / k + line1start.x;
}else{
int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //線段1的斜率
int k2= (pointD.y - pointC.y) / (pointD.x - pointC.x); //線段2的斜率
point.x = (k1*pointA.x-pointA.y-k2*pointC.x+pointC.y)/(k1-k2);
point.y = k1(point.x-pointA.x)+pointA.y; //直接得到Y值的坐標
}


return point;
}

到這里,我們其實就可以獲取交點了。而除此以外,我們還可以通過斜截式公式,來計算交點

3.3 斜截式計算交點

我們上面的推導過程使用的都是點斜式的公式進行的。其實我們還可以通過直線的斜截式方程:y=kx+b來進行推導直線的交點。相較于點斜式,個人認為斜截式可能會更容易理解吧。

在公式中,K表達的是斜率。斜率計算公式在上面有介紹。就不重復了

而y和x就是我們的坐標點的Y軸值和X軸值。b就是Y軸截距。

在平面直角坐標系中,直線的Y軸截距是相等的。也就是說不管是在直線的哪個點,代入到上面的公式中來得到的b值都是固定的。

public  Point getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {
Point point =new Point();
/** 前面直角的方法省略了 主要是判斷斜線的交點*/
int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //得到線段1的 斜率K的值
int b1 = pointA.y - pointA.x * k1; //得到線段1的 Y截距 b的值

int k2 = (pointD.y - pointC.y) / (pointD.x - pointC.x); // 得到線段2的斜率K的值
//斜截式公式:y=kx+b ,進行簡單轉換一下就是:b= y-kx
int b2 = pointC.y - pointC.x * k2; //得到線段2的 Y截距b的值。在這里我們可以使用pointC的值,也可以使用pointD的值
}

然后,由于交點需要滿足線段1的斜截式,也需要滿足線段2的斜截式公式,所以我們可以得到:

point.y = k1 * point.x + b1; // y=kx+b
point.y = k2 * point.x + b2; // y=kx+b
//根據上面的公式轉換。
k1 * point.x + b1 = k2 * point.x + b2; //這樣整個表達式中就只有point.x 這一個變量了。
//根據數學表達式的規則,移動等號兩邊的數據。將未知數移動到左邊
k1 * point.x - k2 * point.x = b2 - b1;// 移動過程中要注意加減法
//然后再提取乘法
(k1 - k2) * point.x = b2 - b1;//再進行表達式變換
point.x = (b2 - b1)/(k1 - k2); //也就是最終的結果值了

當我們知道x值之后。代入斜截式中可以快速得到y值:

point.y = k1 * point.x + b1;

完整版本效果就是:

public  Point getCross1(Point pointA, Point pointB, Point pointC, Point pointD) {
Point point =new Point();
/** 前面直角的方法省略了 主要是判斷斜線的交點*/
int k1 = (pointB.y - pointA.y) / (pointB.x - pointA.x); //得到線段1的 斜率K的值
int b1 = pointA.y - pointA.x * k1; //得到線段1的 Y截距 b的值

int k2 = (pointD.y - pointC.y) / (pointD.x - pointC.x); // 得到線段2的斜率K的值
//斜截式公式:y=kx+b ,進行簡單轉換一下就是:b= y-kx
int b2 = pointC.y - pointC.x * k2; //得到線段2的 Y截距b的值。在這里我們可以使用pointC的值,也可以使用pointD的值


point.x = (b2 - b1)/(k1 - k2);
point.y = k1 * point.x + b1;
}

有些公式可能寫的結果是這樣的:

//情況1
point.x = (b2 - b1)/(k1 - k2);


//情況2
point.x = (b1 - b2)/(k2 - k1);

這兩個情況下,是等效的。在上面介紹了情況1的表達式是如何推導的。現在介紹一下如何推導出情況2:

point.y = k1 * point.x + b1; // y=kx+b
point.y = k2 * point.x + b2; // y=kx+b
//根據上面的公式轉換。
k1 * point.x + b1 = k2 * point.x + b2; //這樣整個表達式中就只有point.x 這一個變量了。
//將未知數移動到右側
b1-b2 = k2*point.x-k1*point.x;// 移動過程中要注意加減法


//然后再提取乘法
b1-b2 = (k2-k1)*point.x;//再進行表達式變換
point.x = (b1 - b2)/(k2 - k1); //也就是最終的結果值了

所以,這種表達式結果是一致的。

PS:在上面的代碼中,我的變量是int型的。那是因為我自定義的類型參數。你如果是double也是沒有關系的。單位格式不影響計算邏輯。只是最終結果值的精度有差異而已。

3. 小結

到這里,詳細介紹了平面坐標系下的距離判斷。線段平行和線段交點的計算。關于斜率的計算,稍微涉及了高中的知識。但是整體的計算過程也就初中水平了。

只是由于很長時間沒有接觸了。一些概念和公式都忘記完了。

所以,才會按照完全不懂的情況下。充分介紹一下這中間的運算過程。

后面可能會更新,如何計算角度。根據坐標點,計算運動方向等等吧。

責任編輯:武曉燕 來源: zinyan
相關推薦

2014-08-07 10:00:42

achartengin

2021-06-29 08:28:12

算法順序表數據

2021-06-28 06:15:14

算法Algorithm時間空間復雜度

2016-01-28 09:59:21

谷歌機器學習圍棋

2021-01-11 16:30:40

SQL數據庫函數

2014-06-16 16:07:37

大數據商業

2021-12-21 08:19:29

數據結構算法鏈表相交

2023-11-08 08:09:36

幾何算法解析幾何

2014-11-05 09:37:31

路由算法原理

2014-02-27 13:57:36

華為彈性計算云

2023-06-15 09:45:14

智能技術

2013-04-01 13:19:43

iOS定位與坐標算法

2021-11-10 16:07:01

鴻蒙HarmonyOS應用

2021-11-10 16:08:45

鴻蒙HarmonyOS應用

2011-04-08 16:17:29

Hashing

2012-03-15 10:50:07

英特爾光纖傳輸帶寬

2019-08-22 15:06:56

線程Java透傳

2021-10-03 15:08:32

Android

2011-11-30 10:57:01

云計算透明計算

2025-10-17 01:55:00

排序算法快速排序Lomuto
點贊
收藏

51CTO技術棧公眾號

高端美女服务在线视频播放| 国产无遮挡呻吟娇喘视频| 欧美videos粗暴| 亚洲欧美日韩国产手机在线| 91亚洲精品在线| 亚洲黄色一区二区| 日韩在线观看电影完整版高清免费悬疑悬疑| 制服视频三区第一页精品| 欧美亚洲日本一区二区三区 | 日韩亚洲欧美中文三级| 免费av手机在线观看| 97超碰人人在线| 成人国产精品免费网站| 国产精品视频公开费视频| 免费在线看黄网址| 欧美日一区二区| 亚洲国产天堂久久国产91| 欧美大尺度做爰床戏| av电影在线地址| 国产精品电影院| 欧美成熟毛茸茸复古| av无码精品一区二区三区宅噜噜| 模特精品在线| 久久久爽爽爽美女图片| 美国一级片在线观看| 欧美精品momsxxx| 精品动漫一区二区三区在线观看| 亚洲精品午夜在线观看| 在线观看特色大片免费视频| 一区二区三区波多野结衣在线观看 | 成人看片黄a免费看视频| 欧美日韩一区二区三区免费看| 精品久久一二三| 欧美野外wwwxxx| 亚洲男人的天堂网| 伊人久久婷婷色综合98网| 男同在线观看| 91麻豆精品视频| 国产精品国产精品国产专区蜜臀ah | 亚洲图区一区| 亚洲欧美综合网| 亚洲精品第一区二区三区| 欧美日韩在线精品一区二区三区激情综 | 国产欧美日韩亚洲精品| 午夜久久久久久久久久影院| 夜夜嗨一区二区三区| 欧美精品18videos性欧美| 乱h高h女3p含苞待放| 91综合在线| 久久夜色撩人精品| 国产成人久久久久| 天天射成人网| 久久精品中文字幕免费mv| 亚洲综合图片一区| 99精品综合| 久久久国产成人精品| 国产天堂av在线| 91成人影院| 另类图片亚洲另类| 青娱乐国产在线| 亚洲黄色影院| 4p变态网欧美系列| 好吊色在线视频| 奇米色一区二区| 国产综合久久久久| wwwav网站| a在线播放不卡| 美国av一区二区三区| 麻豆国产在线播放| 国产精品美女www爽爽爽| 异国色恋浪漫潭| 国产天堂在线播放视频| 黄色精品在线看| aa免费在线观看| 成人综合网站| 日韩女优视频免费观看| 亚洲美女在线播放| 欧美综合在线视频观看| 久久手机免费视频| 久久精品女人毛片国产| 一区二区三区四区五区精品视频| 日韩av电影在线播放| 少妇又紧又色又爽又刺激视频| 久久精品国产亚洲高清剧情介绍| 91亚洲精品视频| 深夜视频在线免费| 国产精品乱码久久久久久| 欧美做受777cos| 伊人久久综合一区二区| 91.成人天堂一区| 亚洲精品第二页| 精品视频免费在线观看| 九九久久久久久久久激情| 国产精品老女人| 精品一区二区三区久久| 国产偷国产偷亚洲高清97cao| 国产日韩精品在线看| 亚洲精品综合在线| 日韩在线xxx| 国产中文欧美日韩在线| 精品网站999www| 日韩三级久久久| 翔田千里一区二区| 92福利视频午夜1000合集在线观看| 少妇精品高潮欲妇又嫩中文字幕| 国产欧美精品一区二区色综合| 久久久国内精品| 91九色综合| 亚洲成在人线av| 夫妻性生活毛片| 久久久蜜桃一区二区人| 超碰97在线播放| 嫩草在线视频| 日本精品一区二区三区高清 | 伊人久久国产精品| 99久免费精品视频在线观看 | 久久免费国产| 国产福利久久精品| 国内精品久久久久久野外| 色激情天天射综合网| 88av在线播放| 欧美日韩ab| 91最新在线免费观看| 888av在线| 色老汉一区二区三区| 国产精品第9页| 四虎国产精品免费观看| 91福利视频网| 欧美一级一区二区三区| 亚洲欧美经典视频| 亚洲免费一级视频| 国产一区二区三区四区二区| 国内精品伊人久久| aaa国产视频| 亚洲欧美在线aaa| 天天色综合社区| 97超碰在线免费观看| av电影院在线看| 欧美一区二区视频网站| 神马久久精品综合| 精品一二三四区| 一区二区不卡在线视频 午夜欧美不卡' | 精品国产亚洲av麻豆| 国产精品麻豆网站| 午夜免费看视频| 999国产精品| 国产在线999| 福利视频在线| 日韩免费一区二区| 欧美精品久久久久性色| 国产一区二区三区不卡在线观看| 懂色av一区二区三区四区五区| 亚洲精品一区二区在线播放∴| 尤物九九久久国产精品的特点| 日韩电影在线观看一区二区| 国产三级欧美三级日产三级99| 蜜臀视频一区二区三区| 成人高清电影网站| 国产精品自拍网| 国产写真视频在线观看| 日韩欧美综合一区| 黄网站免费在线| 91在线免费视频观看| 青青草原成人网| 精品香蕉视频| 亚洲a级在线观看| 成人影音在线| 亚洲开心激情网| 中文字幕免费播放| 亚洲青青青在线视频| 女性生殖扒开酷刑vk| 一本久久知道综合久久| 欧美日韩另类综合| 亚洲欧美在线人成swag| 欧美日韩福利在线观看| 日中文字幕在线| 欧美日韩成人综合天天影院| 免费一级a毛片夜夜看| 91在线视频观看| 亚洲综合av在线播放| 国产精品激情| 欧美日韩国产综合视频在线| 日韩毛片免费视频一级特黄| 久久久久久久久久久免费| 牛牛影视精品影视| 91麻豆精品国产91久久久使用方法 | 欧美亚洲高清| 91pron在线| 色综合一本到久久亚洲91| 美女999久久久精品视频 | 一区二区三区日韩在线| 99在线精品视频免费观看20| 日韩欧美国产黄色| 日韩黄色免费观看| 久久久激情视频| 男人女人拔萝卜视频| 久久午夜视频| 久久久久久av无码免费网站下载| 久久91麻豆精品一区| 亚洲va欧美va在线观看| 综合日韩av| 久精品免费视频| 91这里只有精品| 亚洲国产一区二区三区四区| 国产又爽又黄又嫩又猛又粗| 精品久久久久久中文字幕| 四虎地址8848| 久久九九久精品国产免费直播| 国产chinesehd精品露脸| 日韩电影在线一区| 精品人妻少妇一区二区| 亚洲h色精品| 午夜老司机精品| 亚洲精品无吗| 国产精品制服诱惑| 高清国产一区二区三区四区五区| 国产精品高潮呻吟久久av黑人| 俺来也官网欧美久久精品| 久久久精品免费视频| 成年网站在线| 亚洲欧美精品中文字幕在线| 成人免费一级视频| 在线播放欧美女士性生活| 国产99久久久久久免费看| 婷婷综合五月天| 免费在线视频一区二区| 亚洲天堂精品视频| 久久精品三级视频| 久久精品一区二区三区不卡牛牛| 免费a v网站| 成人一区在线观看| 丰满人妻一区二区三区大胸 | а√天堂资源地址在线下载| 中文字幕在线观看日韩| 国产乱子伦三级在线播放| 亚洲精品视频在线观看视频| 日本成人动漫在线观看| 欧美成人艳星乳罩| 国产黄色高清视频| 日韩一卡二卡三卡国产欧美| av在线亚洲天堂| 日韩午夜在线播放| www久久久com| 精品福利一区二区三区| 人成网站在线观看| 亚洲精品www久久久久久广东| 欧美一区二区三区成人片在线| 精品卡一卡二卡三卡四在线| 亚洲精品福利网站| 亚洲精品一区二区三区精华液 | 国产麻豆精品一区| 欧美一级视频精品观看| 精品国产18久久久久久| 精品美女在线观看| 日韩精品系列| 亚洲性生活视频在线观看| 91在线不卡| 久久视频免费观看| 欧美黑人猛交的在线视频| 久久久视频精品| 电影网一区二区| 国产精品入口免费视| 91嫩草国产线观看亚洲一区二区 | 欧美整片在线观看| 成人免费av电影| 成人欧美一区二区三区在线| 91精品啪在线观看国产爱臀| 精品视频第一区| 欧美熟乱15p| 伊人再见免费在线观看高清版| 136国产福利精品导航网址| 国产日产欧美视频| 久热精品视频| www.51色.com| 91首页免费视频| 亚洲AV成人无码精电影在线| 亚洲午夜精品17c| 69视频免费看| 日韩欧美国产麻豆| 欧美精品久久久久久久久久丰满| 上原亚衣av一区二区三区| 人妖欧美1区| 日本三级韩国三级久久| www.久久99| 久久久国产精品一区二区三区| 日韩在线视屏| 国产精品va无码一区二区| 日本不卡视频一二三区| 成年人看片网站| 欧美国产日韩在线观看| 欧美又粗又大又长| 色94色欧美sute亚洲13| 国产精品无码天天爽视频| 亚洲精品短视频| 麻豆av在线免费看| 久久人人97超碰精品888| 国产精品高清乱码在线观看| av资源站久久亚洲| 精品久久不卡| 被灌满精子的波多野结衣| 另类人妖一区二区av| 免费的av网站| 亚洲免费观看在线观看| 国产精品尤物视频| 亚洲电影免费观看高清完整版在线| 午夜看片在线免费| 2019中文字幕在线| 无码国模国产在线观看| 先锋影音一区二区三区| 亚洲欧美日韩精品一区二区| 国产裸体视频网站| 国产精品色呦呦| 狠狠人妻久久久久久| 精品少妇一区二区三区免费观看 | 国产精品九九九| 国内精品免费| 777久久精品一区二区三区无码| 日韩av一区二区在线影视| 香港三日本8a三级少妇三级99| 亚洲少妇30p| 中文字幕男人天堂| 亚洲性日韩精品一区二区| 亚洲私拍视频| 极品尤物一区二区三区| 国产精品大片| 韩国三级在线播放| 自拍偷拍国产亚洲| 中文字幕在线观看免费| 亚洲男女性事视频| 丝袜老师在线| 久久久久国产精品视频| 91久久久久| 国产伦精品一区二区三区精品| 亚洲免费在线看| 国产乱淫av免费| 久久精品99久久久久久久久 | 欧美一区二区啪啪| 日本中文在线| 国产日韩精品一区二区三区在线| 免费a级黄色片| 亚洲一区二区三区在线看| 国产剧情精品在线| 日日狠狠久久偷偷四色综合免费| 三上悠亚激情av一区二区三区 | 欧美日韩精品免费| 国产特黄在线| 国产成人亚洲综合| 视频一区中文| 不卡av免费在线| 亚洲国产精品99久久久久久久久| 亚洲欧美一二三区| 亚洲天堂av综合网| 日韩不卡视频在线观看| 色播亚洲婷婷| 精品一区二区三区在线观看国产 | 91免费看片网站| 91精品二区| 奇米777在线视频| 夜夜精品视频一区二区| 成人午夜视频一区二区播放| 久久久久久综合网天天| 欧美美女在线直播| 欧美日韩在线中文| 国产精品婷婷午夜在线观看| 国产视频一区二区三| 欧美人在线视频| 日韩精品丝袜美腿| 一道本视频在线观看| 日韩美女久久久| 手机看片福利在线| 国产成人av在线播放| 欧美gayvideo| 人妻 丝袜美腿 中文字幕| 天天影视涩香欲综合网 | 欧美成人亚洲成人| 成人资源在线播放| 欧美三级午夜理伦三级| 中文字幕中文字幕中文字幕亚洲无线| 一级片视频网站| 久久久久久久电影一区| 欧美激情在线精品一区二区三区| 中文字幕视频三区| 五月天丁香久久| 男人天堂手机在线| 国模精品娜娜一二三区| 日本午夜一区二区| 久久久精品人妻一区二区三区四| 国产视频丨精品|在线观看| 欧美另类激情| 1024av视频| 亚洲人被黑人高潮完整版| 亚洲欧美日韩免费| 成人激情视频网| 亚洲自啪免费| 国产高潮国产高潮久久久91| 亚洲欧美日韩视频一区| 精品精品视频| www.xxx亚洲| 亚洲国产一区视频| 嫩草在线视频|