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

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

?? cmatrix.c

?? 攝影測量專業。實現單像后方交會以及立體像對的前方交會。以文件形式讀取控制點和像點坐標。
?? C
?? 第 1 頁 / 共 5 頁
字號:

/**
\file     cmatrix.c
\brief    'c' functions for vector and matrix operations.
\author   Glenn D. MacGougan (GDM)
\date     2008-09-22
\version  0.06 Beta

\b Version \b Information \n
This is the open source version (BSD license). The Professional Version
is avaiable via http://www.zenautics.com. The Professional Version
is highly optimized using SIMD and includes optimization for multi-core 
processors.

\b License \b Information \n
Copyright (c) 2008, Glenn D. MacGougan, Zenautics Technologies Inc. \n

Redistribution and use in source and binary forms, with or without
modification, of the specified files is permitted provided the following 
conditions are met: \n

- Redistributions of source code must retain the above copyright
  notice, this list of conditions and the following disclaimer. \n
- Redistributions in binary form must reproduce the above copyright
  notice, this list of conditions and the following disclaimer in the
  documentation and/or other materials provided with the distribution. \n
- The name(s) of the contributor(s) may not be used to endorse or promote 
  products derived from this software without specific prior written 
  permission. \n

THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS 
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
SUCH DAMAGE.

\b NOTES: \n
This code was developed using rigourous unit testing for every function 
and operation. Despite any rigorous development process, bugs are
inevitable. Please report bugs and suggested fixes to glenn @ zenautics.com.\n
*/

#include <stdio.h>  // for FILE*
#include <stdlib.h> // for calloc, malloc, free
#include <string.h> // for strlen, sprintf, strstr, strcmp, and others
#include <ctype.h>  // for isalpha
#include <math.h>
#include <float.h>
#include <errno.h>

#include "cmatrix.h"

#ifndef _MATRIX_NO_PLOTTING
#include "cplot.h"   // for CPLOT - plotting capabilities directly to an image file.
#endif

// deal with msvc empty projects
#ifndef WIN32
  #ifdef _WIN32
    #define WIN32
  #endif
#endif

#if defined _MSC_VER && _MSC_VER < 1400
#define _CRT_SECURE_NO_DEPRECATE
#endif

#ifndef _MSC_VER
#define _CRT_SECURE_NO_DEPRECATE
#endif


#include "kiss_fft.h" // Use kiss FFT, when INTEL_IPPS is disabled

//#define MTX_DEBUG
#ifdef MTX_DEBUG
#include <time.h>
#endif


#ifndef PI
#define PI (3.1415926535897932384626433832795) //!< better value
#endif

#ifndef TWOPI
#define TWOPI (6.283185307179586476925286766559) //!< 2.0*PI
#endif

#ifndef HALFPI
#define HALFPI (1.5707963267948966192313216916398) //!< PI/2.0
#endif


#define MTX_MAX_READFROMFILE_BUFFER (65536)
#define MATRIX_MIN_RLE_TOLERANCE (1.0e-16)
#define MTX_MAX_COMMENT_LENGTH (1024*6)

// binary version identifiers
#define MTX_ID_SIZE (8)
#define MTX_ID_COMPRESSED_01 ("MTX01\n") //!< identifier used to indicate a file stored using SaveCompressed (version 1)
#define MTX_ID_LEGACY_V01 ("Matrix\n") //!< legacy identifier used to indicate a file stored using Save with imprecise double RLE
#define MTX_ID_LEGACY_V02 ("MTXV02\n") //!< legacy identifier used to indicate a file stored using Save with imprecise double RLE

#define MTX_VERSION_NR_DEFAULT (101) //!< identifier used to indicate a file stored using basic Save
#define MTX_VERSION_NR_COMPRESSED_01 (102) //!< identifier used to indicate a file stored using SaveCompressed (version 1)
#define MTX_VERSION_NR_LEGACY_V01 (1) //!< legacy identifier used to indicate a file stored using Save with imprecise double RLE
#define MTX_VERSION_NR_LEGACY_V02 (2) //!< legacy identifier used to indicate a file stored using Save with imprecise double RLE

#define MTX_NK (8) //!< the number of byte columns used to represent a column of doubles when using MTX_ID_COMPRESSED_01

