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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tcstan2.cpp

?? 并行TIN生成算法, 基于DeWall算法理論實現(xiàn)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			return;
		}
	}
}

// 批量單元搜索
TCS_V00 FndEmp2(TIN_G *G, TCS_F64 *P, TCS_F64 *p1, TCS_F64 *p2, TCS_F64 *ce, TCS_F64 &d2, CTcsBL *L, TCS_S32 co, TCS_S32 *c, TCS_S32 *r)
{
	TCS_S32 i, k, ci;

	if (r[2] != r[0])	// 即r[2] != r[4]
	{
		ci = r[0] * co;
		for (k = c[0] + 1; k < c[1]; k++)
		{
			FndEmp2(G, P, p1, p2, ci + k, ce, d2, L);
			if (L->GetSize() > 0)
				return;
		}
	}
	if (r[3] != r[1])	// 即r[3] != r[5]
	{
		ci = r[1] * co;
		for (k = c[0] + 1; k < c[1]; k++)
		{
			FndEmp2(G, P, p1, p2, ci + k, ce, d2, L);
			if (L->GetSize() > 0)
				return;
		}
	}
	if (c[2] != c[0])	// 即c[2] != c[4]
	{
		for (i = r[0] + 1; i < r[1]; i++)
		{
			ci = i * co + c[0];
			FndEmp2(G, P, p1, p2, ci, ce, d2, L);
			if (L->GetSize() > 0)
				return;
		}
	}
	if (c[3] != c[1])	// 即c[3] != c[5]
	{
		for (i = r[0] + 1; i < r[1]; i++)
		{
			ci = i * co + c[1];
			FndEmp2(G, P, p1, p2, ci, ce, d2, L);
			if (L->GetSize() > 0)
				return;
		}
	}
	// 處理4個角單元
	if (c[2] != c[4] || r[2] != r[4])
	{
		ci = r[0] * co + c[0];
		FndEmp2(G, P, p1, p2, ci, ce, d2, L);
		if (L->GetSize() > 0)
			return;
	}
	if (c[2] != c[4] || r[3] != r[5])
	{
		ci = r[1] * co + c[0];
		FndEmp2(G, P, p1, p2, ci, ce, d2, L);
		if (L->GetSize() > 0)
			return;
	}
	if (c[3] != c[5] || r[2] != r[4])
	{
		ci = r[0] * co + c[1];
		FndEmp2(G, P, p1, p2, ci, ce, d2, L);
		if (L->GetSize() > 0)
			return;
	}
	if (c[3] != c[5] || r[3] != r[5])
	{
		ci = r[1] * co + c[1];
		FndEmp2(G, P, p1, p2, ci, ce, d2, L);
		if (L->GetSize() > 0)
			return;
	}
}


