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

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

?? matrix.cpp

?? 攝影測量中進行后方交會的程序
?? CPP
字號:
// Matrix.cpp: implementation of the CMatrix class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Matrix.h"
#include "iostream.h"
#include "math.h"
#include "string.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction                                         //
//////////////////////////////////////////////////////////////////////
#define MinError 0.00000000000000001


CMatrix::CMatrix()
{
   m_Line=0;
   m_Row=0;
   m_Data=NULL;
}

CMatrix::~CMatrix()
{
   if(NULL != m_Data)
   {
	   delete []m_Data;
	   m_Data = NULL;
   }
}

CMatrix::CMatrix(int r,int l,bool f,double *a)
{
	m_Row=r;
	m_Line=l;
	m_Data= new double [m_Row*m_Line];

    if(!f)//f為假時生成零矩陣
	{
	    for(int i=0;i<m_Row;i++)	
			for(int j=0;j<m_Line;j++)
			    m_Data[i*m_Line+j] = 0;			   
	}
	else//f為真時自定義矩陣
	{	
		if(a)
		{
		   for(int i=0;i<m_Row;i++)	
		      for(int j=0;j<m_Line;j++)
		         m_Data[i*m_Line+j] = a[i*l+j];
		}
		else
		{
			for(int i=0;i<m_Row;i++) 
				for(int j=0;j<m_Line;j++)
					cin>>m_Data[i*m_Line+j];
	
		}
	}
}



bool CMatrix::ChangeRow(int m, int n)
{
/*   if(m<1||m>m_Row||n<1||n>m_Row)
	   return false;
   double *temp;
   temp=m_Data[m-1];
   m_Data[m-1]=m_Data[n-1];
   m_Data[n-1]=temp;*/
   return true;
}

bool CMatrix::ChangeLine(int m, int n)
{
/*   if(m<1||m>m_Line||n<1||n>m_Line)
	  return false;

   transpose();
   double *temp;
   temp=m_Data[m-1];
   m_Data[m-1]=m_Data[n-1];
   m_Data[n-1]=temp; 
   transpose();*/
   return true;
}


void CMatrix::DisplayMatrix()
{
   for(int i=0;i<m_Row;i++)
	{
		for(int j=0;j<m_Line;j++)
			cout<<m_Data[i*m_Line+j]<<"  ";
        cout<<endl;
	}
   cout<<endl;
}


void CMatrix::transpose()
{
    if(m_Data == NULL)
		return;
//    if(m_Line==m_Row)//行列相同的轉置
//	{
	double* pTemp = new double[m_Line*m_Row];
	for(int i=0; i<m_Row; i++)
		for(int j=0; j<m_Line; j++)
			pTemp[j*m_Row+i] = m_Data[i*m_Line+j];
	int temp1 = 0;
	temp1=m_Row;	m_Row=m_Line;	m_Line=temp1;
	delete []m_Data;
	m_Data = pTemp;
/*	}
	else//行列不同的轉置
	{		
		double *dtemp;
	    dtemp = new double[m_Row*m_Line];//分配內存空間

		int temp1;
		temp1=m_Row;	m_Row=m_Line;	m_Line=temp1;
		if(NULL != m_Data)
			delete []m_Data;
        m_Data = new double[m_Line*m_Row];
		
		for(i=0;i<m_Row;i++)
			for(int j=0;j<m_Line;j++)
				m_Data[i][j]=dtemp[j][i];
        for(i=0;i<m_Line;i++)  delete [m_Row]dtemp[i];
	    delete [m_Line]dtemp;
	}*/
}