#define MTX_NAN     (sqrt(-1.0))
#define MTX_POS_INF (-log(0.0))
#define MTX_NEG_INF ( log(0.0))


/// \brief This static global variable indicates whether matrix
/// operations for single elements are treated as scalar
/// operations.
/// e.g. A = B*C, B is 1x1 C is 10x10. If this was disabled, this
/// operation would return FALSE as an error. When enabled, A, is
/// treated as a scalar and is multiplied into every element of C.
BOOL MTX_static_global_treat_1x1_as_scalar = TRUE;


typedef struct
{
  char id[8];
  unsigned headersize;
  unsigned isReal;
  unsigned nrows;
  unsigned ncols;
  unsigned filesize;
  unsigned crc;
  char *comment;
}_MTX_STRUCT_FileHeader;

typedef struct
{
  unsigned length[MTX_NK]; // length of compressed data column
  unsigned char isCompressed[MTX_NK]; // indicates which columns are compressed using RLE
  unsigned totalLength; // total length of MTX_NK data columns
}_MTX_STRUCT_CompressedColumnHeader;


/// struct specific for MTX_ReadFromFile and related functions (a simple linked list)
typedef struct _MTX_listItemCplx
{
  BOOL isReal; //!< A boolean to indicate if real data or complex data is attached to this item.
  double *rowptr; //!< The pointer to real data.
  stComplex *rowptr_cplx; //!< The pointer to complex data.
  struct _MTX_listItemCplx *next; //!< The pointer to the next item in the list.
}_MTX_STRUCT_ReadFromFileListElem;


/// static function for matrix memory allocation
static BOOL MTX_static_alloc( MTX *M, const unsigned nrows, const unsigned ncols, const BOOL setToZero, const BOOL isReal );

/// static function for converting a complex stored matrix to a real matrix (either all real component or all imaginary component)
static BOOL MTX_static_ConvertComplexTo( MTX *M, BOOL useReal );

static BOOL MTX_static_get_row_array_from_string( char *datastr, _MTX_STRUCT_ReadFromFileListElem *L, const unsigned ncols );

/// This function gets the next valid line of data. Whitespace lines are skipped.
static BOOL MTX_static_get_next_valid_data_line(
  FILE *in, //!< The input file pointer (input).
  char *linebuf, //!< A exisiting buffer to store the input line (input/output).
  unsigned *line_length, //!< The length of the line read (output).
  BOOL *atEOF //!< A boolean to indicate if EOF has been reached.
  );

/// This function gets the next valid line of data from a matrix string. Whitespace lines are skipped.
static BOOL MTX_static_get_next_valid_data_line_from_matrix_string(
  const char *strMatrix, //!< The matrix string pointer (input).
  const unsigned strLength, //!< The length of the matrix string (input).
  unsigned *index, //!< The starting/(next line) index into the matrix string pointer (input/output).
  char *linebuf, //!< A exisiting buffer to store the input line (input/output).
  unsigned *line_length, //!< The length of the line read (output).
  BOOL *atEndOfString //!< A boolean to indicate if the end of the strMatrix string has been reached.
  );


/// Extract a complex value from a string with a leading digit.
/// The string is either bi or a+bi.
static BOOL MTX_static_extract_cplx_from_string_with_leading_digit(
  char *datastr, //!< The entire input data string.
  const unsigned indexS, //!< The start index of the complex element.
  const unsigned indexE, //!< The inclusive end index of the complex element.
  double *re, //!< The extracted real component.
  double *im //!< The extracted imag component.
  );


static BOOL MTX_static_extract_real_into_cplx_from_string(
  char *datastr, //!< The entire input data string.
  const unsigned indexS, //!< The start index of the complex element.
  double *re, //!< The extracted real component.
  double *im //!< The extracted imag component.
  );

/// This static function looks for complex data in a line string.
static BOOL MTX_static_look_for_complex_data(
  char *linebuf, //!< A string containing a line of data (input).
  const unsigned line_length, //!< The length of the string (input).
  BOOL *hasComplex //!< A boolean indicating if there is any complex data (output).
  );



/// static function, rounds a value to an integer
static BOOL MTX_static_round_value_to_integer( double *value );

/// static function, rounds a value at the specified precision
static BOOL MTX_static_round_value( double *value, const unsigned precision );

