亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
老司机精品视频一区二区三区| 激情亚洲综合在线| 亚洲国产成人porn| 午夜伊人狠狠久久| 久久99国产精品免费网站| 精品亚洲国内自在自线福利| 丁香桃色午夜亚洲一区二区三区| 不卡免费追剧大全电视剧网站| 欧日韩精品视频| 一本一道久久a久久精品综合蜜臀| 欧美在线你懂得| 26uuu精品一区二区在线观看| 2023国产精品| 一区二区三区欧美在线观看| 秋霞电影网一区二区| 国产a久久麻豆| 欧美日韩久久不卡| 日本一区二区免费在线| 亚洲.国产.中文慕字在线| 蜜臀av性久久久久蜜臀aⅴ四虎 | 三级影片在线观看欧美日韩一区二区| 人人超碰91尤物精品国产| 不卡一区二区中文字幕| 日韩精品一区二区三区中文不卡| 亚洲国产激情av| 日日噜噜夜夜狠狠视频欧美人 | 国产精品一线二线三线| 日本久久电影网| 2020国产成人综合网| 亚洲一区二区三区四区五区黄| 国产精品18久久久久久久久| 欧美精品久久久久久久多人混战| 国产精品久久网站| 国产一区二区三区视频在线播放| 在线亚洲一区二区| 国产精品欧美久久久久无广告| 美女免费视频一区二区| 一本到三区不卡视频| 国产日韩欧美精品在线| 精品影院一区二区久久久| 日韩亚洲欧美在线| 亚洲电影中文字幕在线观看| 成人免费视频免费观看| 久久久精品2019中文字幕之3| 婷婷开心激情综合| 日韩一区国产二区欧美三区| 久久国产精品一区二区| 久久综合999| 国产成人免费视频| 国产精品欧美一区喷水| 色综合天天性综合| 天堂av在线一区| 欧美一区二区三区四区在线观看| 精品综合久久久久久8888| 久久久久国产精品免费免费搜索| 成人免费视频caoporn| 亚洲精品免费播放| 日韩一区二区三区四区 | 日韩欧美国产小视频| 国产毛片精品国产一区二区三区| 欧美经典一区二区三区| 一本大道久久a久久精二百| 午夜精品免费在线| 精品久久人人做人人爱| 99re在线精品| 视频一区二区欧美| 国产欧美一区二区精品秋霞影院| 色综合久久久久综合99| 喷白浆一区二区| 中文字幕一区视频| 欧美精品在线观看播放| 国产精品99久久久久久宅男| 夜夜精品视频一区二区| 久久色在线视频| 色先锋资源久久综合| 久久精品国产亚洲一区二区三区| 亚洲欧洲日本在线| 91精品国产综合久久福利| 精品国产一区二区三区忘忧草| 国产盗摄精品一区二区三区在线| 一区二区三区中文字幕在线观看| 精品国产一二三区| 在线日韩av片| 国产成人在线视频播放| 亚洲一区av在线| 中文在线资源观看网站视频免费不卡 | aaa欧美大片| 麻豆精品在线播放| 一区二区不卡在线播放| 国产色产综合色产在线视频| 欧美一区国产二区| 欧美日韩一区二区在线观看视频 | 成人动漫中文字幕| 理论电影国产精品| 亚洲国产欧美一区二区三区丁香婷| 2021国产精品久久精品| 欧美精品一卡二卡| 91视视频在线直接观看在线看网页在线看| 麻豆成人91精品二区三区| 午夜精品一区二区三区三上悠亚| 欧美高清在线视频| 久久伊99综合婷婷久久伊| 91精品国产综合久久国产大片| 欧美性猛交一区二区三区精品| 成人一级视频在线观看| 国产成人高清在线| 久久99精品久久久久| 美女精品一区二区| 性做久久久久久久久| 亚洲一区二区三区在线| 亚洲欧美偷拍另类a∨色屁股| 国产女人18毛片水真多成人如厕| 精品国产一区二区三区不卡| 欧美一区二区三区四区五区| 欧美一区二区三区免费观看视频 | 一区二区三区中文字幕在线观看| 免费在线观看成人| 免费在线观看一区| 久久精品国产精品亚洲红杏| 日韩精品视频网站| 日本aⅴ免费视频一区二区三区| 亚洲成人免费看| 视频一区二区三区在线| 另类中文字幕网| 捆绑调教美女网站视频一区| 久久成人免费电影| 国产另类ts人妖一区二区| 国产精品自拍网站| 成人丝袜高跟foot| 91在线精品一区二区| 色婷婷综合久久久久中文一区二区| 色域天天综合网| 在线观看视频一区| 欧美日韩一区中文字幕| 日韩视频在线一区二区| 精品女同一区二区| 久久久一区二区三区捆绑**| 国产精品午夜在线观看| 尤物av一区二区| 日本sm残虐另类| 国产99久久精品| 97精品国产露脸对白| 欧美午夜在线一二页| 日韩欧美的一区| 亚洲国产电影在线观看| 一区二区三区日韩精品| 久久99热这里只有精品| 成人av网站免费| 欧美麻豆精品久久久久久| 精品久久久久99| 1000部国产精品成人观看| 午夜一区二区三区在线观看| 国产中文一区二区三区| 91视频91自| 欧美成人一级视频| 亚洲同性gay激情无套| 偷拍日韩校园综合在线| 国产91精品入口| 在线不卡的av| 国产精品三级av| 蜜臀av一级做a爰片久久| 不卡av在线免费观看| 在线播放视频一区| 国产精品麻豆欧美日韩ww| 天天色综合天天| 99综合电影在线视频| 欧美一区二区福利在线| 综合中文字幕亚洲| 国产在线精品免费| 欧美日韩亚洲高清一区二区| 国产日韩精品久久久| 日韩福利电影在线| 色诱视频网站一区| 国产精品免费aⅴ片在线观看| 日本亚洲最大的色成网站www| 91麻豆自制传媒国产之光| 久久综合资源网| 日韩激情视频网站| 91在线国产观看| 欧美极品xxx| 极品美女销魂一区二区三区| 欧美喷水一区二区| 亚洲欧美另类小说| 国产成人自拍高清视频在线免费播放| 91麻豆精品国产自产在线观看一区| 亚洲欧美综合在线精品| 国产suv精品一区二区6| 久久综合一区二区| 精品综合免费视频观看| 精品视频一区三区九区| 亚洲免费av高清| 91丨九色丨国产丨porny| 国产精品久久久久永久免费观看| 狠狠色狠狠色综合| 精品国产91乱码一区二区三区 | 国产欧美精品一区二区三区四区| 秋霞电影一区二区| 4438成人网| 日本不卡1234视频| 欧美欧美欧美欧美首页|