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

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

?? xmath.h

?? 一個簡單的數(shù)學(xué)庫.但是很實用..大家可以下載過去研究一下.
?? H
?? 第 1 頁 / 共 3 頁
字號:
// 點積
//
template<class T>
T operator * (const CVector<T,2> &v1, const CVector<T,2> &v2)
{
	CVector<T,2> r=v1;
	return r.Dot(v2);
}

template<class T>
T operator * (const CVector<T,3> &v1, const CVector<T,3> &v2)
{
	CVector<T,3> r=v1;
	return r.Dot(v2);
}

template<class T>
T operator * (const CHomoVector4D<T> &v1, const CHomoVector4D<T> &v2)
{
	CHomoVector4D<T> r=v1;
	return r.Dot(v2);
}

//
// 數(shù)量積
//
template<class T>
CVector<T,2> operator * (const CVector<T,2> &v1, T val)
{
	CVector<T,2> r=v1;
	return r.Scale(val);
}

template<class T>
CVector<T,3> operator * (const CVector<T,3> &v1, T val)
{
	CVector<T,3> r=v1;
	return r.Scale(val);
}

template<class T>
CHomoVector4D<T> operator * (const CHomoVector4D<T> &v1, T val)
{
	CHomoVector4D<T> r=v1;
	return r.Scale(val);
}

////////////////////////////////////////////////////////////////////////////////////////

//
// 坐標(biāo)轉(zhuǎn)換
//

// 2D極坐標(biāo)
template<class T>
struct CPolar
{
	T	r;			// 半徑
	T	theta;		// 角度
};

// 3D柱面坐標(biāo)
template<class T>
struct CCylindrical
{
	T	r;			// 半徑
	T	theta;		// 角度
	T	z;			// Z坐標(biāo)
};

// 3D球坐標(biāo)
template<class T>
struct CSpherical
{
	T	r;			// 半徑
	T	theta;		// 向量在X-Y面上的投影于正X軸間的夾角
	T	phi;		// 向量與正Z軸的夾角
};

//
// 2D笛卡爾坐標(biāo)與極坐標(biāo)之間的轉(zhuǎn)換
//
template<class T>
inline void PolarToCart (const CPolar<T> &p, CVector<T,2> &v)
{
	v.x = p.r * cos(p.theta);
	v.y = p.r * sin(p.theta);
}

template<class T>
inline void CartToPolar (const CVector<T,2> &v, CPolar<T> &p)
{
	p.r = v.Length();
	p.theta = atan2(v.y, v.x);
}

//
// 3D(4D齊次)笛卡爾坐標(biāo)與柱面坐標(biāo)之間的轉(zhuǎn)換
//
template<class T>
inline void CylindricalToCart (const CCylindrical<T> &c, CVector<T,3> &v)
{
	v.x = c.r * cos(c.theta);
	v.y = c.r * sin(c.theta);
	v.z = c.z;
}

template<class T>
inline void CylindricalToCart (const CCylindrical<T> &c, CHomoVector4D<T> &v)
{
	v.x = c.r * cos(c.theta);
	v.y = c.r * sin(c.theta);
	v.z = c.z;
	v.w = 1;
}

template<class T>
inline void CartToCylindrical (const CVector<T,3> &v, CCylindrical<T> &c)
{
	c.r = sqrt(v.x*v.x + v.y*v.y);
	c.theta = atan2(v.y,v.x);
	c.z = v.z;
}

template<class T>
inline void CartToCylindrical (const CHomoVector4D<T> &v, CCylindrical<T> &c)
{
	c.r = sqrt(v.x*v.x + v.y*v.y);
	c.theta = atan2(v.y,v.x);
	c.z = v.z;
}

//
// 3D(4D齊次)笛卡爾坐標(biāo)與球坐標(biāo)之間的轉(zhuǎn)換
//
template<class T>
void SphericalToCart (const CSpherical<T> &s, CVector<T,3> &v)
{
	T tmp = s.r * sin(s.phi);
	v.x = tmp * cos(s.theta);
	v.y = tmp * sin(s.theta);
	v.z = s.r * cos(s.phi);
}

