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

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

?? tincore.cpp

?? 并行TIN生成算法, 基于DeWall算法理論實現
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
// TinCore.cpp
// 鄧雪清, 2007/09/27

#include <math.h>
#include "stdafx.h"
#include "TinCore.h"

// 歐拉距離平方
double EuLen2D(TSS_FLT64 *pt1, TSS_FLT64 *pt2);
// 計算外接圓
void CalcCircum(TSS_FLT64 *pt1, TSS_FLT64 *pt2, TSS_FLT64 *pt3, TSS_FLT64 *cen);

//#define _TIN_DEBUG_

// 測試函數
long HavePoint(TIN_TGON *tgon, IDX_GRID *uidx, TSS_FLT64 *ppts, TSS_SNT32 ddim);

// 從格網數據構建TIN
// 1 隱含沒有重合點
// 2 vnum為三角形數目
// 3 vidx為頂點索引, 3個一組
long GridToTin2D(POINT2D *ppts, TSS_SNT32 *pnum, TSS_SNT32 *stop, TSS_SNT32 *vnum, TSS_SNT32 **vidx, TSS_TIMEB *betm, TSS_TIMEB *entm)
{
	if (!ppts || *pnum <= 0)
		return 0;

	::_ftime_s(betm);
	//////////////////////////////////
	TSS_SNT32 i, k, csum, *ppid, ddim = 2, onum = *pnum;

	ppid = new TSS_SNT32[onum];
	if (!ppid)
		return 0;
	::memset(ppid, 0, sizeof(TSS_SNT32) * (onum));

	//////////////////////////////////
	IDX_GRID uidx;
	// 計算坐標邊界
	uidx.bnd[0] = uidx.bnd[2] = ppts[0].x;
	uidx.bnd[1] = uidx.bnd[3] = ppts[0].y;
	for (i = 1; i < onum; i++)
	{
		if		(uidx.bnd[0] > ppts[i].x)	uidx.bnd[0] = ppts[i].x;
		else if (uidx.bnd[2] < ppts[i].x)	uidx.bnd[2] = ppts[i].x;
		if		(uidx.bnd[1] > ppts[i].y)	uidx.bnd[1] = ppts[i].y;
		else if (uidx.bnd[3] < ppts[i].y)	uidx.bnd[3] = ppts[i].y;
	}
	//////////////////////////////////
	// 建立網格索引
	uidx.dup = 0;
	CalcGridSize(&uidx, onum, 1);

	csum = uidx.num[0] * uidx.num[1];
	if (csum == 0)
	{	delete []ppid;	return 0;	}
	uidx.idx = new IDX_CELL[csum];
	if (!uidx.idx)
	{	delete []ppid;	return 0;	}
	::memset(uidx.idx, 0, sizeof(IDX_CELL) * csum);

	for (i = 0; i < onum; i++)
	{
		k = CalcGridCell(&uidx, (TSS_FLT64*)(ppts + i));
		AddPid(uidx.idx + k, i);
	}
	//////////////////////////////////
	TSS_FLT64 dm2 = (uidx.bnd[0] - uidx.bnd[2]) * (uidx.bnd[0] - uidx.bnd[2]);
			  dm2+= (uidx.bnd[1] - uidx.bnd[3]) * (uidx.bnd[1] - uidx.bnd[3]);

	// 構建初始三角形
	TSS_SNT32 pid[3], cid[3];

	*pnum = 0;
	if (!MakeFirstSimplex(&uidx, (TSS_FLT64*)ppts, ddim, stop, dm2, pid, cid))
	{
		FreeCell(uidx.idx, csum);
		delete [](uidx.idx);
		delete []ppid;
		return 0;
	}
	//////////////////////////////////
	CTssList *ATL = new CTssList;

	MakeSimplex(&uidx, (TSS_FLT64*)ppts, ddim, ppid, pnum, vnum, stop, pid, cid, ATL);

	::_ftime_s(entm);

	*vnum = ATL->GetSize();

	if (*vnum > 0)
	{
		TIN_TGON *TGon = (TIN_TGON*)(ATL->RemoveHead());
		TSS_SNT32 *TTmp = *vidx = new TSS_SNT32[*vnum * 3];
		for (i = 0; i < *vnum; i++, TGon = (TIN_TGON*)(ATL->RemoveHead()))
		{
			k = 3 * i;
			TTmp[k + 0] = TGon->pid[0];
			TTmp[k + 1] = TGon->pid[1];
			TTmp[k + 2] = TGon->pid[2];	delete TGon;
		}
	}
	else
		*vidx = 0;

	delete ATL;	delete []ppid;
	FreeCell(uidx.idx, csum);
	delete [](uidx.idx);

	return 1;
}

	// 測試是否存在重合點