////
// functions for quicksorting
static void MTX_static_quicksort( double *a, unsigned start, unsigned end ); //!< The normal quicksort function
static void MTX_static_swap_doubles( double *a, double *b ); //!< swap two doubles a and b
static int MTX_static_partition( double *a, unsigned start, unsigned end ); //!< partition the vector
static void MTX_static_quicksort_indexed( double *a, double *index, unsigned start, unsigned end ); //!< quicksort that also returns a sorted indexing vector
static void MTX_static_swap_doubles_indexed( double *a, double *b, double *index_a, double *index_b ); //!< swap the doubles and indexes
static int MTX_static_partition_indexed( double *a, double *index, unsigned start, unsigned end ); //!< partition the vectors


/// Compute the sqrt of a complex value.
static void MTX_static_quick_sqrt( const double *a_re, const double *a_im, double *re, double *im );


/// A static function to multiply a*b complex values
static void MTX_static_quick_complex_mult_ab(
  const double* a_re,
  const double* a_im,
  const double* b_re,
  const double* b_im,
  double *re,
  double *im );

/// A static function to multiply a*b*c complex values
static void MTX_static_quick_complex_mult_abc(
  const double* a_re,
  const double* a_im,
  const double* b_re,
  const double* b_im,
  const double* c_re,
  const double* c_im,
  double *re,
  double *im );


/// A static function to compute the complex result of a/b.
static void MTX_static_quick_complex_divide(
                                     const double* a_re, //!< The real part of a (input).
                                     const double* a_im, //!< The imag part of a (input).
                                     const double* b_re, //!< The real part of b (input).
                                     const double* b_im, //!< The imag part of b (input).
                                     double *re, //!< The real part of the result.
                                     double *im ); //!< The imag part of the result.



/// Calculate a CRC value to be used by CRC calculation functions.
static unsigned MTX_static_CRC32(unsigned ulCRC);

/// Updates the 32 bit CRC with a block of data.
/// This function can be called once (with uiCRC initialized to zero) to get the crc
/// for a single byte vector or multiple times to apply the crc calculation to multiple
/// bytes vectors.
static void MTX_static_updateCRC( unsigned char *pBytes, const unsigned nBytes, unsigned *uiCRC );

/// closes the file and frees memory used by MTX_SaveCompressed and MTX_Load
static void MTX_static_SaveAndLoadCleanUp( FILE *fid, unsigned char **bytes, unsigned char **compressed, const unsigned nk );

/// loads a legacy verison of a .mtx binary matrix file
static BOOL MTX_static_ReadCompressed_LegacyVersion( MTX* M, const char *path );


/// Performs factorization by gaussian elimination with scaled parital pivoting
/// /b Reference /n
/// [1] Chaney, Ward & David Kincaid, "Numerical Mathematics and Computing, 3rd Edition",
/// Cole Publishing Co., 1994, Belmont, CA, p.237)
static BOOL MTX_static_Factorize( BOOL *isFullRank, const unsigned n, unsigned* index, MTX *A );

/// Solve AX=b
/// factorized A is obtained from MTX_static_Factorize
static BOOL MTX_static_SolveByGaussianElimination(
  const MTX *b,
  MTX *X,
  const MTX *A, // factorized A
  unsigned *index );

/// Clean up dynamic memory used in MTX_Det.
static void MTX_static_Det_cleanup( unsigned *index, double *scale, MTX *U, MTX *magMtx );



/// Perform the FFT or IFFT of the columns in the src matrix and
/// store the result in the dst matrix. If the number of rows in the
/// src matrix is not a power of two, the DFT or IDFT is performed.
static BOOL MTX_static_fft(
                           const MTX *src, //!< The source matrix.
                           MTX *dst, //!< The result matrix (always complex).
                           BOOL isFwd //!< A boolean to indicate if this is a fwd transform or the inverse transform
                           );

/// Perform the FFT or IFFT of the columns in the src matrix inplace.
/// If the number of rows in the src matrix is not a power of two, the DFT or IDFT is performed.
static BOOL MTX_static_fft_inplace(
                                   MTX *src, //!< The source matrix.
                                   BOOL isFwd //!< A boolean to indicate if this is a fwd transform or the inverse transform
                                   );




/// \brief  Get a value from the uniform distribution [0,1].
/// \pre srand(seed) has been called.
static double MTX_static_get_rand_value();