bool CMatrix::InsertRow(int *m,double *a,int n,int t)//n為a[][]的行數,t為a[][]的列數
{
/*	if(t!=m_Line)
		return false;
	int j;
	double **dtemp;
	dtemp= new double*[m_Row];//分配內存空間
	
    for(int i=0;i<m_Row;i++)   dtemp[i]= m_Data[i];
	m_Row = m_Row+n;
	m_Data= new double*[m_Row];//分配內存空間

	for(i=0;i<n;i++)
	{
		m_Data[m[i]]=new double[m_Line];
		for(j=0;j<m_Line;j++)
			m_Data[m[i]][j]=a[i*t+j];
	}
	bool flag=false;
	for(j=0,i=0;i<m_Row;i++)
	{
		for(int k=0;k<n;k++) 
			if((m[k])==i) {flag=true;break;};
		if(!flag) {m_Data[i]=dtemp[j];j++;}
		flag=false;
	}*/
	return true;
}

bool CMatrix::InsertLine(int *m,double *a,int n,int t)//m[]必須按升序排列,在矩陣第m[i]列下加一列a[][i],n為a[][]的行數,t為a[][]的列數	
{
/*	if(n!=m_Row)
		return false;
	int j;
    transpose();
	double **dtemp;
	dtemp= new double*[m_Row];//分配內存空間
	
    for(int i=0;i<m_Row;i++)   dtemp[i]= m_Data[i];
	m_Row = m_Row+t;
	m_Data= new double*[m_Row];//分配內存空間

	for(i=0;i<t;i++)
	{
		m_Data[m[i]-1]=new double[m_Line];
		for(j=0;j<m_Line;j++)
			m_Data[m[i]-1][j]=a[j*t+i];
	}
	bool flag=false;
	for(j=0,i=0;i<m_Row;i++)
	{
		for(int k=0;k<t;k++) 
			if((m[k]-1)==i) {flag=true;break;};
		if(!flag) {m_Data[i]=dtemp[j];j++;}
		flag=false;
	}
	transpose();*/
	return true;
}

CMatrix CMatrix::operator*(const CMatrix &multiplier)
{
	CMatrix maRes;
	if(this->m_Line!=multiplier.m_Row)
		return maRes;
	double t=0;
	maRes.Initate(this->m_Row, multiplier.m_Line);
	int imuLine = multiplier.m_Line;
	for(int i=0;i<this->m_Row;i++)
	   for(int j=0;j<multiplier.m_Line;j++)
	   {
		   for(int k=0;k<this->m_Line;k++)
			   t+=this->m_Data[i*m_Line+k]*multiplier.m_Data[k*imuLine+j];
		   maRes.m_Data[i*imuLine+j]=t;
		   t=0;
	   }
	return maRes;
	
}

int CMatrix::GetRow()
{
	return m_Row;
}

int CMatrix::GetLine()
{
	return m_Line;
}

double* CMatrix::GetData()
{
	return m_Data;
}

double CMatrix::GetMatrixValue()
{
 /*   if(m_Line!=m_Row)
	{
		cout<<"This Matrix doesn't have value!"<<endl;
	    return 0.0;
	}
    int y=1,i,j,k,t=0;
    double *ptemp,f,x=1,**m_DataReplace;
//////////////////////////////////////////////////////////////////////////	
	m_DataReplace= new double*[m_Row];
	for(i=0;i<m_Row;i++) m_DataReplace[i]= new double[m_Line];
    for(i=0;i<m_Row;i++)
		for(j=0;j<m_Line;j++)  m_DataReplace[i][j]=m_Data[i][j];
//////////////////////////////////////////////////////////////////////////
    for(k=0;k<m_Row;k++)
	{
	    if(m_DataReplace[k][k]>-0.0000000000000001&&m_DataReplace[k][k]<0.0000000000000001)
		{
		   for(t=k+1;t<m_Row;t++)  if(m_DataReplace[t][k]<-0.0000000000000001||m_DataReplace[t][k]>0.0000000000000001) break;//尋找不是零的一行
		   if(t==m_Row) break;//主對角元素非零沒找到
		   else
		   {
			  y*=(-1);
			  ptemp=m_DataReplace[t];
			  m_DataReplace[t]=m_DataReplace[k];
			  m_DataReplace[k]=ptemp;
		   }
		}
//////////////////////////////////////////////////////////////////////////
	    if(t==m_Row) break;
	    for(j=k+1;j<m_Row;j++)
		{
		   f=m_DataReplace[j][k]/m_DataReplace[k][k]; 
		   if(f>-0.0000000000000001&&f<0.0000000000000001) break;
		   for(i=k+1;i<m_Row;i++)
		   m_DataReplace[j][i]=m_DataReplace[j][i]-f*m_DataReplace[k][i];
		}
	}
	if(t==m_Row)  x=0;
	else
	{
       for(i=0;i<m_Row;i++) x*=m_DataReplace[i][i];
	}
	for(i=0;i<m_Row;i++)
      delete [m_Line]m_DataReplace[i];
	delete [m_Row]m_DataReplace;
    return x*y;
*/
	return 1;
}


