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

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

?? tcstan2.cpp

?? 并行TIN生成算法, 基于DeWall算法理論實現
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// TcsTan2.cpp
// 鄧雪清 2008/11/05

#include <time.h>
#include <math.h>
#include "TcsTan2.h"

// 分區結構
typedef struct tagTIN_Z {
	TCS_S32	 sco[2];	// 左下角
	TCS_S32	 eco[2];	// 右上角
	TCS_S32	 vpn;
	TIN_G	*G;
} TIN_Z;

// C0:本單元;C1:右單元;C2:上單元;C3:右上單元
TCS_V00 RmvDup2(TIN_C *C0, TIN_C *C1, TIN_C *C2, TIN_C *C3, TCS_F64 *P, TCS_F64 dup, TCS_S32 *pid, TCS_S32 &vpn)
{
	TCS_S32 i, n;
	TCS_F64 *p1, *p2;

	// 本單元
	{
		// 注意C0->sum可能在運行中改變
		for (i = 0; i < C0->sum - 1; i++)
		{
			p1 = P + 2 * C0->pid[i];
			for (n = i + 1; n < C0->sum; n++)
			{
				p2 = P + 2 * C0->pid[n];
				if (p1[0] - dup <= p2[0] && p2[0] <= p1[0] + dup &&
					p1[1] - dup <= p2[1] && p2[1] <= p1[1] + dup)
				{
					// 建立重合點映射關系
					pid[C0->pid[n]] = pid[C0->pid[i]];
					// 消除重合點
					RmxPid(C0, n);
					// 點數減1
					vpn--;
					// 回位
					n--;
				}
			}
		}
	}
	// 右單元
	if (C1)
	{
		for (i = 0; i < C0->sum; i++)
		{
			p1 = P + 2 * C0->pid[i];
			for (n = 0; n < C1->sum; n++)
			{
				p2 = P + 2 * C1->pid[n];
				if (p1[0] - dup <= p2[0] && p2[0] <= p1[0] + dup &&
					p1[1] - dup <= p2[1] && p2[1] <= p1[1] + dup)
				{
					// 建立重合點映射關系
					pid[C1->pid[n]] = pid[C0->pid[i]];
					// 消除重合點
					RmxPid(C1, n);
					// 點數減1
					vpn--;
					// 回位
					n--;
				}
			}
		}
	}
	// 上單元
	if (C2)
	{
		for (i = 0; i < C0->sum; i++)
		{
			p1 = P + 2 * C0->pid[i];
			for (n = 0; n < C2->sum; n++)
			{
				p2 = P + 2 * C2->pid[n];
				if (p1[0] - dup <= p2[0] && p2[0] <= p1[0] + dup &&
					p1[1] - dup <= p2[1] && p2[1] <= p1[1] + dup)
				{
					// 建立重合點映射關系
					pid[C2->pid[n]] = pid[C0->pid[i]];
					// 消除重合點
					RmxPid(C2, n);
					// 點數減1
					vpn--;
					// 回位
					n--;
				}
			}
		}
	}
	// 右上單元
	if (C3)
	{
		for (i = 0; i < C0->sum; i++)
		{
			p1 = P + 2 * C0->pid[i];
			for (n = 0; n < C3->sum; n++)
			{
				p2 = P + 2 * C3->pid[n];
				if (p1[0] - dup <= p2[0] && p2[0] <= p1[0] + dup &&
					p1[1] - dup <= p2[1] && p2[1] <= p1[1] + dup)
				{
					// 建立重合點映射關系
					pid[C3->pid[n]] = pid[C0->pid[i]];
					// 消除重合點
					RmxPid(C3, n);
					// 點數減1
					vpn--;
					// 回位
					n--;
				}
			}
		}
	}
}

