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

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

?? fttrigon.c

?? a very goog book
?? C
字號:
/***************************************************************************//*                                                                         *//*  fttrigon.c                                                             *//*                                                                         *//*    FreeType trigonometric functions (body).                             *//*                                                                         *//*  Copyright 2001 by                                                      *//*  David Turner, Robert Wilhelm, and Werner Lemberg.                      *//*                                                                         *//*  This file is part of the FreeType project, and may only be used,       *//*  modified, and distributed under the terms of the FreeType project      *//*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     *//*  this file you indicate that you have read the license and              *//*  understand and accept it fully.                                        *//*                                                                         *//***************************************************************************/#include <ft2build.h>#include FT_TRIGONOMETRY_H  /* the following is 0.2715717684432231 * 2^30 */#define FT_TRIG_COSCALE  0x11616E8EUL  /* this table was generated for FT_PI = 180L << 16, i.e. degrees */#define FT_TRIG_MAX_ITERS  23  static const FT_Fixed  ft_trig_arctan_table[24] =  {    4157273L, 2949120L, 1740967L, 919879L, 466945L, 234379L, 117304L,    58666L, 29335L, 14668L, 7334L, 3667L, 1833L, 917L, 458L, 229L, 115L,    57L, 29L, 14L, 7L, 4L, 2L, 1L  };  /* the Cordic shrink factor, multiplied by 2^32 */#define FT_TRIG_SCALE    1166391785UL  /* 0x4585BA38UL */#ifdef FT_CONFIG_HAS_INT64  /* multiply a given value by the CORDIC shrink factor */  static FT_Fixed  ft_trig_downscale( FT_Fixed  val )  {    FT_Fixed  s;    FT_Int64  v;    s   = val;    val = ( val >= 0 ) ? val : -val;    v   = ( val * (FT_Int64)FT_TRIG_SCALE ) + 0x100000000UL;    val = (FT_Fixed)( v >> 32 );    return ( s >= 0 ) ? val : -val;  }#else /* !FT_CONFIG_HAS_INT64 */  /* multiply a given value by the CORDIC shrink factor */  static FT_Fixed  ft_trig_downscale( FT_Fixed  val )  {    FT_Fixed   s;    FT_UInt32  v1, v2, k1, k2, hi, lo1, lo2, lo3;    s   = val;    val = ( val >= 0 ) ? val : -val;    v1 = (FT_UInt32)val >> 16;    v2 = (FT_UInt32)val & 0xFFFF;    k1 = FT_TRIG_SCALE >> 16;       /* constant */    k2 = FT_TRIG_SCALE & 0xFFFF;    /* constant */    hi   = k1 * v1;    lo1  = k1 * v2 + k2 * v1;       /* can't overflow */    lo2  = ( k2 * v2 ) >> 16;    lo3  = ( lo1 >= lo2 ) ? lo1 : lo2;    lo1 += lo2;    hi  += lo1 >> 16;    if ( lo1 < lo3 )      hi += 0x10000UL;    val  = (FT_Fixed)hi;    return ( s >= 0 ) ? val : -val;  }#endif /* !FT_CONFIG_HAS_INT64 */  static FT_Int  ft_trig_prenorm( FT_Vector*  vec )  {    FT_Fixed  x, y, z;    FT_Int    shift;    x = vec->x;    y = vec->y;    z     = ( ( x >= 0 ) ? x : - x ) | ( (y >= 0) ? y : -y );    shift = 0;    if ( z < ( 1L << 27 ) )    {      do      {        shift++;        z <<= 1;      } while ( z < ( 1L << 27 ) );      vec->x = x << shift;      vec->y = y << shift;    }    else if ( z > ( 1L << 28 ) )    {      do      {        shift++;        z >>= 1;      } while ( z > ( 1L << 28 ) );      vec->x = x >> shift;      vec->y = y >> shift;      shift  = -shift;    }    return shift;  }  static void  ft_trig_pseudo_rotate( FT_Vector*  vec,                         FT_Angle    theta )  {    FT_Int           i;    FT_Fixed         x, y, xtemp;    const FT_Fixed  *arctanptr;    x = vec->x;    y = vec->y;    /* Get angle between -90 and 90 degrees */    while ( theta <= -FT_ANGLE_PI2 )    {      x = -x;      y = -y;      theta += FT_ANGLE_PI;    }    while ( theta > FT_ANGLE_PI2 )    {      x = -x;      y = -y;      theta -= FT_ANGLE_PI;    }    /* Initial pseudorotation, with left shift */    arctanptr = ft_trig_arctan_table;    if ( theta < 0 )    {      xtemp  = x + ( y << 1 );      y      = y - ( x << 1 );      x      = xtemp;      theta += *arctanptr++;    }    else    {      xtemp  = x - ( y << 1 );      y      = y + ( x << 1 );      x      = xtemp;      theta -= *arctanptr++;    }    /* Subsequent pseudorotations, with right shifts */    i = 0;    do    {      if ( theta < 0 )      {        xtemp  = x + ( y >> i );        y      = y - ( x >> i );        x      = xtemp;        theta += *arctanptr++;      }      else      {        xtemp  = x - ( y >> i );        y      = y + ( x >> i );        x      = xtemp;        theta -= *arctanptr++;      }    } while ( ++i < FT_TRIG_MAX_ITERS );    vec->x = x;    vec->y = y;  }  static void  ft_trig_pseudo_polarize( FT_Vector*  vec )  {    FT_Fixed         theta;    FT_Fixed         yi, i;    FT_Fixed         x, y;    const FT_Fixed  *arctanptr;    x = vec->x;    y = vec->y;    /* Get the vector into the right half plane */    theta = 0;    if ( x < 0 )    {      x = -x;      y = -y;      theta = 2 * FT_ANGLE_PI2;    }    if ( y > 0 )      theta = - theta;    arctanptr = ft_trig_arctan_table;    if ( y < 0 )    {      /* Rotate positive */      yi     = y + ( x << 1 );      x      = x - ( y << 1 );      y      = yi;      theta -= *arctanptr++;  /* Subtract angle */    }    else    {      /* Rotate negative */      yi     = y - ( x << 1 );      x      = x + ( y << 1 );      y      = yi;      theta += *arctanptr++;  /* Add angle */    }    i = 0;    do    {      if ( y < 0 )      {        /* Rotate positive */        yi     = y + ( x >> i );        x      = x - ( y >> i );        y      = yi;        theta -= *arctanptr++;      }      else      {        /* Rotate negative */        yi     = y - ( x >> i );        x      = x + ( y >> i );        y      = yi;        theta += *arctanptr++;      }    } while ( ++i < FT_TRIG_MAX_ITERS );    /* round theta */    if ( theta >= 0 )      theta = ( theta + 16 ) & -32;    else      theta = - (( -theta + 16 ) & -32);    vec->x = x;    vec->y = theta;  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( FT_Fixed )  FT_Cos( FT_Angle  angle )  {    FT_Vector  v;    v.x = FT_TRIG_COSCALE >> 2;    v.y = 0;    ft_trig_pseudo_rotate( &v, angle );    return v.x / ( 1 << 12 );  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( FT_Fixed )  FT_Sin( FT_Angle  angle )  {    return FT_Cos( FT_ANGLE_PI2 - angle );  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( FT_Fixed )  FT_Tan( FT_Angle  angle )  {    FT_Vector  v;    v.x = FT_TRIG_COSCALE >> 2;    v.y = 0;    ft_trig_pseudo_rotate( &v, angle );    return FT_DivFix( v.y, v.x );  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( FT_Angle )  FT_Atan2( FT_Fixed  dx,            FT_Fixed  dy )  {    FT_Vector  v;    if ( dx == 0 && dy == 0 )      return 0;    v.x = dx;    v.y = dy;    ft_trig_prenorm( &v );    ft_trig_pseudo_polarize( &v );    return v.y;  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( void )  FT_Vector_Unit( FT_Vector*  vec,                  FT_Angle    angle )  {    vec->x = FT_TRIG_COSCALE >> 2;    vec->y = 0;    ft_trig_pseudo_rotate( vec, angle );    vec->x >>= 12;    vec->y >>= 12;  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( void )  FT_Vector_Rotate( FT_Vector*  vec,                    FT_Angle    angle )  {    FT_Int     shift;    FT_Vector  v;    v.x   = vec->x;    v.y   = vec->y;    if ( angle && ( v.x != 0 || v.y != 0 ) )    {      shift = ft_trig_prenorm( &v );      ft_trig_pseudo_rotate( &v, angle );      v.x = ft_trig_downscale( v.x );      v.y = ft_trig_downscale( v.y );      if ( shift >= 0 )      {        vec->x = v.x >> shift;        vec->y = v.y >> shift;      }      else      {        shift  = -shift;        vec->x = v.x << shift;        vec->y = v.y << shift;      }    }  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( FT_Fixed )  FT_Vector_Length( FT_Vector*  vec )  {    FT_Int     shift;    FT_Vector  v;    v = *vec;    /* handle trivial cases */    if ( v.x == 0 )    {      return ( v.y >= 0 ) ? v.y : -v.y;    }    else if ( v.y == 0 )    {      return ( v.x >= 0 ) ? v.x : -v.x;    }    /* general case */    shift = ft_trig_prenorm( &v );    ft_trig_pseudo_polarize( &v );    v.x = ft_trig_downscale( v.x );    if ( shift > 0 )      return ( v.x + ( 1 << ( shift - 1 ) ) ) >> shift;    return v.x << -shift;  }  /* documentation is in fttrigon.h */  FT_EXPORT_DEF( void )  FT_Vector_Polarize( FT_Vector*  vec,                      FT_Fixed   *length,                      FT_Angle   *angle )  {    FT_Int     shift;    FT_Vector  v;    v = *vec;    if ( v.x == 0 && v.y == 0 )      return;    shift = ft_trig_prenorm( &v );    ft_trig_pseudo_polarize( &v );    v.x = ft_trig_downscale( v.x );    *length = ( shift >= 0 ) ? ( v.x >> shift ) : ( v.x << -shift );    *angle  = v.y;  }/* END */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品日日摸夜夜摸av| 最新成人av在线| 久久久精品2019中文字幕之3| 国产91精品精华液一区二区三区 | 国产校园另类小说区| 99精品视频一区| 久久不见久久见免费视频1| 亚洲欧美一区二区视频| 精品日韩99亚洲| 精品视频色一区| 99九九99九九九视频精品| 韩国成人福利片在线播放| 一区二区理论电影在线观看| 国产欧美精品一区二区色综合朱莉| 欧美欧美欧美欧美| 97se狠狠狠综合亚洲狠狠| 国产一区999| 奇米精品一区二区三区在线观看 | 久久久久久久久99精品| 欧美军同video69gay| 一本在线高清不卡dvd| 国产99久久久久| 韩日av一区二区| 麻豆高清免费国产一区| 亚洲3atv精品一区二区三区| 亚洲精品免费在线观看| 国产欧美精品区一区二区三区 | 欧美一级日韩一级| 欧美性高清videossexo| 91麻豆国产福利精品| 大胆欧美人体老妇| 国产成人综合在线观看| 久久99热狠狠色一区二区| 日本aⅴ免费视频一区二区三区| 亚洲一区av在线| 一级女性全黄久久生活片免费| 综合久久久久综合| 亚洲日本中文字幕区| 中文字幕一区二区三区不卡在线| 日本一区二区三区在线观看| 久久久99免费| 国产女主播一区| 国产精品理伦片| 中文字幕在线观看不卡| 国产精品久久久久久久久久久免费看| 欧美激情资源网| 中文字幕人成不卡一区| 亚洲欧美日韩综合aⅴ视频| 亚洲精品视频免费看| 一区二区免费视频| 日韩专区一卡二卡| 蜜乳av一区二区三区| 精品一区二区三区久久久| 精品亚洲aⅴ乱码一区二区三区| 久草这里只有精品视频| 国产酒店精品激情| 不卡电影免费在线播放一区| aaa亚洲精品一二三区| 在线视频你懂得一区| 欧美美女黄视频| 欧美成人一区二区三区片免费| 久久精品夜色噜噜亚洲aⅴ| 国产欧美日韩综合| 亚洲色图在线视频| 亚洲一区二区免费视频| 麻豆91精品91久久久的内涵| 国产一区二区在线免费观看| aaa国产一区| 欧美日高清视频| 久久午夜色播影院免费高清 | 久久99热国产| 成人丝袜高跟foot| 欧美性猛交一区二区三区精品| 日韩视频123| 中文字幕av资源一区| 亚洲综合激情网| 久久精品国产在热久久| 成人激情小说乱人伦| 欧美性高清videossexo| 精品国产免费视频| 亚洲欧美视频在线观看视频| 免费精品视频在线| 成人动漫一区二区在线| 在线亚洲一区观看| 精品国产成人系列| 一片黄亚洲嫩模| 狠狠狠色丁香婷婷综合激情 | 秋霞午夜av一区二区三区| 国产大陆亚洲精品国产| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 亚洲电影一级黄| 国产不卡视频一区| 欧美男女性生活在线直播观看| 国产日韩欧美a| 亚洲国产欧美日韩另类综合| 国产成人免费网站| 欧美一区二区性放荡片| 亚洲天堂成人在线观看| 精品中文字幕一区二区小辣椒| 97超碰欧美中文字幕| 26uuu久久综合| 午夜视频一区二区| av电影在线观看一区| 2022国产精品视频| 亚洲高清免费观看高清完整版在线观看 | 亚洲免费观看视频| 国产毛片精品视频| 在线不卡中文字幕| 亚洲综合小说图片| 成人性色生活片| 日韩午夜激情免费电影| 亚洲一二三区不卡| 99久久综合精品| 中文字幕免费不卡在线| 精品亚洲成a人| 欧美一区二区视频在线观看| 亚洲最快最全在线视频| 本田岬高潮一区二区三区| 2020国产精品| 久久99精品久久久久婷婷| 欧美日韩在线三级| 亚洲摸摸操操av| a美女胸又www黄视频久久| 久久久777精品电影网影网 | 欧美不卡一二三| 亚洲图片欧美综合| 欧美亚洲综合色| 亚洲男人天堂av网| 97se亚洲国产综合自在线不卡| 国产精品美女一区二区三区| 国产毛片一区二区| 国产三级一区二区| 国产乱一区二区| 久久综合久久久久88| 久久99久久久久| 日韩精品一区二区三区在线| 青草国产精品久久久久久| 这里是久久伊人| 日韩国产高清在线| 日韩视频免费直播| 久久爱www久久做| 欧美精品一区在线观看| 国产伦精一区二区三区| 久久嫩草精品久久久久| 国产乱子伦一区二区三区国色天香| 精品久久久久久亚洲综合网| 国产中文一区二区三区| 国产午夜精品一区二区三区嫩草| 国内精品国产成人| 国产亚洲一区字幕| 波多野结衣中文一区| 综合欧美一区二区三区| 欧美专区在线观看一区| 亚洲第一搞黄网站| 欧美伦理影视网| 美女在线一区二区| 国产亚洲人成网站| 成人av资源下载| 一区二区成人在线| 制服视频三区第一页精品| 精品一区二区三区久久久| 欧美国产日韩在线观看| 色爱区综合激月婷婷| 青青草成人在线观看| 中文字幕第一区| 91久久精品一区二区三| 亚洲福利国产精品| 久久先锋影音av鲁色资源网| 91在线免费视频观看| 午夜精品一区二区三区电影天堂 | 在线观看三级视频欧美| 日精品一区二区| 国产日韩欧美精品综合| 欧美性生活一区| 韩日精品视频一区| 亚洲女人小视频在线观看| 678五月天丁香亚洲综合网| 国产一区二区三区香蕉| 亚洲品质自拍视频| 欧美一区二区三区在线电影| 成人免费毛片片v| 亚洲va欧美va人人爽| 久久精品视频一区二区| 欧美又粗又大又爽| 国产美女精品在线| 亚洲图片有声小说| 国产日韩一级二级三级| 欧美午夜精品一区二区蜜桃| 国产资源精品在线观看| 亚洲最色的网站| 欧美激情综合五月色丁香小说| 欧美另类高清zo欧美| 成人免费毛片嘿嘿连载视频| 蜜桃久久久久久| 一区二区欧美视频| 日本一区二区免费在线| 日韩一级完整毛片| 欧美亚洲高清一区| 高清不卡在线观看| 精品在线免费视频|