/// \brief  Get a value from the standard normal gaussian distribution.
///
/// \pre srand(seed) has been called.
///
/// REFERENCE: \n
/// Scheinerman, E. R (2006). "C++ for Mathematicians: An Introduction for Students and Professionals."
/// Chapman and Hall/CRC, Taylor and Francis Group. pp 61-63.
static double MTX_static_get_randn_value();



BOOL MTX_Initialize_MTXEngine()
{
  return TRUE;
}

BOOL MTX_Enable1x1MatricesForTreatmentAsScalars( BOOL enable )
{
  MTX_static_global_treat_1x1_as_scalar = enable;
  return TRUE;
}

BOOL MTX_isNull( const MTX *M )
{
  if( !M )
    return TRUE;

  if( M->data == NULL && M->cplx == NULL )
    return TRUE;

  return FALSE;
}

BOOL MTX_isConformalForMultiplication( const MTX *A, const MTX *B )
{
  if( MTX_isNull( A ) )
  {
    return FALSE;
  }
  if( MTX_isNull( B ) )
  {
    return FALSE;
  }

  return( A->ncols == B->nrows );
}

BOOL MTX_isConformalForAddition( const MTX *A, const MTX *B )
{
  if( MTX_isNull( A ) )
  {
    return FALSE;
  }
  if( MTX_isNull( B ) )
  {
    return FALSE;
  }

  return( A->nrows == B->nrows && A->ncols == B->ncols );
}


BOOL MTX_isSquare( const MTX *A )
{
  if( MTX_isNull( A ) )
  {
    return FALSE;
  }

  return( A->nrows == A->ncols );
}

BOOL MTX_isSameSize( const MTX *A, const MTX *B )
{
  return MTX_isConformalForAddition( A, B );
}


BOOL MTX_Init( MTX *M )
{
  if( !M )
  {
    MTX_ERROR_MSG( "Cannot initialize NULL pointer." )
      return FALSE;
  }

  M->ncols = 0;
  M->nrows = 0;
  M->isReal = TRUE;
  M->cplx = NULL;
  M->data = NULL;
  M->comment = NULL;

  return TRUE;
}

BOOL MTX_SetComment( MTX *M, const char *comment )
{
  unsigned length;

  if( !M )
  {
    MTX_ERROR_MSG( "Cannot initialize NULL pointer." );
    return FALSE;
  }

  if( !comment )
  {
    MTX_ERROR_MSG( "if( !comment )" );
    return FALSE;
  }

  if( M->comment )
    free( M->comment );

  length = (unsigned int)strlen(comment);
  if( length == 0 )
  {
    MTX_ERROR_MSG( "strlen returned 0." );
    return FALSE;
  }

  M->comment = (char*)malloc( (length+1)*sizeof(char) ); // +1 for the null terminator
  if( !M->comment )
  {
    // memory allocation failure
    MTX_ERROR_MSG( "malloc returned NULL." );
    return FALSE;
  }

#ifndef _CRT_SECURE_NO_DEPRECATE
  if( strcpy_s( M->comment, length+1, comment ) != 0 )
  {
    MTX_ERROR_MSG( "strcpy_s returned 0." );
    free(M->comment);
    M->comment = NULL;
    return FALSE;
  }
#else
  strcpy( M->comment, comment );
#endif

  return TRUE;
}

BOOL MTX_Free( MTX *M )
{
  unsigned j = 0;

  if( !M )
  {
    MTX_ERROR_MSG( "Cannot free NULL pointer." );
    return FALSE;
  }

  if( M->isReal )
  {
    if( M->data == NULL )
    {
      if( M->comment )
        free( M->comment );

      M->comment = NULL;
      M->nrows = 0;
      M->ncols = 0;
      return TRUE;
    }
  }
  else
  {
    if( M->cplx == NULL )
    {
      if( M->comment )
        free( M->comment );

      M->comment = NULL;
      M->nrows = 0;
      M->ncols = 0;
      return TRUE;
    }
  }


  if( M->isReal )
  {
    for( j = 0; j < M->ncols; j++ )
    {
      free( M->data[j] );
    }
  }
  else
  {
    for( j = 0; j < M->ncols; j++ )
    {
      free( M->cplx[j] );
    }
  }

  // free the array of pointers
  if( M->isReal )
    free( M->data );
  else
    free( M->cplx );

  M->nrows = 0;
  M->ncols = 0;
  M->isReal = TRUE;
  M->cplx = NULL;
  M->data = NULL;

  if( M->comment )
    free( M->comment );
  M->comment = NULL;
  return TRUE;
}