// 工作線程
typedef struct tagTUN_PAR {
	TCS_S32	*exit;		// 退出標志
	TCS_V00	*thrd;		// 線程句柄
	TCS_V00	*nven[2];	// 工作事件
	TCS_F64	*P;
	TIN_Z	*Z;
	TIN_R	*R;
} TUN_PAR;

TCS_V00 RmvDup2(TUN_PAR *TUN)
{
	TIN_Z *Z = TUN->Z;
	TCS_F64 *P = TUN->P;

	TCS_S32 c, r;
	TIN_C *C0, *C1, *C2, *C3;

	TIN_G *G = Z->G;
	TCS_S32 co = G->num[0], ro = G->num[1];

	for (r = Z->sco[1]; r <= Z->eco[1]; r++)
	{
		C0 = G->idx + r * co + Z->sco[0];
		for (c = Z->sco[0]; c <= Z->eco[0]; c++)
		{
			C1 = C0 + 1;
			C2 = C0 + co;
			C3 = C2 + 1;
			RmvDup2(C0, C1, C2, C3, P, G->dup, G->pid, Z->vpn);
			// 指針推進1列
			C0 = C0 + 1;
		}
	}
}

TCS_U32 WINAPI TunThread(LPVOID lpParam)
{
	TUN_PAR *TUN = (TUN_PAR*)lpParam;

	while (1)
	{
		::WaitForSingleObject(TUN->nven[0], INFINITE);
		if (*(TUN->exit) == 1)
			break;

		// 消除重合
		if (TUN->Z)
			RmvDup2(TUN);
		TUN->Z = 0;
		// 構網分區
		if (TUN->R && TUN->R->S)
		{
			TIN_R *R = TUN->R;
			if (R->AXI == 0)
				ConTxn2(R->G, R->S, TUN->P, R->AXV, R->ATL, R->ASL, R->BSL);
			else
				ConTyn2(R->G, R->S, TUN->P, R->AXV, R->ATL, R->ASL, R->BSL);
		}
		TUN->R = 0;

		::SetEvent(TUN->nven[1]);
		if (*(TUN->exit) == 1)
			break;
	}

	::SetEvent(TUN->nven[1]);
	TUN->thrd = 0;
	TUN->Z = 0;
	TUN->R = 0;

	return 0;
}

// 調度線程
typedef struct tagTAN_PAR {
	TCS_S32	*exit;		// 退出標志
	TCS_V00	*thrd;		// 線程句柄
	TCS_S32	 unnu;		// 線程數目
	TCS_V00	*unpa;		// 線程參數
	TIN_G	*G;
	TCS_F64	*P;
	TCS_S32	*vpn;
	TCS_S32	*nzn;
	TCS_TMB	*btm;
	TCS_TMB	*etm;
	CTcsBL	*ATL;		// 三角形鏈表
	CTcsHL	*BSL;		// 靜止邊鏈表
	CTcsBL	*ARL;		// 隔離區鏈表
} TAN_PAR;