template<class T>
void SphericalToCart (const CSpherical<T> &s, CHomoVector4D<T> &v)
{
	T tmp = s.r * sin(s.phi);
	v.x = tmp * cos(s.theta);
	v.y = tmp * sin(s.theta);
	v.z = s.r * cos(s.phi);
	v.w = 1;
}

template<class T>
void CartToSpherical (const  CVector<T,3> &v, CSpherical<T> &s)
{
	s.r = v.Length();
	s.theta = atan2(v.y, v.x);
	s.phi = asin(v.x/(s.r*cos(s.theta)));
}

template<class T>
void CartToSpherical (const  CHomoVector4D<T> &v, CSpherical<T> &s)
{
	s.r = v.Length();
	s.theta = atan2(v.y, v.x);
	s.phi = asin(v.x/(s.r*cos(s.theta)));
}

///////////////////////////////////////////////////////////////////////////////

//
// 矩陣
//

//
// 通用矩陣模板
//
template<class T, int R, int C>
class CMatrix
{
//
// 數(shù)據(jù)
//
public:
	T	M[R][C];	// 按行優(yōu)先的次序存儲矩陣元素
//
// 構(gòu)造/析構(gòu)函數(shù)
//
public:
	CMatrix() {};

	~CMatrix() {};

	CMatrix(const CMatrix &m)
	{
		*this=m;
	}

	CMatrix& operator = (const CMatrix &m)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]=m.M[i][j];
		}
		return *this;
	}