/*	{
		long cnt = 0;
		POINT3D *pt1, *pt2;
		for (i = 0; i < num; i++)
		{
			if (ppid[i] == -1)
				continue;
			pt1 = pts + i;
			for (k = i + 1; k < num; k++)
			{
				if (ppid[k] == -1)
					continue;
				pt2 = pts + k;
				if (pt1->x - dup <= pt2->x && pt2->x <= pt1->x + dup &&
					pt1->y - dup <= pt2->y && pt2->y <= pt1->y + dup)
				{
					ppid[k] = -1;
					cnt++;
				}
			}
		}
		if (cnt > 0)
			return 0;
	}
*/

// 測試是否包含點
long HavePoint(CTssList *ATL, IDX_GRID *uidx, TSS_FLT64 *ppts, TSS_SNT32 ddim)
{
	TSS_SNT32 i, tnum = ATL->GetSize();
	TIN_TGON *tgon = (TIN_TGON*)(ATL->GetHead());
	for (i = 0; i < tnum; i++, tgon = (TIN_TGON*)(ATL->GetNext()))
	{
		if (HavePoint(tgon, uidx, ppts, ddim))
			return 1;
	}

	return 0;
}

long DelaunayTriangulation2D(POINT3D *ppts, TSS_SNT32 *pnum, TSS_FLT32 ddup, TSS_SNT32 *stop,
							 TSS_SNT32 *vnum, TSS_SNT32 **vidx, TSS_TIMEB *betm, TSS_TIMEB *entm)
{
	if (!ppts || *pnum <= 0 || ddup < 0)
		return 0;

	::_ftime_s(betm);
	//////////////////////////////////
	TSS_SNT32 i, k, csum, ddim = 3;

	TSS_SNT32 *ppid = new TSS_SNT32[*pnum];
	if (!ppid)
		return 0;
	::memset(ppid, 0, sizeof(TSS_SNT32) * (*pnum));

	//////////////////////////////////
	IDX_GRID uidx;
	// 計算坐標邊界
	uidx.bnd[0] = uidx.bnd[2] = ppts[0].x;
	uidx.bnd[1] = uidx.bnd[3] = ppts[0].y;
	for (i = 1; i < *pnum; i++)
	{
		if		(uidx.bnd[0] > ppts[i].x)	uidx.bnd[0] = ppts[i].x;
		else if (uidx.bnd[2] < ppts[i].x)	uidx.bnd[2] = ppts[i].x;
		if		(uidx.bnd[1] > ppts[i].y)	uidx.bnd[1] = ppts[i].y;
		else if (uidx.bnd[3] < ppts[i].y)	uidx.bnd[3] = ppts[i].y;
	}
	//////////////////////////////////
	// 建立網格索引
	uidx.dup = ddup;
	CalcGridSize(&uidx, *pnum, 1);

	csum = uidx.num[0] * uidx.num[1];
	if (csum == 0)
	{	delete []ppid;	return 0;	}
	uidx.idx = new IDX_CELL[csum];
	if (!uidx.idx)
	{	delete []ppid;	return 0;	}
	::memset(uidx.idx, 0, sizeof(IDX_CELL) * csum);

	for (i = 0; i < *pnum; i++)
	{
		k = CalcGridCell(&uidx, (TSS_FLT64*)(ppts + i));
		AddPid(uidx.idx + k, i);
	}
	//////////////////////////////////
	*pnum = 0;
	// 消除重合點
	RemoveDupA(&uidx, pnum, ddim, (TSS_FLT64*)ppts, ppid, stop);
	//////////////////////////////////
	TSS_FLT64 dm2 = (uidx.bnd[0] - uidx.bnd[2]) * (uidx.bnd[0] - uidx.bnd[2]);
			  dm2+= (uidx.bnd[1] - uidx.bnd[3]) * (uidx.bnd[1] - uidx.bnd[3]);

	// 構建初始三角形
	TSS_SNT32 pid[3], cid[3];

	if (!MakeFirstSimplex(&uidx, (TSS_FLT64*)ppts, ddim, stop, dm2, pid, cid))
	{
		FreeCell(uidx.idx, csum);
		delete [](uidx.idx);
		delete []ppid;
		return 0;
	}
	//////////////////////////////////
	CTssList *ATL = new CTssList;

	MakeSimplex(&uidx, (TSS_FLT64*)ppts, ddim, ppid, pnum, vnum, stop, pid, cid, ATL);

	::_ftime_s(entm);

	if (HavePoint(ATL, &uidx, (TSS_FLT64*)ppts, ddim))
		return 0;

	*vnum = ATL->GetSize();

	if (*vnum > 0)
	{
		TIN_TGON *TGon = (TIN_TGON*)(ATL->RemoveHead());
		TSS_SNT32 *TTmp = *vidx = new TSS_SNT32[*vnum * 6];
		for (i = 0; i < *vnum; i++, TGon = (TIN_TGON*)(ATL->RemoveHead()))
		{
			k = i * 6;
			TTmp[k + 0] = TGon->pid[0];
			TTmp[k + 1] = TGon->pid[1];
			TTmp[k + 2] = TGon->pid[2];	delete TGon;
		}
	}
	else
		*vidx = 0;

	delete ATL;	delete []ppid;
	FreeCell(uidx.idx, csum);
	delete [](uidx.idx);

	return 1;
}