// 1分4
TCS_V00 To4(TIN_Z *Z1, TIN_Z *Z2, TIN_Z *Z3, TIN_Z *Z4, TIN_G *G, TCS_F64 *P)
{
	TCS_S32 c = (Z1->sco[0] + Z1->eco[0]) / 2;
	TCS_S32 r = (Z1->sco[1] + Z1->eco[1]) / 2;

	// 消除隔斷重合
	TCS_S32 i, k;
	TIN_C *C0, *C1, *C2, *C3;

	TCS_S32 co = G->num[0];
	TCS_S32 ro = G->num[1];
	// 處理c列網格單元
	C0 = G->idx + Z1->sco[1] * co + c;
	for (i = Z1->sco[1]; i <= Z1->eco[1]; i++)
	{
		C1 = C0 + 1;
		C2 = C0 + co;
		C3 = C2 + 1;
		RmvDup2(C0, C1, C2, C3, P, G->dup, G->pid, Z1->vpn);
		// 指針推進1行
		C0 = C0 + co;
	}
	// 處理r行網格單元
	C0 = G->idx + r * co + Z1->sco[0];
	for (k = Z1->sco[0]; k <= Z1->eco[0]; k++)
	{
		C1 = C0 + 1;
		C2 = C0 + co;
		C3 = C2 + 1;
		RmvDup2(C0, C1, C2, C3, P, G->dup, G->pid, Z1->vpn);
		// 指針推進1列
		C0 = C0 + 1;
	}

	// 構成區間
	// 右下區間
	Z2->sco[0] = c + 1;			Z2->eco[0] = Z1->eco[0];
	Z2->sco[1] = Z1->sco[1];	Z2->eco[1] = r - 1;
	Z2->vpn = 0;	Z2->G = G;
	if (Z2->sco[0] >= co - 1)	Z2->sco[0] = co - 2;
	if (Z2->eco[1] < 0)			Z2->eco[1] = 0;

	// 左上區間
	Z3->sco[0] = Z1->sco[0];	Z3->eco[0] = c - 1;
	Z3->sco[1] = r + 1;			Z3->eco[1] = Z1->eco[1];
	Z3->vpn = 0;	Z3->G = G;
	if (Z3->eco[0] < 0)			Z3->eco[0] = 0;
	if (Z3->sco[1] >= ro - 1)	Z3->sco[1] = ro - 2;

	// 右上區間
	Z4->sco[0] = c + 1;			Z4->eco[0] = Z1->eco[0];
	Z4->sco[1] = r + 1;			Z4->eco[1] = Z1->eco[1];
	Z4->vpn = 0;	Z4->G = G;
	if (Z4->sco[0] >= co - 1)	Z4->sco[0] = co - 2;
	if (Z4->sco[1] >= ro - 1)	Z4->sco[1] = ro - 2;

	// 左下區間
	Z1->eco[0] = c - 1;
	Z1->eco[1] = r - 1;
	if (Z1->eco[0] < 0)	Z1->eco[0] = 0;
	if (Z1->eco[1] < 0)	Z1->eco[1] = 0;
}