//
// 外部接口
//
public:
	// 設(shè)置為單位矩陣
	void SetIdentity()
	{
		memset(&(M[0][0]),0,sizeof(T)*R*C);
		if(R!=C)
			return;
		for(int i=0; i<R; ++i)
			M[i][i]=1;
	}
	// 安全的存取操作
	inline void SetVal(int r, int c, T val)
	{
		if(r>=0 && r<R && c>=0 && c<C)
			M[r][c]=val;
	}
	inline void GetVal(int r, int c, T &val) const
	{
		if(r>=0 && r<R && c>=0 && c<C)
			val=M[r][c];
	}
	// 以下的運算符重載使得存取元素更方便
	// 由于不作任何檢查,小心內(nèi)存越界
	inline T operator () (int r, int c) const
	{
		return M[r][c];
	}
	inline T& operator () (int r, int c)
	{
		return M[r][c];
	}
	// 返回行數(shù)和列數(shù)
	inline int Row() const
	{
		return R;
	}
	inline int Col() const
	{
		return C;
	}
	// 檢測是否方陣
	inline bool IsSquare() const
	{
		return (R==C);
	}
	//
	// 矩陣的基本運算
	//
	inline CMatrix& operator += (const CMatrix &m)
	{
		return this->Add(m);
	}
	inline CMatrix& operator -= (const CMatrix &m)
	{
		return this->Sub(m);
	}
	// 矩陣加
	inline CMatrix& operator *= (T val)
	{
		return this->Scale(val);
	}
	CMatrix& Add (const CMatrix &m)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]+=m.M[i][j];
		}
		return *this;
	}
	CMatrix& Add (const CMatrix &m1, const CMatrix &m2)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]=m1.M[i][j]+m2.M[i][j];
		}
		return *this;
	}
	// 矩陣減
	CMatrix& Sub (const CMatrix &m)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]-=m.M[i][j];
		}
		return *this;
	}
	CMatrix& Sub (const CMatrix &m1, const CMatrix &m2)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]=m1.M[i][j]-m2.M[i][j];
		}
		return *this;
	}
	// 標(biāo)量乘法
	CMatrix& Scale (T val)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
				M[i][j]*=val;
		}
		return *this;
	}
	// 矩陣乘法,this=m1*m2
	template<int I>
	CMatrix& Mul (const CMatrix<T,R,I> &m1, const CMatrix<T,I,C> &m2)
	{
		T sum;
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
			{
				sum=0;
				for(int k=0; k<I; ++k)
				{
					sum+=m1(i,k)*m2(k,j);
				}
				M[i][j]=sum;
			}
		}
		return *this;
	}
	// 將this設(shè)為m的轉(zhuǎn)置
	CMatrix& Transpose (const CMatrix<T,C,R> &m)
	{
		for(int i=0; i<R; ++i)
		{
			for(int j=0; j<C; ++j)
			{
				M[i][j]=m.M[j][i];
			}
		}
		return *this;
	}
	// 根據(jù)拉普拉斯展開式計算行列式
	// 注意,只有方陣才能調(diào)用該函數(shù)
	T Det () const
	{
		ASSERT(IsSquare());
		// 1/2/3階方陣直接計算
		if(Row()==1)
		{
			return M[0][0];
		}
		else if(Row()==2)
		{
			return (M[0][0]*M[1][1]-M[0][1]*M[1][0]);
		}
		else if(Row()==3)
		{
			return (
				M[0][0]*M[1][1]*M[2][2]+
				M[0][1]*M[1][2]*M[2][0]+
				M[0][2]*M[1][0]*M[2][1]-
				M[2][0]*M[1][1]*M[0][2]-
				M[2][1]*M[1][2]*M[0][0]-
				M[2][2]*M[1][0]*M[0][1]
				);
		}
		// 4階以上遞歸展開
		CMatrix<T,R-1,C-1> sub;
		T v, r=0;
		for(UINT i=0;i<C;++i)
		{
			// 填充子矩陣
			SubMatrix(sub,0,i);
			// 計算該子陣的代數(shù)余子式
			v=(i%2) ? (-M[0][i]) : (M[0][i]);
			v*=sub.Det();
			// 將結(jié)果累加
			r+=v;
		}
		return r;
	}
	// 基于Gauss-Jordan消元法計算m的逆陣并保存在this中
	// 如果成功返回true,否則返回false
	bool Inverse (const CMatrix &m)
	{
		if(!IsSquare())
			return false;
		*this=m;
		int i, j, k;
		int row[R], col[C];
		for(k=0; k<R; ++k)
		{
			T max=0;
			// 尋找主元
			for(i=k;i<R;++i)
			{
				for(j=k;j<C;++j)
				{
					if(abs(M[i][j])>max)
					{
						max=M[i][j];
						row[k]=i;
						col[k]=j;
					}
				}
			}
			if(max==0)	// 行列式為0,逆陣不存在
				return false;
			if(row[k]!=k)
			{
				// 行交換
				T tmp;
				for(i=row[k],j=0;j<C;++j)
					SWAP(M[i][j], M[k][j], tmp);
			}
			if(col[k]!=k)
			{
				// 列交換
				T tmp;
				for(j=col[k],i=0;i<R;++i)
					SWAP(M[i][j], M[i][k], tmp);
			}
			T mkk=M[k][k];
			// 計算逆陣元素
			mkk=1/mkk;
			M[k][k]=mkk;
			for(j=0;j<C;++j)
			{
				if(j!=k)
					M[k][j]*=mkk;
			}
			for(i=0;i<R;++i)
			{
				if(i==k)
					continue;
				for(j=0;j<C;++j)
				{
					if(j==k)
						continue;
					M[i][j]-=M[k][j]*M[i][k];
				}
			}
			for(i=0;i<R;++i)
			{
				if(i!=k)
					M[i][k]*=-mkk;
			}
		}
		// 如果之前執(zhí)行了行/列交換,則需要執(zhí)行逆交換
		// 交換次序相反,且行(列)交換用列(行)交換代替
		for(k=R-1;k>=0;--k)
		{
			T tmp;
			if(col[k]!=k)
			{
				for(i=col[k],j=0;j<C;++j)
					SWAP(M[i][j], M[k][j], tmp);
			}
			if(row[k]!=k)
			{
				for(j=row[k],i=0;i<R;++i)
					SWAP(M[i][j], M[i][k], tmp);
			}
		}
		return true;
	}
//
// 內(nèi)部接口
//
protected:
	// 獲取去除第rr行rc列后的子陣
	void SubMatrix (CMatrix<T,R-1,C-1> &m, int rr, int rc) const
	{
		UINT i,j,k,l;
		for(i=0,k=0;i<R;++i)
		{
			if(i==rr)
				continue;
			for(j=0,l=0;j<C;++j)
			{
				if(j==rc)
					continue;
				m.M[k][l]=M[i][j];
				++l;
			}
			++k;
		}
	}
};