// 生成構(gòu)網(wǎng)分區(qū)
//#define TEST_SIN
TCS_V00 CnsTen2(TAN_PAR *TAN)
{
	TIN_G *G = TAN->G;
	TCS_F64 *P = TAN->P;
	TCS_S32 *vpn = TAN->vpn;
	TCS_S32 *nzn = TAN->nzn;

	TCS_F64 d2, ce[2];
	ce[0] = (G->bnd[0] + G->bnd[2]) / 2;
	ce[1] = (G->bnd[1] + G->bnd[3]) / 2;

	TCS_S32 sid[2], eid[2], sip[2], eip[2];
	// 搜索離區(qū)域中心最近的點
	FndNep2(G, P, ce, sid[0], sid[1]);
	TCS_F64 *sp = P + 2 * sid[0];	sip[0] = sid[0], sip[1] = sid[1];
	// 搜索第2點:最近法則
	FndNep2(G, P, sp, eid[0], eid[1]);
	TCS_F64 *ep = P + 2 * eid[0];	eip[0] = eid[0], eip[1] = eid[1];
	// 搜索第3點:空圓法則
	CTcsBL *ARL = TAN->ARL;	// 隔離區(qū)鏈表
	CTcsBL *ATL = TAN->ATL;	// 三角形鏈表
	CTcsHL *BSL = TAN->BSL;	// 靜止邊鏈表
	CTcsBL *APL = new CTcsBL;	// 活動點鏈表
	CTcsSL *SSL = new CTcsSL;	// 候選邊鏈表
	CTcsHL *ASL = new CTcsHL(128, SIDE_EQLH, SIDE_HASH);	// 活動邊鏈表
	{
		ce[0] = (sp[0] + ep[0]) / 2;
		ce[1] = (sp[1] + ep[1]) / 2;
		// 計算初始搜索范圍
		TCS_S32 i, k, c[6], r[6];
		TCS_F64 d = sqrt(EuLen2D(sp, ce));
		ComBnd2(G, ce, d, c[0], c[1], r[0], r[1]);

		TCS_S32 ci, co = G->num[0], ro = G->num[1];

		for (i = r[0]; i <= r[1]; i++)
		{
			ci = i * co;
			for (k = c[0]; k <= c[1]; k++)
			{
				FndEmp2(G, P, sp, ep, ci + k, ce, d2, APL);
				if (APL->GetSize() > 0)
					break;
			}
			if (APL->GetSize() > 0)
				break;
		}

		if (APL->GetSize() == 0)
		{
			// 繼續(xù)搜索
			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;
			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];
				FndEmp2(G, P, sp, ep, ce, d2, APL, co, c, r);
				if (APL->GetSize() > 0)
					break;	// 已經(jīng)找到

				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 (APL->GetSize() == 0)	// 終止
		{
			delete ASL;	delete APL;
			delete SSL;
			return;
		}
		// 共圓點弧位排序
		if (APL->GetSize() > 1)
			ArcPos2(APL, P, ce, d2);
		// 逐點構(gòu)三角形, 如4點以上共圓需局部優(yōu)化
		ConTen2(G, P, sid, eid, APL, ATL, ASL, BSL, SSL);
	}
	// 單核測試
#ifdef TEST_SIN
	TIN_S *S = (TIN_S*)ASL->GetHead();
	while (S)
	{
		FndEmp2(G, S, P, ce, d2, APL);
		if (APL->GetSize() == 0)
		{
			// 減少計數(shù)器
			G->pid[S->sid[0]]--;	G->pid[S->eid[0]]--;
			// 刪除歸零點
			if (G->pid[S->sid[0]] == 0)	{	RmvPid(G->idx + S->sid[1], S->sid[0]);	G->vpn++;	}
			if (G->pid[S->eid[0]] == 0)	{	RmvPid(G->idx + S->eid[1], S->eid[0]);	G->vpn++;	}
			// 收集邊對象
			S->pid[1] = -1;		ASL->DetData(S);	BSL->PutData(S, S);
		}
		else
		{
			// 共圓點排序
			if (APL->GetSize() > 1)
				ArcPos2(APL, P, ce, d2);
			// 構(gòu)造三角形
			sid[0] = S->sid[0], sid[1] = S->sid[1];
			eid[0] = S->eid[0], eid[1] = S->eid[1];
			ConTen2(G, P, sid, eid, APL, ATL, ASL, BSL);
		}

		S = (TIN_S*)ASL->GetHead();
	}
	// 釋放內(nèi)存資源
	delete APL;	delete ASL;	delete SSL;
	return;
#endif
	// 生成構(gòu)網(wǎng)分區(qū)
	ce[0] = (sp[0] + ep[0]) / 2;
	ce[1] = (sp[1] + ep[1]) / 2;
	if (sp[0] == ep[0])
	{
		// 從Y分隔線開始
		TIN_S *S = (TIN_S*)SSL->PopData();
		while (S)
		{
			// 如果是活動邊, 判斷是否與Y分隔線相交
			if (ASL->GetData(S) && LySide2(ce[1], P, S))
				ConTyn2(G, S, P, ce[1], ATL, ASL, BSL);
			S = (TIN_S*)SSL->PopData();
		}
		// 構(gòu)造隔離區(qū)
		TIN_R *UR = new TIN_R;	// 上隔離區(qū)
		TIN_R *DR = new TIN_R;	// 下隔離區(qū)

		ARL->AddTail(UR);	ARL->AddTail(DR);
		ConRyn2(G, UR, DR, ASL, P, ce[0], ce[1]);
	}
	else
	{
		// 從X分隔線開始
		TIN_S *S = (TIN_S*)SSL->PopData();
		while (S)
		{
			// 如果是活動邊, 判斷是否與X分隔線相交
			if (ASL->GetData(S) && LxSide2(ce[0], P, S))
				ConTxn2(G, S, P, ce[0], ATL, ASL, BSL);
			S = (TIN_S*)SSL->PopData();
		}
		// 構(gòu)造隔離區(qū)
		TIN_R *LR = new TIN_R;	// 左隔離區(qū)
		TIN_R *RR = new TIN_R;	// 右隔離區(qū)

		ARL->AddTail(LR);	ARL->AddTail(RR);
		ConRxn2(G, LR, RR, ASL, P, ce[0], ce[1]);
	}
	// 釋放內(nèi)存資源
	delete APL;	delete ASL;	delete SSL;

	// 按點數(shù)進行循環(huán)分區(qū)
	// 按點數(shù)進行分區(qū)
	TCS_S32 zn = *vpn / *nzn;
	if (zn == 0)	zn = 1;
	// 采用2分法, 即1分2
	CTcsBL *B1 = ARL;
	CTcsBL *B2 = new CTcsBL;

	// 調(diào)度線程
	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];
	// 循環(huán)構(gòu)造
	while (B1->GetSize() < zn)
	{
		TIN_R *R = (TIN_R*)B1->RemoveHead();
		while (R)
		{
			// 等待線程空閑
			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].R = R;
				::SetEvent(unpa[idx].nven[0]);
			}
			B2->AddTail(R);
			// 如果中途終止
			if (*(TAN->exit) == 1)
				break;

			R = (TIN_R*)B1->RemoveHead();
		}
		// 等待本次隔離任務(wù)完成
		for (long i = 0; i < TAN->unnu; i++)
		{
			while (1)
			{
				if (unpa[i].R == 0 || unpa[i].thrd == 0)
					break;
				else
					::Sleep(2);
			}
		}
		// 如果中途終止
		if (*(TAN->exit) == 1)
			break;
		// 構(gòu)造隔離區(qū)
		R = (TIN_R*)B2->RemoveHead();
		while (R)
		{
			G = R->G;
			// 構(gòu)造隔離區(qū)
			ce[0] = (G->bnd[0] + G->bnd[2]) / 2;
			ce[1] = (G->bnd[1] + G->bnd[3]) / 2;
			if (R->AXI == 0)	// 左右隔離
			{
				TIN_R *LR = new TIN_R;	// 左隔離區(qū)
				TIN_R *RR = new TIN_R;	// 右隔離區(qū)

				ce[0] = R->AXV;
				B1->AddTail(LR);	B1->AddTail(RR);
				ConRxn2(G, LR, RR, R->ASL, P, ce[0], ce[1]);
			}
			else				// 上下隔離
			{
				TIN_R *UR = new TIN_R;	// 上隔離區(qū)
				TIN_R *DR = new TIN_R;	// 下隔離區(qū)

				ce[1] = R->AXV;
				B1->AddTail(UR);	B1->AddTail(DR);
				ConRyn2(G, UR, DR, R->ASL, P, ce[0], ce[1]);
			}
			TAN->G->vpn += G->vpn;
			// 搜集三角形
			TIN_T *T = (TIN_T*)R->ATL->RemoveHead();
			while (T)
			{
				ATL->AddTail(T);
				T = (TIN_T*)R->ATL->RemoveHead();
			}
			// cid逆變換參數(shù)
			TCS_S32 sc = TCS_S32((G->bnd[0] - TAN->G->bnd[0]) / G->spn[0]);
			TCS_S32 sr = TCS_S32((G->bnd[1] - TAN->G->bnd[1]) / G->spn[1]);
			// 搜集靜止邊
			TIN_S *S = (TIN_S*)R->BSL->RemoveHead();
			while (S)
			{
				// cid逆變換
				S->sid[1] = InvCid2(S->sid[1], TAN->G->num[0], G->num[0], sc, sr);
				S->eid[1] = InvCid2(S->eid[1], TAN->G->num[0], G->num[0], sc, sr);
				BSL->PutData(S, S);
				S = (TIN_S*)R->BSL->RemoveNext();
			}
			// 釋放隔離區(qū)內(nèi)存資源
			delete R->ATL;	delete R->ASL;	delete R->BSL;
			delete []G->idx;	delete G;	delete R;
			// 如果中途終止
			if (*(TAN->exit) == 1)
				break;

			R = (TIN_R*)B2->RemoveHead();
		}
		// 如果中途終止
		if (*(TAN->exit) == 1)
			break;
	}
	// 處理中途終止
	TIN_R *R = (TIN_R*)B2->RemoveHead();
	while (R)
	{
		B1->AddTail(R);
		R = (TIN_R*)B2->RemoveHead();
	}
	// 釋放內(nèi)存資源
	delete []nven;	delete B2;
}