CMatrix CMatrix::GetConvertMatrix()
{
	CMatrix ConMa;
    if(m_Line != m_Row)
	    return  ConMa;

    int y=1,i,j,k,t=0;
    double RLtemp = NULL,f,x=1,*m_DataReplace = NULL;
//////////////////////////////////////////////////////////////////////////
	ConMa.Initate(m_Row,m_Line);//生成對角矩陣
    for(i=0; i<m_Row; i++) 
		for(j=0; j<m_Line; j++)
			ConMa.m_Data[i*m_Line+j] = 0;
	for(i=0; i<m_Row; i++)
		ConMa.m_Data[i*m_Line+i] = 1;

	m_DataReplace= new double [m_Line*m_Row];
	memcpy(m_DataReplace, m_Data, sizeof(double)*m_Line*m_Row);

//////////////////////////////////////////////////////////////////////////
	int* piLineChange = new int[m_Row];
	int* piRowChange = new int[m_Line];
	bool flag = true;
    for(k=0;k<m_Row;k++)
	{
		//////////////////////////////////////////////////////////////////////////
		//尋找行列中的最大
		int imaxRow = k;
		int imaxLine = k;
		double dmaxNum = fabs(m_DataReplace[k*m_Line+k]);
		for(t=k; t<m_Row; t++)
			for(int t1=k; t1<m_Line; t1++)
				if(fabs(m_DataReplace[t*m_Line+t1]) > dmaxNum)
				{
					imaxRow = t;
					imaxLine = t1;
					dmaxNum = fabs(m_DataReplace[t*m_Line+t1]);
				}
		piLineChange[k] = imaxLine;
		piRowChange[k] = imaxRow;
		if(dmaxNum < MinError) 
			return ConMa;

		if(imaxRow != k)
			for(int i1=0; i1<m_Row; i1++)
			{			  
				RLtemp = m_DataReplace[imaxRow*m_Line+i1];
				m_DataReplace[imaxRow*m_Line+i1] = m_DataReplace[k*m_Line+i1];
				m_DataReplace[k*m_Line+i1] = RLtemp;	
				RLtemp = ConMa.m_Data[imaxRow*m_Line+i1];
				ConMa.m_Data[imaxRow*m_Line+i1] = ConMa.m_Data[k*m_Line+i1];
				ConMa.m_Data[k*m_Line+i1] = RLtemp;
			 }
		if(imaxLine != k)
			for(int i1=0; i1<m_Row; i1++)
			{			  
				RLtemp = m_DataReplace[i1*m_Line+imaxLine];
				m_DataReplace[i1*m_Line+imaxLine] = m_DataReplace[i1*m_Line+k];
				m_DataReplace[i1*m_Line+k] = RLtemp;	
				RLtemp = ConMa.m_Data[i1*m_Line+imaxLine];
				ConMa.m_Data[i1*m_Line+imaxLine] = ConMa.m_Data[i1*m_Line+k];
				ConMa.m_Data[i1*m_Line+k] = RLtemp;
			 }


		double f1 = m_DataReplace[k*m_Line+k];
		m_DataReplace[k*m_Line+k] = 1.0/m_DataReplace[k*m_Line+k];
		for(int i2=0; i2<m_Row; i2++)
		{
			if(i2 != k)
			{
			
				m_DataReplace[k*m_Line+i2] = m_DataReplace[k*m_Line+i2]/f1;
				ConMa.m_Data[k*m_Line+i2] = ConMa.m_Data[k*m_Line+i2]/f1;
			}
		}

	    for(j=0;j<m_Row;j++)
		{
		   if(j != k)
		   {			   
			   f = m_DataReplace[j*m_Line+k];
			   if(f>-MinError && f<MinError) break;
			   for(i=0; i<m_Row; i++) 
			   {
				   if(i != k)
				   {				   
						m_DataReplace[j*m_Line+i] = m_DataReplace[j*m_Line+i] -
											        f*m_DataReplace[k*m_Line+i]; 
						ConMa.m_Data[j*m_Line+i] = ConMa.m_Data[j*m_Line+i] - 
											       f*ConMa.m_Data[k*m_Line+i];
					}
			   }
		   }
		}
		for(int j1=0; j1<m_Line; j1++)
		{
			if(j1 != k)
				m_DataReplace[j1*m_Line+k] *= -m_DataReplace[k*m_Line+k];
		}
	}

	int imaxRow= 0;

	for(i=m_Line-1; i>=0; i--)
	{		

		if(piLineChange[i] != i)
		{
			imaxRow = piLineChange[i];
			for(int i1=0; i1<m_Row; i1++)
			{			  
				RLtemp = m_DataReplace[imaxRow*m_Line+i1];
				m_DataReplace[imaxRow*m_Line+i1] = m_DataReplace[i*m_Line+i1];
				m_DataReplace[i*m_Line+i1] = RLtemp;
			 }
		} 		
		if(piRowChange[i] != i)
		{
			imaxRow = piRowChange[i];
			for(int i1=0; i1<m_Row; i1++)
			{			  
				RLtemp = m_DataReplace[i1*m_Line+imaxRow];
				m_DataReplace[i1*m_Line+imaxRow] = m_DataReplace[i1*m_Line+i];
				m_DataReplace[i1*m_Line+i] = RLtemp;
			 }
		}
  	}
	delete []piLineChange;
	delete []piRowChange;
	
	delete []ConMa.m_Data;
	//m_Data = NULL;
	ConMa.m_Data = m_DataReplace;
    return ConMa;

}
//一個函數里是不是不能重復進行分配空間和釋放空間
void CMatrix::CreateData(double *a,int m,int n)
{
	if(NULL != m_Data)
	{
		delete []m_Data;
		m_Data = NULL;		
	}

	m_Row = m;
	m_Line = n;
	m_Data = new double[m_Row*m_Line];
//	if(NULL == m_Data)
//		m_Data = new double[m_Row*m_Line];
    for(int i=0;i<m_Row;i++) 
		for(int j=0;j<m_Line;j++) 
			m_Data[i*m_Line+j]=a[n*i+j];
}