// 消除重合點
TCS_V00 RmvDup2(TAN_PAR *TAN)
{
	TIN_G *G = TAN->G;
	TCS_F64 *P = TAN->P;
	TCS_S32 *vpn = TAN->vpn;
	TCS_S32 *nzn = TAN->nzn;

	TCS_S32 c, r;
	TIN_C *C0, *C1, *C2, *C3;

	TCS_S32 co = G->num[0];
	TCS_S32 ro = G->num[1];
	// 處理最右邊網格單元
	C1 = C3 = 0;
	C0 = G->idx + co - 1;
	for (r = 0; r < ro; r++)
	{
		if (r == ro - 1)
			C2 = 0;
		else
			C2 = C0 + co;
		RmvDup2(C0, C1, C2, C3, P, G->dup, G->pid, *vpn);
		// 指針推進1行
		C0 = C0 + co;
	}
	// 處理最上邊網格單元
	C2 = C3 = 0;
	C0 = G->idx + (ro - 1) * co;
	for (c = 0; c < co; c++)
	{
		if (c == co - 1)
			C1 = 0;
		else
			C1 = C0 + 1;
		RmvDup2(C0, C1, C2, C3, P, G->dup, G->pid, *vpn);
		// 指針推進1列
		C0 = C0 + 1;
	}
	// 處理可能情況
	if (co == 1 || ro == 1)
		return;
	// 按點數進行分區
	TCS_S32 zn = *vpn / *nzn;
	if (zn == 0)	zn = 1;
	// 采用4分法, 即1分4
	TCS_S32 cz = 0;
	CTcsSL *S1 = new CTcsSL;
	CTcsSL *S3, *S2 = new CTcsSL;

	TIN_Z *Z1 = new TIN_Z;
	Z1->sco[0] = 0;	Z1->eco[0] = co - 2;
	Z1->sco[1] = 0;	Z1->eco[1] = ro - 2;
	Z1->vpn = 0;	Z1->G = G;	S1->PutData(Z1);
	while (S1->GetSize() + cz < zn)
	{
		Z1 = (TIN_Z*)S1->PopData();
		while (Z1)
		{
			// 1分4
			TIN_Z *Z2 = new TIN_Z;
			TIN_Z *Z3 = new TIN_Z;
			TIN_Z *Z4 = new TIN_Z;
			To4(Z1, Z2, Z3, Z4, G, P);
			if (Z1->eco[0] >= Z1->sco[0] &&	Z1->eco[1] >= Z1->sco[1])
				S2->PutData(Z1);
			else
			{	delete Z1;	*vpn += Z1->vpn;	cz++;	}
			if (Z2->eco[0] >= Z2->sco[0] &&	Z2->eco[1] >= Z2->sco[1])
				S2->PutData(Z2);
			else
			{	delete Z2;	*vpn += Z2->vpn;	cz++;	}
			if (Z3->eco[0] >= Z3->sco[0] &&	Z3->eco[1] >= Z3->sco[1])
				S2->PutData(Z3);
			else
			{	delete Z3;	*vpn += Z3->vpn;	cz++;	}
			if (Z4->eco[0] >= Z4->sco[0] &&	Z4->eco[1] >= Z4->sco[1])
				S2->PutData(Z4);
			else
			{	delete Z4;	*vpn += Z4->vpn;	cz++;	}

			// 下一個
			Z1 = (TIN_Z*)S1->PopData();
		}
		// 交換鏈表
		S3 = S1;	S1 = S2;	S2 = S3;
	}

	//調度線程
	TCS_V00 **nven = new TCS_V00*[TAN->unnu];
	TUN_PAR *unpa = (TUN_PAR*)TAN->unpa;
	for (long i = 0; i < TAN->unnu; i++)
		nven[i] = unpa[i].nven[1];
	Z1 = (TIN_Z*)S1->PopData();
	while (Z1)
	{
		// 等待線程空閑
		TCS_U32 idx = ::WaitForMultipleObjects(TAN->unnu, nven, 0, INFINITE);
		if (idx >= WAIT_OBJECT_0 && idx < WAIT_OBJECT_0 + TAN->unnu)
		{
			idx = idx - WAIT_OBJECT_0;
			unpa[idx].P = P;
			unpa[idx].Z = Z1;
			::SetEvent(unpa[idx].nven[0]);
		}
		S2->PutData(Z1);
		// 如果中途終止
		if (*(TAN->exit) == 1)
			break;

		Z1 = (TIN_Z*)S1->PopData();
	}
	delete []nven;
	// 等待任務完成
	for (long i = 0; i < TAN->unnu; i++)
	{
		while (1)
		{
			if (unpa[i].Z == 0 || unpa[i].thrd == 0)
				break;
			else
				::Sleep(2);
		}
	}

	// 清理內存
	Z1 = (TIN_Z*)S1->PopData();
	while (Z1)
	{
		*vpn += Z1->vpn;	delete Z1;
		Z1 = (TIN_Z*)S1->PopData();
	}
	Z1 = (TIN_Z*)S2->PopData();
	while (Z1)
	{
		*vpn += Z1->vpn;	delete Z1;
		Z1 = (TIN_Z*)S2->PopData();
	}
	delete S1;	delete S2;
}

// 搜索最鄰近點
TCS_V00 FndNep2(TIN_G *G, TIN_C *C, TCS_F64 *P, TCS_F64 *p, TCS_S32 ci, TCS_F64 &dnp, TCS_S32 &pid, TCS_S32 &cid)
{
	TCS_S32 n, pi;
	TCS_F64 *p2, d2;

	for (n = 0; n < C->ocn; n++)
	{
		pi = C->pid[n];
		p2 = P + 2 * pi;

		d2 = EuLen2D(p, p2);
		if (d2 < dnp)
		{	pid = pi;	cid = ci;	dnp = d2;	}
	}
}