// 測試函數
long HavePoint(TIN_TGON *tgon, IDX_GRID *uidx, TSS_FLT64 *ppts, TSS_SNT32 ddim)
{
	TSS_SNT32 c[3], r[3], i, k, n, cid, nid, cnt, sum;
	TSS_SNT32 col = uidx->num[0], row = uidx->num[1];

	TSS_FLT64 *pt1 = ppts + tgon->pid[0] * ddim;
	TSS_FLT64 *pt2 = ppts + tgon->pid[1] * ddim;
	TSS_FLT64 *pt3 = ppts + tgon->pid[2] * ddim;

	TSS_FLT64 cen[2], *pt4, rad;
	IDX_CELL *cell, *cidx = uidx->idx;

	CalcCircum(pt1, pt2, pt3, cen);		rad = EuLen2D(pt1, cen);
	CalcSearchBound(uidx->bnd, uidx->spn, col, row, cen, ::sqrt(rad), c[1], c[2], r[1], r[2]);

	for (i = r[1]; i <= r[2]; i++)
	{
		cid = i * col;
		for (k = c[1]; k <= c[2]; k++)
		{
			cell = cidx + cid + k;	cnt = cell->cnt;	sum = cell->sum;
			for (n = cnt; n < sum; n++)
			{
				nid = cell->pid[n];
				pt4 = ppts + ddim * nid;
				if (pt4 == pt1 || pt4 == pt2 || pt4 == pt3)
					continue;
				if (EuLen2D(pt4, cen) < rad)
					return 1;
			}
		}
	}

	return 0;
}

///////////////////////////////////////////////////////////////////
// 基本函數

TSS_SNT32 FACE_EQLH(void const *f1, void const *f2)
{
	TIN_FACE const *m1 = (TIN_FACE const *)f1;
	TIN_FACE const *m2 = (TIN_FACE const *)f2;
	return (m1->sid[0] == m2->sid[0] && m1->eid[0] == m2->eid[0]);
}

TSS_UNT32 FACE_HASH(void const *f1)
{
	TIN_FACE const *m1 = (TIN_FACE const *)f1;
	return (EQHASH(m1->sid[0]) ^ EQHASH(m1->eid[0]));
}

void CalcGridSize(IDX_GRID *uidx, TSS_SNT32 num, TSS_SNT32 avg)
{
	TSS_SNT32 *mat = uidx->num;
	TSS_FLT32  dup = uidx->dup;
	TSS_FLT64 *bnd = uidx->bnd;
	TSS_FLT64 *spn = uidx->spn;

	TSS_FLT64 sum = (bnd[2] - bnd[0]) * (bnd[3] - bnd[1]);
	if (sum == 0.0)	// 至少存在1維共線
	{	mat[0] = 0;	return;	}

	sum = sum / num * avg;
	spn[0] = spn[1] = sqrt(sum);
	if (dup >= spn[0])	// 便于處理重合點
		spn[0] = spn[1] = 2 * dup;
	
	mat[0] = TSS_SNT32((bnd[2] - bnd[0]) / spn[0]);
	if (mat[0] * spn[0] <= bnd[2] - bnd[0])
		mat[0] += 1;
	mat[1] = TSS_SNT32((bnd[3] - bnd[1]) / spn[1]);
	if (mat[1] * spn[1] <= bnd[3] - bnd[1])
		mat[1] += 1;
}