//////////////////////////////////////////////////////////////////////////

//
// 2X2方陣
//
template<class T>
class CMatrix<T,2,2>
{
// 數(shù)據(jù)
public:
	// 按行優(yōu)先的次序存儲矩陣元素
	union
	{
		T	M[2][2];
		struct
		{
			T 
			M00, M01,
			M10, M11;
		};
	};

// 構(gòu)造/析構(gòu)函數(shù)
public:
	CMatrix() {};

	~CMatrix() {};

	CMatrix(const CMatrix &m)
	{
		*this=m;
	}

	CMatrix& operator = (const CMatrix &m)
	{
		M00=m.M00; M01=m.M01;
		M10=m.M10; M11=m.M11;
		return *this;
	}

// 外部接口
public:
	// 
	inline void SetIdentity ()
	{
		M[0][0]=M[1][1]=0;
		M[0][1]=M[1][0]=1;
	}
	// 安全的存取操作
	inline void SetVal(int r, int c, T val)
	{
		if(r>=0 && r<2 && c>=0 && c<2)
			M[r][c]=val;
	}
	inline void GetVal(int r, int c, T &val) const
	{
		if(r>=0 && r<2 && c>=0 && c<2)
			val=M[r][c];
	}
	// 以下的運算符重載使得存取元素更方便
	// 由于不作任何檢查,小心內(nèi)存越界
	inline T operator () (int r, int c) const
	{
		return M[r][c];
	}
	inline T& operator () (int r, int c)
	{
		return M[r][c];
	}
	//
	// 矩陣的基本運算
	//
	inline CMatrix& operator += (const CMatrix &m)
	{
		return this->Add(m);
	}
	inline CMatrix& operator -= (const CMatrix &m)
	{
		return this->Sub(m);
	}
	CMatrix& operator *= (T val)
	{
		return this->Scale(val);
	}
	CMatrix& Add (const CMatrix &m)
	{
		M00+=m.M00; M01+=m.M01; 
		M10+=m.M10; M11+=m.M11; 
		return *this;
	}
	CMatrix& Sub (const CMatrix &m)
	{
		M00-=m.M00; M01-=m.M01; 
		M10-=m.M10; M11-=m.M11; 
		return *this;
	}
	CMatrix& Add (const CMatrix &m1, const CMatrix &m2)
	{
		M00=m1.M00+m2.M00; M01=m1.M01+m2.M01; 
		M10=m1.M10+m2.M10; M11=m1.M11+m2.M11; 
		return *this;
	}
	CMatrix& Sub (const CMatrix &m1, const CMatrix &m2)
	{
		M00=m1.M00-m2.M00; M01=m1.M01-m2.M01; 
		M10=m1.M10-m2.M10; M11=m1.M11-m2.M11; 
		return *this;
	}
	CMatrix& Scale (T val)
	{
		M00*=val; M01*=val;
		M10*=val; M11*=val;
		return *this;
	}
	CMatrix& Mul (const CMatrix &m1, const CMatrix &m2)
	{
		M00=m1.M00*m2.M00+m1.M01*m2.M10;
		M01=m1.M00*m2.M01+m1.M01*m2.M11;
		M10=m1.M10*m2.M00+m1.M11*m2.M10;
		M11=m1.M10*m2.M01+m1.M11*m2.M11;
		return *this;
	}
	CMatrix& Transpose (const CMatrix &m)
	{
		M00=m.M00; M01=m.M10;
		M10=m.M01; M11=m.M11;
		return *this;
	}
	inline T Det () const
	{
		return (M00*M11-M01*M10); 
	}
	bool Inverse (const CMatrix &m)
	{
		T det=m.Det();
		if(det == 0)
			return false;		// 行列式為0,無逆陣
		M00=m.M11/det; M01=-m.M10/det;
		M10=-m.M01/det; M11=m.M00/det;
		return true;
	}
};

///////////////////////////////////////////////////////////////////////////////////