TCS_V00 FndNep2(TIN_G *G, TCS_F64 *P, TCS_F64 *p, TCS_S32 *c, TCS_S32 *r, TCS_S32 co, TCS_F64 &dnp, TCS_S32 &pid, TCS_S32 &cid)
{
	TIN_C *C;
	TCS_S32 i, k, ci;

	if (r[2] != r[0])	// 即r[2] != r[4]
	{
		for (k = c[0] + 1; k < c[1]; k++)
		{
			ci = r[0] * co + k;	C = G->idx + ci;
			FndNep2(G, C, P, p, ci, dnp, pid, cid);
		}
	}
	if (r[3] != r[1])	// 即r[3] != r[5]
	{
		for (k = c[0] + 1; k < c[1]; k++)
		{
			ci = r[1] * co + k;	C = G->idx + ci;
			FndNep2(G, C, P, p, ci, dnp, pid, cid);
		}
	}
	if (c[2] != c[0])	// 即c[2] != c[4]
	{
		for (i = r[0] + 1; i < r[1]; i++)
		{
			ci = i * co + c[0];	C = G->idx + ci;
			FndNep2(G, C, P, p, ci, dnp, pid, cid);
		}
	}
	if (c[3] != c[1])	// 即c[3] != c[5]
	{
		for (i = r[0] + 1; i < r[1]; i++)
		{
			ci = i * co + c[1];	C = G->idx + ci;
			FndNep2(G, C, P, p, ci, dnp, pid, cid);
		}
	}
	// 處理4個角單元
	if (c[2] != c[4] || r[2] != r[4])
	{
		ci = r[0] * co + c[0];	C = G->idx + ci;
		FndNep2(G, C, P, p, ci, dnp, pid, cid);
	}
	if (c[2] != c[4] || r[3] != r[5])
	{
		ci = r[1] * co + c[0];	C = G->idx + ci;
		FndNep2(G, C, P, p, ci, dnp, pid, cid);
	}
	if (c[3] != c[5] || r[2] != r[4])
	{
		ci = r[0] * co + c[1];	C = G->idx + ci;
		FndNep2(G, C, P, p, ci, dnp, pid, cid);
	}
	if (c[3] != c[5] || r[3] != r[5])
	{
		ci = r[1] * co + c[1];	C = G->idx + ci;
		FndNep2(G, C, P, p, ci, dnp, pid, cid);
	}
}