inline long CalcGridCell(IDX_GRID *uidx, TSS_FLT64 *pnt)
{
	TSS_SNT32 c = TSS_SNT32((pnt[0] - uidx->bnd[0]) / uidx->spn[0]);
	TSS_SNT32 r = TSS_SNT32((pnt[1] - uidx->bnd[1]) / uidx->spn[1]);

	return (r * uidx->num[0] + c);
}

inline void CalcGridCell(IDX_GRID *uidx, TSS_FLT64 *pnt, TSS_SNT32 *pos)
{
	pos[0] = TSS_SNT32((pnt[0] - uidx->bnd[0]) / uidx->spn[0]);
	pos[1] = TSS_SNT32((pnt[1] - uidx->bnd[1]) / uidx->spn[1]);
}

void AddPid(IDX_CELL *cell, TSS_SNT32 pid)
{
	if (cell->cnt < cell->num)
	{
		cell->pid[cell->cnt] = pid;
		cell->cnt++;	cell->sum++;
	}
	else
	{
		TSS_SNT32  num = cell->cnt + 4;
		TSS_SNT32 *buf = new TSS_SNT32[num];
		::memcpy(buf, cell->pid, 4 * cell->cnt);

		buf[cell->cnt] = pid;	cell->cnt++;	cell->sum++;
		cell->num = num;	delete []cell->pid;		cell->pid = buf;
	}
}

// 用于刪除重合點
inline void DelPid(IDX_CELL *cell, TSS_SNT32 pos)
{
	cell->cnt--;	cell->sum--;
	cell->pid[pos] = cell->pid[cell->cnt];
}

// 用于刪除閉合點
inline void DelPidEx(IDX_CELL *cell, TSS_SNT32 pid)
{
	TSS_SNT32 *tmp = cell->pid, cnt = cell->cnt;
	for (TSS_SNT32 n = cnt - 1; n >= 0; n--)
	{
		if (tmp[n] == pid)
		{
			cnt--;	tmp[n] = tmp[cnt];	tmp[cnt] = pid;
			cell->cnt = cnt;	return;
		}
	}
}

inline void SetFace(TIN_FACE *face, TSS_SNT32 sid, TSS_SNT32 eid, TSS_SNT32 pid, TSS_SNT32 tid, TSS_SNT32 sic, TSS_SNT32 eic)
{
	if (sid > eid)
	{
		face->sid[0] = sid;	face->eid[0] = eid;	face->sid[1] = sic;	face->eid[1] = eic;
	}
	else
	{
		face->sid[0] = eid;	face->eid[0] = sid;	face->sid[1] = eic;	face->eid[1] = sic;
	}
	face->pid = pid;	face->tid = tid;
}

// 檢查用2次邊
inline void SetFace(TIN_FACE *face, TSS_SNT32 sid, TSS_SNT32 eid)
{
	if (sid > eid)
	{
		face->sid[0] = sid;	face->eid[0] = eid;
	}
	else
	{
		face->sid[0] = eid;	face->eid[0] = sid;
	}
}

// 歐拉距離平方
inline double EuLen2D(TSS_FLT64 *p1, TSS_FLT64 *p2)
{
	TSS_FLT64 dx = p1[0] - p2[0];
	TSS_FLT64 dy = p1[1] - p2[1];
	return (dx * dx + dy * dy);
}

// 消除重合點
void RemoveDupA(IDX_GRID *uidx, TSS_SNT32 *pnum, TSS_SNT32 ddim, TSS_FLT64 *ppts, TSS_SNT32 *ppid, TSS_SNT32 *stop)
{
	// 處理四周單元, 不包括角單元
	TSS_SNT32 col = uidx->num[0], row = uidx->num[1];
	if (row > 2)
		RemoveDupC(uidx, pnum, ddim, ppts, ppid, 0, 1, row - 2);
	if (col > 1 && row > 2)
		RemoveDupC(uidx, pnum, ddim, ppts, ppid, col - 1, 1, row - 2);
	if (col > 2)
		RemoveDupR(uidx, pnum, ddim, ppts, ppid, 0, 1, col - 2);
	if (row > 1 && col > 2)
		RemoveDupR(uidx, pnum, ddim, ppts, ppid, row - 1, 1, col - 2);

	// 檢測停止標志
	if (!(*stop))
		return;
	// 處理邊界單元
	RemoveDupS(uidx, pnum, ddim, ppts, ppid);

	// 檢測停止標志
	if (!(*stop))
		return;
	// 處理中間單元
	if (col > 2 && row > 2)
		RemoveDupM(uidx, pnum, ddim, ppts, ppid, stop, 1, col - 2, 1, row - 2);
}