CMatrix::CMatrix (CMatrix &s)
{
    m_Row=s.m_Row;
	m_Line=s.m_Line;
    m_Data = new double[m_Line*m_Row];
//	while(NULL == m_Data)
// 	   m_Data = new double[m_Line*m_Row];
	for(int i=0;i<m_Row;i++) 
		for(int j=0;j<m_Line;j++) 
			m_Data[i*m_Line+j]=s.m_Data[i*m_Line+j];
}

//CMatrix& CMatrix::operator = (const CMatrix &s)
CMatrix CMatrix::operator= (const CMatrix &s)
{
	if(m_Data)//將原先的資源先釋放
	{
		delete []m_Data;
		m_Data = NULL;
	}
    m_Row=s.m_Row;
	m_Line=s.m_Line;
	m_Data= new double [m_Row*m_Line];

	for(int i=0;i<m_Row;i++) 
		for(int j=0;j<m_Line;j++) 
			m_Data[i*m_Line+j]=s.m_Data[i*m_Line+j];
    return *this;

/*	if(this==&s)  return 1;
    m_Row=s.m_Row;
	m_Line=s.m_Line;
	m_Data= new double*[m_Row];
	for(int i=0;i<m_Row;i++) m_Data[i]= new double[m_Line];
	for(i=0;i<m_Row;i++) for(int j=0;j<m_Line;j++) m_Data[i][j]=s.m_Data[i][j];
	return 1;*/
}