TCS_V00 FndNep2(TIN_G *G, TCS_F64 *P, TCS_F64 *p, TCS_S32 &pid, TCS_S32 &cid)
{
	pid = cid = -1;

	// 計算單元位置
	TCS_S32 o[2];
	ComIdx2(G, p, o);

	// 設置計算變量
	TCS_F64 *p2, d2;
	TCS_S32 n, pi, ci;
	TCS_S32 co = G->num[0];
	TCS_S32 ro = G->num[1];
	TCS_F64 dx = G->bnd[2] - G->bnd[0];
	TCS_F64 dy = G->bnd[3] - G->bnd[1];
	TCS_F64 dnp = (dx * dx + dy * dy) / 4;
	// 在自身單元搜索
	ci = o[1] * co + o[0];
	TIN_C *C = G->idx + ci;
	for (n = 0; n < C->ocn; n++)
	{
		pi = C->pid[n];
		p2 = P + 2 * pi;
		if (p2 == p) // 同點
			continue;

		d2 = EuLen2D(p, p2);
		if (d2 < dnp)
		{	pid = pi;	cid = ci;	dnp = d2;	}
	}

	// 擴展搜索算法
	TCS_S32 c[6], r[6];

	c[0] = c[1] = o[0];					r[0] = r[1] = o[1];
	c[2] = c[0];	c[3] = c[1];		r[2] = r[0];	r[3] = r[1];
	c[4] = 0;		c[5] = co - 1;		r[4] = 0;		r[5] = ro - 1;
	// 在其他單元搜索
	if (pid == -1)
	{
		while (1)
		{
			c[0]--;	if (c[0] < c[4])	c[0] = c[4];
			c[1]++;	if (c[1] > c[5])	c[1] = c[5];
			r[0]--;	if (r[0] < r[4])	r[0] = r[4];
			r[1]++;	if (r[1] > r[5])	r[1] = r[5];
			FndNep2(G, P, p, c, r, co, dnp, pid, cid);

			c[2] = c[0], c[3] = c[1], r[2] = r[0], r[3] = r[1];
			if (c[2] == c[4] && c[3] == c[5] &&
				r[2] == r[4] && r[3] == r[5])
				break;
			if (pid != -1)	// 已經找到候選點
				break;
		}
	}
	// 精化搜索
	if (pid != -1)
	{
		// 計算最后搜索范圍
		ComBnd2(G, p, sqrt(dnp), c[4], c[5], r[4], r[5]);
		// 根據搜索邊界判斷是否需要繼續搜索
		while (1)
		{
			c[0]--;	if (c[0] < c[4])	c[0] = c[2] = c[4];	// 說明前一列已經到達搜索邊界
			c[1]++;	if (c[1] > c[5])	c[1] = c[3]	= c[5];
			r[0]--;	if (r[0] < r[4])	r[0] = r[2] = r[4];	// 說明前一行已經到達搜索邊界
			r[1]++;	if (r[1] > r[5])	r[1] = r[3] = r[5];
			FndNep2(G, P, p, c, r, co, dnp, pid, cid);

			c[2] = c[0], c[3] = c[1], r[2] = r[0], r[3] = r[1];
			if (c[2] == c[4] && c[3] == c[5] &&
				r[2] == r[4] && r[3] == r[5])
				break;
		}
	}
}

// 空圓檢測和緊縮搜索
TCS_V00 RevEmp2(TIN_G *G, TCS_F64 *P, TCS_F64 *p1, TCS_F64 *p2, TCS_F64 *p3, TCS_F64 *ce, TCS_F64 &d2, CTcsBL *L)
{
	TIN_C *C;
	TCS_F64 *p4, dn;
	TCS_S32 n, ci, pi, c[2], r[2];
	TCS_S32 i, k, co = G->num[0], ro = G->num[1];

	// 計算搜索邊界
	ComBnd2(G, ce, sqrt(d2), c[0], c[1], r[0], r[1]);

	for (i = r[0]; i <= r[1]; i++)
	{
		ci = i * co; 
		for (k = c[0]; k <= c[1]; k++)
		{
			C = G->idx + ci + k;
			for (n = 0; n < C->ocn; n++)
			{
				pi = C->pid[n];
				p4 = P + 2 * pi;

				dn = EuLen2D(p4, ce);
				// 精確處理浮點數相等問題
				if		(dn == d2) // 共圓
				{
					if (p4 == p1 || p4 == p2 || p4 == p3)
						continue;
					TIN_X *X = new TIN_X;
					X->cid = ci + k;
					X->pid = pi;
					L->AddTail(X);
				}
				else if (dn <  d2 && p4 != p2 && p4 != p3) // 有點
				{
					// 緊縮搜索
					TIN_X *X = (TIN_X*)L->GetHead();
					X->cid = ci + k;
					X->pid = pi;
					// 清除其它候選
					X = (TIN_X*)L->RemoveAt(1);
					while (X)
					{
						delete X;
						X = (TIN_X*)L->RemoveAt(1);
					}
					// 計算外接圓圓心
					ComCen2(p1, p2, p4, ce);
					// 計算外接圓半徑平方
					d2 = EuLen2D(p1, ce);
					// 空圓檢測和緊縮搜索
					RevEmp2(G, P, p1, p2, p4, ce, d2, L);

					return;
				}
			}
		}
	}
}