// 按列處理重合點
// 要求r1 >= 1, r2 <= row - 2
void RemoveDupC(IDX_GRID *uidx, TSS_SNT32 *pnum, TSS_SNT32 ddim, TSS_FLT64 *ppts, TSS_SNT32 *ppid, TSS_SNT32 c, TSS_SNT32 r1, TSS_SNT32 r2)
{
	TSS_FLT32  dup = uidx->dup;
	TSS_FLT64 *bnd = uidx->bnd;
	TSS_FLT64 *spn = uidx->spn;
	TSS_SNT32 *num = uidx->num;
	IDX_CELL *cidx = uidx->idx;
	TSS_SNT32 col = num[0], row = num[1];

	TSS_FLT64 *pt, ty;
	IDX_CELL *cell, *neig;
	TSS_SNT32 r, n, cid, *pid;

	ty = bnd[1] + r1 * spn[1];
	for (r = r1; r <= r2; r++)
	{
		cid = r * col + c;		ty += spn[1];
		cell = cidx + cid;		pid = cell->pid;	neig = cell + col;
		for (n = cell->cnt - 1; n >= 0; n--)
		{
			pt = ppts + ddim * pid[n];
			if (IsHaveDup(cell, ppts, ddim, dup, pt, n - 1))
			{
				ppid[pid[n]] = -1;	DelPid(cell, n);	pnum++;
			}
			else
			{
				// 上單元
				if (pt[1] + dup >= ty && IsHaveDup(neig, ppts, ddim, dup, pt, neig->cnt - 1))
				{
					ppid[pid[n]] = -1;	DelPid(cell, n);	pnum++;
				}
			}
		}
	}
}