CMatrix CMatrix::operator-(const CMatrix &m1)
{
	CMatrix maMinus;
    if(m1.m_Line!=this->m_Line||m1.m_Row!=this->m_Row)
		return maMinus;
	int m=m1.m_Row,n=m1.m_Line;
	maMinus.Initate(m,n);
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
		   maMinus.m_Data[i*m_Line+j]=this->m_Data[i*m_Line+j]-m1.m_Data[i*m_Line+j];
	return maMinus;
}

CMatrix CMatrix::operator+(const CMatrix &m1)
{
	CMatrix maAdd;
    if(m1.m_Line!=this->m_Line||m1.m_Row!=this->m_Row)
		return maAdd;
	int m=m1.m_Row,n=m1.m_Line;
	maAdd.Initate(m,n);
	for(int i=0;i<m;i++)
		for(int j=0;j<n;j++)
		   maAdd.m_Data[i*m_Line+j] = this->m_Data[i*m_Line+j] + m1.m_Data[i*m_Line+j];
	return maAdd;
}

double CMatrix::GetElement(int iRow, int iLine)
{
	return m_Data[iRow*m_Line+iLine];
}

	/*
	功能:初始化函數
	參數:iRowNum:行數; iLineNum:列數
	返回值:成功返回1 失敗返回 -1
	說明:
	*/
int CMatrix::Initate(int iRowNum, int iLineNum)
{
	if(iRowNum<0 || iLineNum<0) return -1;
	
	if(m_Data != NULL)
	{
		delete []m_Data;
		m_Data = NULL;
	}
	m_Row=iRowNum;
	m_Line=iLineNum;
	m_Data= new double[m_Row*m_Line];
	//memset(m_Data, 0, sizeof(double)*m_Line*m_Row);
	for(int i=0; i<m_Row; i++)
		for(int j=0; j<m_Line; j++)
			m_Data[i*m_Line+j] = 0;
	return 1;
}


int CMatrix::InversMatrix(double* pm1, int i4n)const
{ 
	int *pis,*pjs;
	int i,j,k,l,u,v;
	double temp,max_v;
	pis = new int[i4n];
	pjs = new int[i4n];
	if(NULL==pis || NULL==pjs)	return(0);

	for(k=0; k<i4n; k++)
	{
		max_v = 0.0;
		for(i=k; i<i4n; i++)
			for(j=k; j<i4n; j++)
			{
				temp = fabs(pm1[i*i4n+j]);
				if( temp>max_v )
				{
			        max_v = temp; 
					pis[k] = i; 
					pjs[k] = j;
				}
			}
		if(max_v==0.0)
		{
			delete []pis; 
			delete []pjs;
			return(0);
		}
		if(pis[k]!=k)
			for(j=0; j<i4n; j++)
			{
			   u = k*i4n+j;
			   v = pis[k]*i4n+j;
			   temp = pm1[u]; 
			   pm1[u] = pm1[v];
			   pm1[v] = temp;
			}
		if(pjs[k]!=k)
			for(i=0; i<i4n; i++)
			{
				u = i*i4n+k; v = i*i4n+pjs[k];
				temp=pm1[u]; pm1[u]=pm1[v]; pm1[v]=temp;
			}
		l=k*i4n+k;
		pm1[l]=1.0/pm1[l];
		for(j=0; j<i4n; j++)
			if(j!=k)
			{
				u = k*i4n+j;
				pm1[u] *= pm1[l];
			}
		for(i=0; i<i4n; i++)
			if(i!=k)
				for(j=0; j<i4n; j++)
					if(j!=k)
					{
					  u = i*i4n+j;
					  pm1[u] -= pm1[i*i4n+k] * pm1[k*i4n+j];
					}
		for(i=0; i<i4n; i++)
			if(i != k)
			{
				u = i*i4n+k;
				pm1[u] *= -pm1[l];
			}
	}
	for(k=i4n-1; k>=0; k--)
	{
		if(pjs[k]!=k)
			for(j=0; j<i4n; j++)
			{
				u = k*i4n+j; v = pjs[k]*i4n+j;
				temp=pm1[u]; pm1[u]=pm1[v]; pm1[v]=temp;
			}
		if(pis[k] != k)
			for(i=0; i<i4n; i++)
			{
				u=i*i4n+k; v=i*i4n+pis[k];
				temp=pm1[u]; pm1[u]=pm1[v]; pm1[v]=temp;
			}
	}
	delete []pis; delete []pjs;

  return 1;

}