BOOL MTX_Malloc( MTX *M, const unsigned nrows, const unsigned ncols, const BOOL isReal )
{
  return MTX_static_alloc( M, nrows, ncols, FALSE, isReal );
}

BOOL MTX_Calloc( MTX *M, const unsigned nrows, const unsigned ncols, const BOOL isReal )
{
  return MTX_static_alloc( M, nrows, ncols, TRUE, isReal );
}

BOOL MTX_static_alloc( MTX *M, const unsigned nrows, const unsigned ncols, const BOOL setToZero, const BOOL isReal )
{
  unsigned i = 0;
  unsigned j = 0;

  // invalid call
  if( nrows == 0 || ncols == 0 )
  {
    MTX_ERROR_MSG( "if( nrows == 0 || ncols == 0 )" );
    return FALSE;
  }
  if( !M )
  {
    MTX_ERROR_MSG( "Cannot set a NULL pointer." );
    return FALSE;
  }

  // Check if the matrix is already the right size and type.
  if( M->isReal == isReal )
  {
    if( M->nrows > 0 && M->ncols > 0 )
    {
      if( M->nrows == nrows && M->ncols == ncols )
      {
        // already the right size and type
        if( setToZero )
        {
          if( !MTX_Zero( M ) )
          {
            MTX_ERROR_MSG( "MTX_Zero returned FALSE." );
            return FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久精品一区| 2020国产精品| 国产麻豆视频一区| 亚洲免费观看高清完整| 日韩久久久久久| 欧美人动与zoxxxx乱| 从欧美一区二区三区| 日本sm残虐另类| 亚洲女人小视频在线观看| 久久综合网色—综合色88| 欧美三片在线视频观看| 91丨九色丨蝌蚪富婆spa| 国产综合成人久久大片91| 亚洲成精国产精品女| 亚洲视频一二区| 国产拍欧美日韩视频二区| 日韩一级免费一区| 欧美色男人天堂| 色偷偷久久一区二区三区| 国产成人在线视频免费播放| 美女脱光内衣内裤视频久久网站| 一个色在线综合| 中文字幕一区二区三区四区 | 国产精品亲子伦对白| 日韩欧美在线观看一区二区三区| 欧美日韩性生活| 91国产成人在线| 91老师片黄在线观看| 成人av网站大全| 成人精品鲁一区一区二区| 国产毛片精品国产一区二区三区| 久久99国产乱子伦精品免费| 青草国产精品久久久久久| 婷婷成人综合网| 午夜婷婷国产麻豆精品| 午夜久久福利影院| 午夜欧美大尺度福利影院在线看| 亚洲综合一区二区| 亚洲自拍偷拍综合| 亚洲成av人**亚洲成av**| 亚洲第一狼人社区| 午夜激情一区二区| 日本人妖一区二区| 久久精品国产久精国产爱| 久久不见久久见免费视频1| 六月丁香婷婷色狠狠久久| 国内精品免费**视频| 国产成人免费视频网站| 成人av免费在线播放| 99久久99久久免费精品蜜臀| 99久久国产免费看| 欧美色图免费看| 在线电影院国产精品| 精品久久久久久久人人人人传媒 | 欧美激情一二三区| 最近日韩中文字幕| 亚洲成人自拍网| 男人的天堂久久精品| 国产精品一区二区无线| 成人精品亚洲人成在线| 色域天天综合网| 欧美精品一二三四| 久久蜜桃av一区二区天堂| 国产精品久久久久婷婷二区次| 亚洲男人的天堂av| 奇米影视7777精品一区二区| 国产综合色视频| 色综合亚洲欧洲| 欧美一级免费大片| 欧美国产亚洲另类动漫| 亚洲二区视频在线| 国产乱妇无码大片在线观看| 91免费版在线| 日韩精品中午字幕| 亚洲欧洲一区二区在线播放| 香蕉av福利精品导航| 国产一区二区三区免费播放| 97精品电影院| 欧美videofree性高清杂交| 国产精品你懂的| 日韩不卡一区二区| 91在线视频在线| 日韩欧美国产综合| 亚洲欧美成aⅴ人在线观看| 麻豆freexxxx性91精品| 97精品国产露脸对白| 日韩你懂的在线播放| 亚洲四区在线观看| 韩国精品主播一区二区在线观看| 日本高清不卡aⅴ免费网站| 精品国产伦一区二区三区免费 | 亚洲女同ⅹxx女同tv| 久久99热这里只有精品| 日本精品一级二级| 久久久久国产免费免费| 午夜不卡av免费| aaa亚洲精品| 2024国产精品| 天堂在线亚洲视频| 成人动漫一区二区在线| 精品国产区一区| 丝袜脚交一区二区| 色香色香欲天天天影视综合网| 久久久久99精品国产片| 蜜臀av一区二区| 欧美日韩国产综合草草| 亚洲另类春色国产| 成人一级视频在线观看| 精品粉嫩超白一线天av| 天天综合色天天综合色h| 91丨九色丨蝌蚪富婆spa| 国产精品入口麻豆原神| 国产呦萝稀缺另类资源| 欧美一区二区大片| 视频一区欧美日韩| 欧美天堂一区二区三区| 亚洲日本免费电影| caoporn国产精品| 国产欧美日韩综合精品一区二区| 精品亚洲成av人在线观看| 91精品国产入口| 亚洲va欧美va国产va天堂影院| 91美女片黄在线观看91美女| 亚洲欧洲一区二区在线播放| www..com久久爱| 中文字幕中文乱码欧美一区二区| 国产乱码精品1区2区3区| 精品国产91九色蝌蚪| 精品中文字幕一区二区小辣椒| 5566中文字幕一区二区电影| 午夜精品福利一区二区蜜股av| 欧美色大人视频| 亚洲va在线va天堂| 宅男噜噜噜66一区二区66| 日韩黄色免费电影| 欧美一区二区免费视频| 美女高潮久久久| 337p日本欧洲亚洲大胆色噜噜| 国产一区二区三区四区在线观看 | 欧美精品一区二区三区蜜桃视频| 美国十次了思思久久精品导航| 日韩一区二区三区免费观看| 久久激情五月婷婷| 久久久99精品免费观看不卡| 国产99久久久国产精品潘金网站| 国产女人aaa级久久久级| 粉嫩av一区二区三区粉嫩 | 国产精品美女久久久久aⅴ | 一区二区在线观看av| 欧美最新大片在线看| 日韩精品久久久久久| 日韩欧美在线影院| 福利一区福利二区| 亚洲日本va午夜在线影院| 欧美专区在线观看一区| 日韩成人午夜精品| 久久久久国产精品免费免费搜索| av不卡免费电影| 五月婷婷色综合| 久久婷婷色综合| 91在线观看一区二区| 无码av免费一区二区三区试看| 日韩久久久精品| 菠萝蜜视频在线观看一区| 亚洲一二三四在线观看| 欧美一级黄色录像| av在线综合网| 午夜国产精品影院在线观看| 久久精品视频在线免费观看| 91在线视频网址| 久久成人羞羞网站| 亚洲女人小视频在线观看| 日韩精品一区二区三区在线播放| 成人做爰69片免费看网站| 亚洲成人一区二区在线观看| 亚洲精品一区二区三区影院 | 亚洲国产日韩一级| 欧美mv日韩mv亚洲| 91一区二区三区在线观看| 日本最新不卡在线| 国产精品激情偷乱一区二区∴| 欧美日韩高清一区二区三区| 国产精品自拍三区| 亚洲va韩国va欧美va| 中文av一区二区| 欧美一级高清片在线观看| 91女厕偷拍女厕偷拍高清| 激情欧美日韩一区二区| 亚洲黄色av一区| 国产午夜亚洲精品羞羞网站| 欧美性猛片xxxx免费看久爱| 国产一区二区日韩精品| 性做久久久久久| 亚洲啪啪综合av一区二区三区| 欧美mv和日韩mv的网站| 欧美自拍偷拍午夜视频| av中文字幕在线不卡| 国产一区二区不卡老阿姨| 亚洲福利一二三区| 亚洲精品日韩一|