// 搜索第3點(空圓法則)
TCS_V00 FndEmp2(TIN_G *G, TCS_F64 *P, TCS_F64 *p1, TCS_F64 *p2, TCS_S32 ci, TCS_F64 *ce, TCS_F64 &d2, CTcsBL *L)
{
	TCS_F64 *p3;
	TCS_S32 n, pi;
	TIN_C *C = G->idx + ci;

	for (n = 0; n < C->ocn; n++)
	{
		pi = C->pid[n];
		p3 = P + 2 * pi;

		if (!IsLine2(p1, p2, p3))	// 不共線
		{
			TIN_X *X = new TIN_X;
			X->cid = ci;
			X->pid = pi;
			L->AddTail(X);
			// 計算外接圓圓心
			ComCen2(p1, p2, p3, ce);
			// 計算外接圓半徑平方
			d2 = EuLen2D(p1, ce);
			// 空圓檢測和緊縮搜索
			RevEmp2(G, P, p1, p2, p3, ce, d2, L);
			

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区免费视频| 国产·精品毛片| 国产 日韩 欧美大片| 欧美性做爰猛烈叫床潮| 中文幕一区二区三区久久蜜桃| 一区二区在线观看视频| 国产米奇在线777精品观看| 欧美性色综合网| 最新高清无码专区| 国产激情视频一区二区三区欧美| 欧美探花视频资源| 亚洲天堂网中文字| 粉嫩高潮美女一区二区三区| 日韩一级免费一区| 日韩黄色免费网站| 欧美亚洲一区二区在线| 亚洲欧美日韩一区二区三区在线观看| 国产精品自在在线| 亚洲精品在线电影| 国内偷窥港台综合视频在线播放| 欧美一区二区三区喷汁尤物| 亚洲一区二区三区在线播放| av不卡在线播放| 亚洲欧洲一区二区在线播放| a亚洲天堂av| 国产精品国产三级国产aⅴ无密码| 国产精品一区二区三区乱码| xfplay精品久久| 国产在线麻豆精品观看| 精品国产1区二区| 国产一区二区毛片| 国产三级精品视频| 国产在线看一区| 中文字幕国产精品一区二区| 成人短视频下载| 最新国产成人在线观看| 色就色 综合激情| 一区二区欧美视频| 欧美日韩国产综合视频在线观看| 亚洲成av人片| 欧美成va人片在线观看| 激情欧美日韩一区二区| 精品欧美乱码久久久久久1区2区| 国产在线一区观看| 国产精品伦理在线| 色一情一乱一乱一91av| 亚洲va欧美va国产va天堂影院| 欧美三级日韩在线| 久草在线在线精品观看| 久久一日本道色综合| www.激情成人| 五月天中文字幕一区二区| 欧美一区二区在线播放| 国产精品18久久久久久久久久久久 | 从欧美一区二区三区| 国产精品乱码一区二区三区软件 | 欧美区在线观看| 免费成人av在线播放| 国产目拍亚洲精品99久久精品 | 国产精品亚洲一区二区三区在线| 国产精品国产自产拍在线| 欧美日韩一级二级| 精品一区二区三区av| 最新欧美精品一区二区三区| 欧美男人的天堂一二区| 国产精品一品二品| 亚洲国产欧美另类丝袜| 久久久国产精品不卡| 91九色最新地址| 精品一区二区三区香蕉蜜桃| 亚洲免费av在线| 久久久噜噜噜久久人人看| 欧美色综合网站| 成人高清视频免费观看| 男人的天堂亚洲一区| 亚洲精品五月天| 精品国产乱码久久久久久浪潮| 色综合久久久网| 国产成人在线观看| 日韩中文字幕麻豆| 《视频一区视频二区| www国产成人免费观看视频 深夜成人网 | 久久国产成人午夜av影院| 亚洲欧美日韩一区二区| 久久久久久久久久久久久夜| 欧美精品在线一区二区| av高清久久久| 国产成人午夜视频| 久久97超碰色| 日韩中文字幕不卡| 一区二区三区久久| 亚洲日本在线观看| 欧美激情一区在线| 久久久亚洲欧洲日产国码αv| 欧美高清视频在线高清观看mv色露露十八| 成人av第一页| 国产91丝袜在线播放九色| 麻豆91精品视频| 亚洲成在人线在线播放| 亚洲欧美日韩国产中文在线| 国产精品污网站| 久久久久97国产精华液好用吗| 日韩视频在线观看一区二区| 91福利国产精品| 91麻豆精品视频| 91无套直看片红桃| 99久久久国产精品免费蜜臀| 播五月开心婷婷综合| 成人污视频在线观看| 国产成人激情av| 从欧美一区二区三区| 岛国精品在线播放| 国产美女娇喘av呻吟久久| 国精产品一区一区三区mba视频| 久久激情五月婷婷| 美女国产一区二区| 激情深爱一区二区| 国模冰冰炮一区二区| 国产精品18久久久久| 国产凹凸在线观看一区二区| 成人高清免费观看| 91首页免费视频| 欧美日韩一区二区三区免费看| 欧美日本不卡视频| 欧美成人vps| 中文字幕第一区二区| 中文字幕佐山爱一区二区免费| 亚洲精品欧美激情| 天堂一区二区在线| 久久电影网电视剧免费观看| 国产精品18久久久久久vr| 99久久综合国产精品| 91在线精品一区二区三区| 91视频一区二区| 69堂成人精品免费视频| 久久久久久99久久久精品网站| 国产精品欧美久久久久无广告| 亚洲精品国产一区二区精华液| 视频一区二区中文字幕| 国产一区二区三区最好精华液| 成人app软件下载大全免费| 欧美午夜片在线看| 精品国产一区二区三区不卡| 中文字幕亚洲欧美在线不卡| 亚洲成av人影院| 国产成人精品亚洲777人妖 | 日韩精品在线网站| 中国av一区二区三区| 亚洲一区二区成人在线观看| 美女网站视频久久| 91欧美激情一区二区三区成人| 欧美老女人在线| 国产精品免费观看视频| 丝瓜av网站精品一区二区| 国产精品538一区二区在线| 欧美三级中文字幕| 日本一区免费视频| 日韩精品免费专区| 成人动漫在线一区| 欧美白人最猛性xxxxx69交| 亚洲欧美日韩久久精品| 国产另类ts人妖一区二区| 欧美色综合网站| 国产精品丝袜一区| 蜜桃av一区二区| 欧美日韩一区视频| 国产精品初高中害羞小美女文| 老司机午夜精品99久久| 91久久一区二区| 国产精品亲子伦对白| 久久精品国产精品亚洲精品| 色噜噜狠狠色综合欧洲selulu| 久久综合九色综合欧美98| 亚洲成人中文在线| 色国产综合视频| 国产精品久久网站| 国产乱子伦一区二区三区国色天香| 欧美日韩精品一区二区天天拍小说| 国产精品高潮呻吟| 国产成人激情av| 久久久久久久综合狠狠综合| 久久精品二区亚洲w码| 欧美日本一道本| 亚洲小少妇裸体bbw| 色老头久久综合| 亚洲视频一区在线观看| 91在线视频网址| 亚洲欧美在线高清| 成人精品国产免费网站| 国产欧美日韩麻豆91| 丁香激情综合五月| 国产日韩成人精品| 成人一级片在线观看| 国产精品区一区二区三区| 顶级嫩模精品视频在线看| 日本一区二区三区电影| 成人夜色视频网站在线观看| 国产精品家庭影院| av亚洲精华国产精华精| 亚洲精品乱码久久久久久日本蜜臀|