//
// 常用矩陣的類型定義
//
typedef CMatrix<int,2,2>	MATRIX2Di;
typedef CMatrix<int,3,3>	MATRIX3Di;
typedef CMatrix<int,4,4>	MATRIX4Di;

typedef CMatrix<float,2,2>	MATRIX2Df;
typedef CMatrix<float,3,3>	MATRIX3Df;
typedef CMatrix<float,4,4>	MATRIX4Df;

typedef CMatrix<double,2,2>	MATRIX2Dd;
typedef CMatrix<double,3,3>	MATRIX3Dd;
typedef CMatrix<double,4,4>	MATRIX4Dd;

/////////////////////////////////////////////////////////////////////////////////////

//
// 向量與矩陣之間的運算
//

// 向量與矩陣的乘法
template<class T, int R, int C>
void vec_mul_mat(const CVector<T,R> &v, const CMatrix<T,R,C> &m, CVector<T,C> &r)
{
	T sum;
	for(int j=0; j<C; ++j)
	{
		sum=0;
		for(int i=0; i<R; ++i)
			sum+=v(i)*m(i,j);
		r(j)=sum;
	}
}

// 2D向量和3D齊次矩陣相乘
template<class T>
void vec_mul_mat(const CVector<T,2> &v, const CMatrix<T,3,2> &m, CVector<T,2> &r)
{
	// 假設(shè)m的最后一列為[0,0,1]T,并使用3X2矩陣表示
	r.x=v.x*m(0,0)+v.y*m(1,0)+m(2,0);
	r.y=v.x*m(0,1)+v.y*m(1,1)+m(2,1);
}