CMatrix CMatrix::GetConvertMatrix(int iBool)
{
	CMatrix maConvert = *this;
//	maConvert.Initate(m_Row,m_Line);
	InversMatrix(maConvert.GetData(),m_Row);
	return maConvert;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区免费观看视频| 中文字幕中文字幕在线一区| 在线播放/欧美激情| 欧美日韩中文字幕精品| 欧美亚洲一区三区| 欧美日韩久久久| 久久亚洲精华国产精华液| 久久精品免视看| 亚洲精品乱码久久久久久久久| 亚洲精品国产品国语在线app| 亚洲一区二区三区三| 蜜桃精品视频在线| 成人av第一页| 日韩午夜电影在线观看| 欧美精品一区在线观看| 亚洲理论在线观看| 久久精品av麻豆的观看方式| 欧美日韩国产乱码电影| 精品久久99ma| 一区二区三区**美女毛片| 欧美日韩午夜精品| 日韩一二三区视频| 精品国产免费人成在线观看| 国产精品国产三级国产有无不卡| 亚洲综合免费观看高清完整版在线 | 中文成人综合网| 成人激情av网| 国产精品麻豆一区二区| 欧美视频在线观看一区二区| 久久99久久久久久久久久久| 国产精品水嫩水嫩| 欧美一卡在线观看| 99久久久久免费精品国产| 亚洲福利一二三区| 久久久久久久久99精品| 欧美日韩美女一区二区| 国产精品一区二区在线播放 | 久久久久久久久久久黄色| 欧美最猛黑人xxxxx猛交| 国内不卡的二区三区中文字幕 | 欧美丝袜丝交足nylons| 国产在线日韩欧美| 欧美aaaaaa午夜精品| 一卡二卡三卡日韩欧美| 国产精品麻豆久久久| 精品国产三级电影在线观看| 欧美日韩一区高清| 在线影视一区二区三区| 国产成人8x视频一区二区| 免费精品视频在线| 日韩av成人高清| 亚洲成人在线观看视频| 亚洲电影一级黄| 亚洲高清在线精品| 亚洲1区2区3区4区| 日韩电影免费一区| 丝袜a∨在线一区二区三区不卡| 一个色综合av| 日本欧美一区二区三区| 日本欧美一区二区在线观看| 青青国产91久久久久久| 久久电影国产免费久久电影| 九九热在线视频观看这里只有精品| 免费人成在线不卡| 国产一区二区精品久久99| 久久精品免费看| 成人免费视频网站在线观看| 91丝袜高跟美女视频| 欧美卡1卡2卡| 久久亚洲综合色一区二区三区| 国产精品国产三级国产三级人妇 | av电影天堂一区二区在线观看| 99这里只有久久精品视频| 欧美日韩一卡二卡| 精品国产百合女同互慰| 亚洲人成在线播放网站岛国| 亚洲一区二区综合| 国产成人综合精品三级| 欧美丝袜丝nylons| 欧美激情在线一区二区三区| 午夜av区久久| 成人理论电影网| 精品精品欲导航| 亚洲成a人v欧美综合天堂| 国产福利一区在线| 欧美喷水一区二区| **性色生活片久久毛片| 久久国产日韩欧美精品| 欧美视频一区在线| 成人欧美一区二区三区在线播放| 国内精品国产三级国产a久久| 日本高清无吗v一区| 亚洲视频每日更新| 成人av在线电影| 国产精品午夜电影| 懂色中文一区二区在线播放| 欧美成人a视频| 麻豆国产精品777777在线| 91久久久免费一区二区| 一区在线中文字幕| 成人影视亚洲图片在线| 国产精品久久久久久久浪潮网站| 久久成人免费日本黄色| 欧美va日韩va| 九九精品一区二区| 久久久精品天堂| 国产成人自拍网| 中文字幕中文字幕一区二区| 99精品欧美一区二区蜜桃免费| 中文字幕在线观看一区| 91免费看`日韩一区二区| 亚洲一区国产视频| 欧美精品精品一区| 美女脱光内衣内裤视频久久影院| 欧美精品tushy高清| 国产一区二区看久久| 国产精品国产三级国产专播品爱网| 91小视频在线观看| 亚洲一区二三区| 久久精品网站免费观看| 色av成人天堂桃色av| 日韩av在线发布| 国产色产综合产在线视频| 91福利视频网站| 久久se这里有精品| 亚洲欧美色图小说| 在线不卡中文字幕| 色综合天天综合网天天狠天天| 日本欧美加勒比视频| 中文字幕日韩欧美一区二区三区| 日韩欧美一级特黄在线播放| 91福利在线观看| 成人精品一区二区三区中文字幕| 爽爽淫人综合网网站 | proumb性欧美在线观看| 蜜臀av性久久久久蜜臀av麻豆| 国产精品麻豆视频| 国产女人水真多18毛片18精品视频 | 中文字幕一区二区三区四区不卡 | 另类小说综合欧美亚洲| 亚洲成av人片在线| 夜夜操天天操亚洲| 亚洲精品v日韩精品| 亚洲视频资源在线| 综合中文字幕亚洲| 亚洲日韩欧美一区二区在线| 国产精品久久三| 国产欧美中文在线| 国产精品欧美极品| 自拍偷拍国产精品| 中文字幕一区二区三区色视频| 国产欧美一区二区精品性色超碰| 91精品国产一区二区三区| 9191精品国产综合久久久久久| 欧美一卡二卡在线观看| 欧美本精品男人aⅴ天堂| 国产亚洲午夜高清国产拍精品| 久久先锋资源网| 欧美国产精品一区二区三区| 亚洲人成亚洲人成在线观看图片 | 欧美一区二区三区性视频| 91精品国产综合久久精品| 日韩免费高清电影| 国产精品全国免费观看高清| 亚洲乱码精品一二三四区日韩在线| 日韩电影在线免费看| 国产精品香蕉一区二区三区| 99国产精品久| 日韩视频免费观看高清完整版在线观看 | 色视频成人在线观看免| 99这里只有精品| 欧美一级二级三级乱码| 久久久精品国产99久久精品芒果| 综合在线观看色| 久久精品噜噜噜成人av农村| 99re亚洲国产精品| 日韩欧美色综合网站| 一区二区高清免费观看影视大全| 狠狠v欧美v日韩v亚洲ⅴ| 色综合久久九月婷婷色综合| 精品福利av导航| 午夜久久久影院| 91蝌蚪porny| 国产日韩成人精品| 精品一区二区三区免费播放| 欧美在线高清视频| 亚洲综合网站在线观看| 成人h动漫精品一区二| 久久久精品tv| 久久国产欧美日韩精品| 日韩三级高清在线| 图片区小说区国产精品视频| 欧美性猛交xxxx黑人交| 亚洲另类中文字| 日本丰满少妇一区二区三区| 日韩美女久久久| 色婷婷av一区二区三区大白胸 | 国产精品久久久久久久蜜臀 | 国模无码大尺度一区二区三区| 欧美成人精精品一区二区频|