TCS_U32 WINAPI TanThread(LPVOID lpParam)
{
	TAN_PAR *TAN = (TAN_PAR*)lpParam;

	// 消除重合點
	RmvDup2(TAN);

	::_ftime_s(TAN->btm);

	*TAN->etm = *TAN->btm;
	// 生成構(gòu)網(wǎng)分區(qū)
	if (*TAN->vpn >= 3)
		CnsTen2(TAN);

	::_ftime_s(TAN->etm);
	// 結(jié)束工作線程
	*(TAN->exit) = 1;
	TUN_PAR *unpa = (TUN_PAR*)TAN->unpa;
	for (long i = 0; i < TAN->unnu; i++)
	{
		::SetEvent(unpa[i].nven[0]);
		::WaitForSingleObject(unpa[i].thrd, INFINITE);
	}
	// 本線程結(jié)束
	TAN->thrd = 0;

	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CTcsTan2

CTcsTan2::CTcsTan2(TCS_V00)
{
	SYSTEM_INFO info;	::GetSystemInfo(&info);		m_cpu = info.dwNumberOfProcessors;

	m_P = 0;	m_nzn = 20000;		m_vpn = 0;

	m_G.idx = 0;	m_G.pid = 0;

	m_ATL = new CTcsBL;
	m_ARL = new CTcsBL;
	m_BSL = new CTcsHL(128, SIDE_EQLH, SIDE_HASH);

	// 分配線程參數(shù)
	long unnu = m_cpu;	if (unnu <= 2)	unnu = 2;
	TUN_PAR *unpa = new TUN_PAR[unnu];
	for (long i = 0; i < unnu; i++)
	{
		unpa[i].nven[0] = ::CreateEvent(0, 0, 0, 0);
		unpa[i].nven[1] = ::CreateEvent(0, 0, 1, 0);
		unpa[i].exit = &m_exit;
		unpa[i].thrd = 0;
		unpa[i].Z = 0;
		unpa[i].R = 0;
	}
	m_unpa = unpa;

	TAN_PAR *anpa = new TAN_PAR;
	anpa->exit = &m_exit;
	anpa->unnu = unnu;
	anpa->unpa = unpa;
	anpa->thrd = 0;

	anpa->nzn = &m_nzn;
	anpa->vpn = &m_vpn;
	anpa->btm = &m_btm;
	anpa->etm = &m_etm;
	anpa->ATL = m_ATL;
	anpa->ARL = m_ARL;
	anpa->BSL = m_BSL;
	anpa->G = &m_G;
	m_anpa = anpa;
}

CTcsTan2::~CTcsTan2(TCS_V00)
{
	m_exit = 1;
	TAN_PAR *anpa = (TAN_PAR*)m_anpa;
	// 等待線程結(jié)束
	::WaitForSingleObject(anpa->thrd, INFINITE);
	// 釋放資源
	TUN_PAR *unpa = (TUN_PAR*)m_unpa;
	for (long i = 0; i < anpa->unnu; i++)
	{
		::CloseHandle(unpa[i].nven[0]);
		::CloseHandle(unpa[i].nven[1]);
	}
	delete []unpa;	delete anpa;

	Free();

	delete m_ATL;	delete m_ARL;	delete m_BSL;
}

TCS_V00 CTcsTan2::Free(TCS_V00)
{
	if (m_G.idx)
	{
		long n = m_G.num[0] * m_G.num[1];
		for (long i = 0; i < n; i++)
		{
			if (m_G.idx[i].num > 0)
				delete []m_G.idx[i].pid;
		}
		delete []m_G.idx;
	}
	m_G.idx = 0;
	if (m_G.pid)
		delete []m_G.pid;
	m_G.pid = 0;
	// 釋放鏈表內(nèi)存
	TIN_T *T = (TIN_T*)m_ATL->RemoveHead();
	while (T)
	{
		delete T;
		T = (TIN_T*)m_ATL->RemoveHead();
	}
	TIN_S *S = (TIN_S*)m_BSL->RemoveHead();
	while (S)
	{
		delete S;
		S = (TIN_S*)m_BSL->RemoveNext();
	}
	TIN_R *R = (TIN_R*)m_ARL->RemoveHead();
	while (R)
	{
		CTcsBL *ATL = R->ATL;
		T = (TIN_T*)ATL->RemoveHead();
		while (T)
		{
			delete T;
			T = (TIN_T*)ATL->RemoveHead();
		}
		delete ATL;
		CTcsHL *ASL = R->ASL;
		S = (TIN_S*)ASL->RemoveHead();
		while (S)
		{
			delete S;
			S = (TIN_S*)ASL->RemoveNext();
		}
		delete ASL;
		CTcsHL *BSL = R->BSL;
		S = (TIN_S*)BSL->RemoveHead();
		while (S)
		{
			delete S;
			S = (TIN_S*)BSL->RemoveNext();
		}
		delete BSL;
		delete R;

		R = (TIN_R*)m_ARL->RemoveHead();
	}
}

TCS_S32 CTcsTan2::Make(TCS_F64 *P, TCS_S32 N, TCS_F64 dup)
{
	if (P == 0 || N <= 0 || dup < 0)
		return 0;
	// 判斷是否存在運行任務(wù)
	TAN_PAR *anpa = (TAN_PAR*)m_anpa;
	if (anpa->thrd != 0)
		return 0;

	// 釋放資源
	Free();
	// 初始化變量
	m_vpn = N;
	m_G.vpn = 0;
	m_G.pid = new TCS_S32[N];
	m_P = P;	m_N = N;	m_G.dup = dup;
	::memset(m_G.pid, 0, sizeof(TCS_S32) * N);
	ComBnd2(&m_G, m_P, m_N);	CnsIdx2(&m_G, m_P, m_N, 4);
	// 創(chuàng)建線程
	m_exit = 0;
	TUN_PAR *unpa = (TUN_PAR*)m_unpa;
	// 創(chuàng)建工作線程
	for (long i = 0; i < anpa->unnu; i++)
	{
		::SetEvent(unpa[i].nven[1]);
		::ResetEvent(unpa[i].nven[0]);
		unpa[i].Z = 0;	unpa[i].R = 0;
		unpa[i].thrd = ::CreateThread(0, 0, TunThread, &unpa[i], 0, 0);
	}
	// 創(chuàng)建控制線程
	anpa->P = P;
	anpa->thrd = ::CreateThread(0, 0, TanThread, anpa, 0, 0);

	return 1;
}

TCS_F64 CTcsTan2::Time(TCS_V00)
{
	TCS_TMB etm;	::_ftime_s(&etm);

	TCS_F64 dtm = ::difftime(m_etm.time, m_btm.time) + (m_etm.millitm - m_btm.millitm);
	if (dtm == 0)
		return (::difftime(etm.time, m_btm.time) + (etm.millitm - m_btm.millitm) / 1000.0);
	else
		return (::difftime(m_etm.time, m_btm.time) + (m_etm.millitm - m_btm.millitm) / 1000.0);
}

TCS_V00 CTcsTan2::Stop(TCS_V00)
{
	m_exit = 1;
	TAN_PAR *anpa = (TAN_PAR*)m_anpa;
	// 等待線程結(jié)束
	::WaitForSingleObject(anpa->thrd, INFINITE);
}

TCS_S32 CTcsTan2::Done(TCS_V00)
{
	TAN_PAR *anpa = (TAN_PAR*)m_anpa;
	if (anpa->thrd == 0)
		return 1;

	return 0;
}

TCS_V00 CTcsTan2::Proc(TCS_S32 &PN, TCS_S32 &TN)
{
	PN = TN = 0;
	// 統(tǒng)計完成點數(shù)和三角形數(shù)
	PN = m_G.vpn;
	TN = m_ATL->GetSize();

	TIN_R *R = (TIN_R*)m_ARL->GetHead();
	while (R)
	{
		PN += R->G->vpn;
		TN += R->ATL->GetSize();
		R = (TIN_R*)m_ARL->GetNext();
	}
}

TIN_G *CTcsTan2::TinG(TCS_V00)
{
	return &m_G;
}

TIN_T *CTcsTan2::TinT(TCS_S32 &TN)
{
	// 統(tǒng)計三角形數(shù)目
	TN = m_ATL->GetSize();
	TIN_R *R = (TIN_R*)m_ARL->GetHead();
	while (R)
	{
		TN += R->ATL->GetSize();
		R = (TIN_R*)m_ARL->GetNext();
	}
	// 獲得三角形數(shù)據(jù)
	TIN_T *T = new TIN_T[TN];

	TCS_S32 i = 0;
	TIN_T *E = (TIN_T*)m_ATL->GetHead();
	while (E)
	{
		T[i] = *E;	i++;
		E = (TIN_T*)m_ATL->GetNext();
	}
	R = (TIN_R*)m_ARL->GetHead();
	while (R)
	{
		E = (TIN_T*)R->ATL->GetHead();
		while (E)
		{
			T[i] = *E;	i++;
			E = (TIN_T*)R->ATL->GetNext();
		}
		R = (TIN_R*)m_ARL->GetNext();
	}

	return T;
}

TIN_R **CTcsTan2::TinR(TCS_S32 &RN)
{
	RN = m_ARL->GetSize();
	if (RN == 0)
		return 0;
	TIN_R **T = new TIN_R*[RN];

	TCS_S32 i = 0;
	TIN_R *R = (TIN_R*)m_ARL->GetHead();
	while (R)
	{
		T[i] = R;	i++;
		R = (TIN_R*)m_ARL->GetNext();
	}

	return T;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色老汉av一区二区三区| 亚洲国产日韩在线一区模特| 国产专区欧美精品| 国产女人18毛片水真多成人如厕 | 日韩一区二区视频| 亚洲一区二区四区蜜桃| 欧美视频一区二区在线观看| 亚洲一区二区三区四区的| 欧美高清激情brazzers| 久久超级碰视频| 国产蜜臀97一区二区三区| 96av麻豆蜜桃一区二区| 日产国产欧美视频一区精品 | 精品卡一卡二卡三卡四在线| 国产黄人亚洲片| 一区二区三区色| 在线综合+亚洲+欧美中文字幕| 久久电影国产免费久久电影 | 欧美亚洲高清一区二区三区不卡| 日韩avvvv在线播放| 久久精品一级爱片| 欧美中文字幕一区| 狠狠色综合色综合网络| 亚洲视频一区二区在线| 日韩免费电影网站| 成人18视频在线播放| 日日骚欧美日韩| 国产欧美视频在线观看| 在线不卡一区二区| 丁香婷婷综合网| 偷拍一区二区三区四区| 国产精品美女久久久久av爽李琼 | 在线观看免费成人| 狠狠久久亚洲欧美| 亚洲一区二区三区免费视频| 久久色.com| 欧美日韩高清在线播放| 国产.精品.日韩.另类.中文.在线.播放| 有码一区二区三区| 久久综合一区二区| 欧美日韩国产系列| 99精品久久只有精品| 激情成人综合网| 午夜成人在线视频| 亚洲色欲色欲www| 久久综合久久鬼色中文字| 欧美日韩中文另类| 不卡高清视频专区| 国产精品综合av一区二区国产馆| 午夜欧美大尺度福利影院在线看| 亚洲丝袜精品丝袜在线| 国产亲近乱来精品视频| 欧美岛国在线观看| 91.com视频| 欧美日韩国产影片| 在线视频一区二区免费| 94-欧美-setu| 成人午夜免费av| 国产91精品一区二区| 国产在线视频一区二区三区| 日本91福利区| 日本一不卡视频| 水野朝阳av一区二区三区| 一区2区3区在线看| 一区二区三区在线影院| 亚洲欧洲精品天堂一级| 国产精品久久久久久久久久免费看 | 国产欧美精品一区二区色综合朱莉| 51午夜精品国产| 欧美片网站yy| 日韩一区二区电影| 日韩亚洲欧美在线观看| 欧美一区二区在线看| 欧美一区二视频| 精品国产青草久久久久福利| www国产成人| 久久精品一区二区| 国产精品剧情在线亚洲| 综合自拍亚洲综合图不卡区| 亚洲精品久久7777| 亚洲成人综合网站| 日本午夜精品视频在线观看| 日本欧美加勒比视频| 美腿丝袜亚洲三区| 国产精品自拍av| 成人精品一区二区三区四区| 不卡视频在线看| 欧美在线视频不卡| 91精品国产麻豆国产自产在线| 日韩欧美一级精品久久| 久久久高清一区二区三区| 国产精品福利一区二区三区| 午夜精品一区二区三区免费视频| 日韩精品一二三| 经典三级视频一区| 99国产一区二区三精品乱码| 欧美性色黄大片| 日韩美女在线视频| 国产亲近乱来精品视频| 伊人夜夜躁av伊人久久| 日韩不卡一二三区| 成人av影院在线| 欧美日韩电影一区| 久久久精品欧美丰满| 日韩一区在线播放| 日韩综合小视频| 成人精品免费视频| 欧美日韩国产成人在线免费| 2021国产精品久久精品| 亚洲精品成人天堂一二三| 麻豆高清免费国产一区| 91麻豆精品一区二区三区| 日韩一区二区免费在线电影| 国产精品第四页| 秋霞电影一区二区| www.亚洲人| 日韩视频免费观看高清完整版 | 婷婷开心激情综合| 国产精品 日产精品 欧美精品| 在线免费观看视频一区| 日韩一区二区在线观看| 亚洲人一二三区| 久久丁香综合五月国产三级网站| 99re这里只有精品首页| 26uuu精品一区二区三区四区在线| **性色生活片久久毛片| 美女视频黄 久久| 欧美在线影院一区二区| 久久久欧美精品sm网站| 日本在线不卡视频一二三区| 99久久99久久免费精品蜜臀| 欧美电影精品一区二区| 亚洲综合丁香婷婷六月香| 成人污污视频在线观看| 日韩欧美二区三区| 亚洲国产精品人人做人人爽| 岛国精品在线观看| 欧美一区二区国产| 亚洲一区二区成人在线观看| 成人午夜激情视频| 337p日本欧洲亚洲大胆色噜噜| 亚洲成av人片一区二区三区| 一本大道综合伊人精品热热| 国产日韩欧美精品在线| 精品一区二区免费| 日韩一区二区三区高清免费看看| 亚洲一区二区三区在线看| 91在线你懂得| 国产精品第13页| av电影天堂一区二区在线| 久久精品免费在线观看| 国产一区二区网址| 日韩亚洲国产中文字幕欧美| 婷婷中文字幕综合| 欧美午夜精品一区| 亚洲午夜精品网| 欧美色视频在线| 亚洲一区二区三区不卡国产欧美| 在线影院国内精品| 亚洲精品国产精品乱码不99 | 成人伦理片在线| 国产精品久久久久久久久免费丝袜| 国产成人免费网站| 日本一区二区三区国色天香| 国产69精品久久久久777| 国产日韩精品一区二区三区在线| 国产精品一区不卡| 欧美激情一区二区| 成人晚上爱看视频| 亚洲婷婷综合色高清在线| 91首页免费视频| 久久99精品一区二区三区三区| 日韩欧美国产三级| 国产成人亚洲精品青草天美| 中文字幕av不卡| 99九九99九九九视频精品| 亚洲黄色录像片| 欧美老肥妇做.爰bbww视频| 欧美bbbbb| 久久久蜜臀国产一区二区| 成人激情动漫在线观看| 亚洲色图在线视频| 欧洲另类一二三四区| 午夜在线成人av| 精品免费国产二区三区| 成人综合在线视频| 亚洲午夜激情av| 欧美岛国在线观看| 99久久er热在这里只有精品15| 亚洲综合色区另类av| 欧美一区二区福利在线| 国产一级精品在线| 亚洲欧洲美洲综合色网| 欧美日韩国产高清一区二区| 狠狠色2019综合网| 亚洲欧美日韩在线| 日韩欧美黄色影院| av网站免费线看精品| 亚洲r级在线视频| 国产亚洲一二三区|