// 按行處理重合點
// 要求c1 >= 1, c2 <= col - 2

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区黄色| 国产乱子伦视频一区二区三区 | 欧美伊人久久大香线蕉综合69| 97久久精品人人做人人爽50路| 91精品在线免费观看| 中文字幕欧美日本乱码一线二线| 天天色图综合网| 91啪在线观看| 国产欧美日韩精品一区| 久久国产精品无码网站| 欧美视频一区二区三区在线观看| 欧美国产激情一区二区三区蜜月| 日本中文字幕不卡| 欧洲在线/亚洲| 亚洲人成网站影音先锋播放| 国产一区二区福利视频| 日韩欧美另类在线| 日本欧美在线看| 欧美日韩亚洲综合在线| 一区二区三区免费在线观看| 成人一区二区三区视频在线观看| 欧美不卡一区二区三区四区| 亚洲成人动漫在线观看| 在线免费观看不卡av| 国产精品传媒入口麻豆| 成人sese在线| 中文字幕一区二区三区四区不卡| 国产成人精品亚洲777人妖| 亚洲三级在线播放| 成人美女视频在线观看18| 久久午夜羞羞影院免费观看| 国内精品免费**视频| 日韩欧美国产麻豆| 精品一区二区影视| 久久―日本道色综合久久| 国产一区二区三区综合| 2021中文字幕一区亚洲| 国产美女精品人人做人人爽| 久久日一线二线三线suv| 国产精品 欧美精品| 国产欧美日韩另类一区| 不卡av在线网| 一区二区不卡在线播放 | 亚洲日本成人在线观看| 成人免费视频视频| 欧美videossexotv100| 久久成人免费日本黄色| 久久亚洲综合av| 北条麻妃国产九九精品视频| 一区二区中文视频| 色综合色狠狠综合色| 亚洲一区二区免费视频| 日韩欧美一级二级三级久久久| 精品一二三四区| 国产精品麻豆99久久久久久| 色先锋aa成人| 人人超碰91尤物精品国产| 337p粉嫩大胆噜噜噜噜噜91av| 成人开心网精品视频| 亚洲一区精品在线| 精品欧美一区二区久久| 成人av免费观看| 偷拍日韩校园综合在线| 久久久五月婷婷| 欧洲激情一区二区| 久久激情五月激情| 中文字幕一区二区不卡| 91精品久久久久久久91蜜桃| 国产精品99久久久久久宅男| 另类人妖一区二区av| 国产午夜三级一区二区三| 色综合久久天天综合网| 久久精品99国产精品| 中文字幕综合网| 日韩女同互慰一区二区| voyeur盗摄精品| 久久精品免费看| 亚洲欧洲精品一区二区三区 | 亚洲一区在线视频| 精品三级在线观看| 色拍拍在线精品视频8848| 久久精品国产精品亚洲精品| 亚洲日本在线看| 久久九九国产精品| 91精品一区二区三区在线观看| 97久久人人超碰| 国产91精品久久久久久久网曝门| 午夜私人影院久久久久| 国产精品三级在线观看| 欧美一区二区精品| 欧美视频一区二区三区四区 | 国产欧美视频一区二区| 欧美一级日韩免费不卡| 色爱区综合激月婷婷| 国产一区 二区| 蜜桃视频在线观看一区| 亚洲综合图片区| 中文字幕亚洲综合久久菠萝蜜| 精品国产123| 日韩欧美在线影院| 欧美日韩国产美女| 在线精品亚洲一区二区不卡| 盗摄精品av一区二区三区| 久久精工是国产品牌吗| 日韩 欧美一区二区三区| 亚洲一区二区三区三| 亚洲精品伦理在线| 国产精品拍天天在线| 国产亚洲成av人在线观看导航| 日韩欧美国产一区二区在线播放 | 成人免费毛片app| 国产在线精品一区二区| 精品写真视频在线观看| 狠狠色狠狠色综合系列| 麻豆成人免费电影| 六月丁香婷婷色狠狠久久| 日本视频中文字幕一区二区三区| 午夜视频在线观看一区| 日韩专区一卡二卡| 日韩电影免费在线| 蜜臀av性久久久久蜜臀aⅴ| 奇米影视7777精品一区二区| 奇米精品一区二区三区在线观看| 婷婷中文字幕综合| 日本欧美加勒比视频| 久久精品国产99久久6| 国产米奇在线777精品观看| 国产高清在线观看免费不卡| 成人永久aaa| 91污在线观看| 欧美日韩精品专区| 日韩欧美一级二级三级| 国产欧美日产一区| 亚洲欧美日韩国产中文在线| 亚洲精品va在线观看| 亚洲成人高清在线| 国产一区三区三区| 91在线porny国产在线看| 在线免费观看视频一区| 91精品久久久久久久久99蜜臂| 日韩视频在线一区二区| 久久亚洲精华国产精华液| 日韩美女视频一区二区| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩视频不卡| 精品国产自在久精品国产| 亚洲国产激情av| 亚洲一级二级在线| 九一九一国产精品| 91小视频免费看| 欧美岛国在线观看| 亚洲欧美一区二区三区久本道91| 亚洲国产cao| 高清国产一区二区| 欧美日韩性生活| 久久精品夜色噜噜亚洲aⅴ| 夜夜爽夜夜爽精品视频| 韩国成人福利片在线播放| 91黄色免费看| 久久久久国产精品厨房| 亚洲一区二区三区中文字幕| 久久疯狂做爰流白浆xx| 色综合久久中文综合久久牛| 精品奇米国产一区二区三区| 一区二区三区精品视频| 国产精品99久久久久| 欧美高清你懂得| 中文字幕永久在线不卡| 精品影院一区二区久久久| 欧美婷婷六月丁香综合色| 国产欧美精品国产国产专区| 天天色天天爱天天射综合| 99久久99久久久精品齐齐| 26uuu色噜噜精品一区| 亚洲黄色片在线观看| 国产成人免费在线观看不卡| 欧美一区二区福利视频| 亚洲综合激情另类小说区| 99免费精品在线| 欧美国产精品中文字幕| 经典三级视频一区| 欧美一二三四区在线| 夜色激情一区二区| 97久久超碰国产精品电影| 国产亚洲精品超碰| 国产精品中文字幕欧美| 欧美r级在线观看| 日本欧美在线观看| 717成人午夜免费福利电影| 一区二区三区电影在线播| 99视频超级精品| 中文字幕不卡在线观看| 国产盗摄精品一区二区三区在线| 日韩欧美在线综合网| 美腿丝袜亚洲三区| 91精品国产色综合久久ai换脸 | 久久精品一级爱片| 国产aⅴ综合色| 国产亚洲一区二区在线观看| 国产主播一区二区|