template<class T>
void vec_mul_mat(const CVector<T,2> &v, const CMatrix<T,3,3> &m, CVector<T,2> &r)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九色porny丨国产精品| 依依成人综合视频| 色8久久精品久久久久久蜜| 亚洲高清视频在线| 国产精品久久久久毛片软件| 欧美日韩精品欧美日韩精品| 国产精品99久久久久久久vr| 亚洲图片欧美视频| 国产色综合一区| 欧美成人一区二区三区片免费| 99久久er热在这里只有精品66| 天天影视涩香欲综合网| 综合自拍亚洲综合图不卡区| 精品久久久三级丝袜| 91精品视频网| 欧美午夜精品一区| 色av综合在线| 91香蕉视频mp4| 国产精品一级片| 麻豆国产一区二区| 麻豆91在线观看| 日韩黄色片在线观看| 亚洲成人动漫在线观看| 亚洲激情一二三区| 亚洲欧美电影一区二区| 自拍偷拍欧美精品| 亚洲天堂av老司机| 亚洲一区二区在线观看视频| 亚洲人成伊人成综合网小说| 亚洲欧美激情一区二区| 亚洲综合一区二区| 亚洲一二三四久久| 亚洲一区二区四区蜜桃| 亚洲午夜在线电影| 美女国产一区二区三区| 午夜一区二区三区视频| 日韩电影一二三区| 美女精品自拍一二三四| 国产精品一区二区三区网站| 丁香天五香天堂综合| 成人一区二区视频| 欧美视频完全免费看| 国产伦精品一区二区三区免费迷| 亚洲电影激情视频网站| 精品一区二区三区欧美| 国产宾馆实践打屁股91| 91麻豆免费观看| 91精品久久久久久久99蜜桃| 日韩精品在线网站| 1区2区3区国产精品| 亚洲自拍都市欧美小说| 精品一区二区三区视频在线观看| 国产二区国产一区在线观看| 在线观看日韩国产| 日韩久久久久久| 亚洲精品成人精品456| 久久99久久99精品免视看婷婷| av在线不卡电影| 91精品国产91久久久久久一区二区 | 欧美精品一卡二卡| 国产精品久久久久久久久免费相片| 五月天久久比比资源色| 国产suv一区二区三区88区| 欧美久久久久久蜜桃| 亚洲欧美影音先锋| 国产美女精品人人做人人爽| 欧美亚洲一区二区在线观看| 中文字幕高清不卡| 国产一区视频在线看| 91麻豆精品国产91| 视频一区二区中文字幕| 色呦呦国产精品| 亚洲日本在线观看| 暴力调教一区二区三区| 国产午夜精品久久久久久免费视 | 亚洲最新在线观看| 色综合一个色综合| 一区二区三区不卡视频| 色欧美片视频在线观看在线视频| 国产精品乱码一区二区三区软件| 国产大陆精品国产| 中文字幕在线视频一区| aaa欧美日韩| 亚洲一区电影777| 欧美视频中文字幕| 精品一区二区三区影院在线午夜| 久久综合狠狠综合| 国产一区 二区| 国产精品福利影院| 激情五月激情综合网| 欧美日韩不卡在线| 精品午夜一区二区三区在线观看| 精品久久久久一区二区国产| 国产.欧美.日韩| 一区二区三区四区不卡在线| 成人高清免费观看| 亚洲一区av在线| 久久久久久久久久美女| 色欲综合视频天天天| 免费精品99久久国产综合精品| 国产亚洲成aⅴ人片在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲一二三级电影| 中文字幕不卡三区| 精品国精品国产尤物美女| 99在线精品视频| 亚洲国产一区二区视频| 久久久亚洲精华液精华液精华液 | 麻豆精品视频在线观看视频| 国产精品乱子久久久久| 精品国产一区二区亚洲人成毛片| 99精品视频在线观看| 国产精品一区二区黑丝 | 日韩va欧美va亚洲va久久| 久久久国际精品| 日韩免费在线观看| 欧美中文字幕久久| 91在线观看地址| 成人av中文字幕| 国产精品一区二区三区99| 日韩高清一区在线| 亚洲成人第一页| 天天综合色天天| 男女性色大片免费观看一区二区| 亚洲香蕉伊在人在线观| 亚洲综合小说图片| 午夜精品在线看| 亚瑟在线精品视频| 日韩精品一二三四| 日本视频免费一区| 久草这里只有精品视频| 精油按摩中文字幕久久| 国产精品69毛片高清亚洲| 国产精品亚洲第一区在线暖暖韩国| 国产在线一区观看| 国产一区二区日韩精品| 丁香婷婷深情五月亚洲| 色综合色综合色综合| 欧美人与禽zozo性伦| 欧美精品久久天天躁| 欧美一区二区三区四区高清| 久久综合五月天婷婷伊人| 精品国产露脸精彩对白| 久久精品亚洲精品国产欧美kt∨| 国产精品日韩成人| 国产精品麻豆网站| 亚洲第一福利视频在线| 久久综合久久久久88| 欧美一区二区网站| 中文字幕免费在线观看视频一区| 亚洲人成电影网站色mp4| 日日摸夜夜添夜夜添国产精品 | 欧美日韩国产综合一区二区三区 | 国产成人aaa| 欧美视频第二页| 国产精品私人自拍| 日本女优在线视频一区二区| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美在线啊v一区| 日韩欧美国产综合一区 | 久久狠狠亚洲综合| 91原创在线视频| 久久午夜免费电影| 性欧美疯狂xxxxbbbb| 91年精品国产| 国产欧美一区视频| 激情五月婷婷综合网| 欧美精品aⅴ在线视频| 亚洲欧美中日韩| 成人a区在线观看| 国产日韩av一区二区| 午夜免费欧美电影| 欧美三级电影在线观看| 亚洲女同女同女同女同女同69| 九九视频精品免费| 精品乱人伦一区二区三区| 日韩激情视频在线观看| 欧美日韩国产综合一区二区| 亚洲免费在线电影| 91久久线看在观草草青青| 亚洲欧美另类小说视频| 色欧美片视频在线观看 | 久久99精品一区二区三区 | 亚洲专区一二三| 91久久线看在观草草青青| 亚洲第一主播视频| 欧美一区二区三区在线| 久久精品国产第一区二区三区| 欧美一区午夜视频在线观看| 欧美aaaaa成人免费观看视频| 日韩久久久久久| 9i看片成人免费高清| 亚洲午夜视频在线| 精品久久久久久久久久久久久久久 | 日本不卡视频在线观看| 欧美日韩国产一级| 免费国产亚洲视频| 国产精品美女一区二区三区| 91色综合久久久久婷婷| 日本亚洲最大的色成网站www|