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

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

?? kiss_fft.c

?? 攝影測量專業。實現單像后方交會以及立體像對的前方交會。以文件形式讀取控制點和像點坐標。
?? C
字號:
/*Copyright (c) 2003-2004, Mark BorgerdingAll rights reserved.Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.    * 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.    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 COPYRIGHT OWNER OR 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.*/#include "_kiss_fft_guts.h"/* The guts header contains all the multiplication and addition macros that are defined for fixed or floating point complex numbers.  It also delares the kf_ internal functions. */static kiss_fft_cpx *scratchbuf=NULL;static size_t nscratchbuf=0;static kiss_fft_cpx *tmpbuf=NULL;static size_t ntmpbuf=0;#define CHECKBUF(buf,nbuf,n) \    do { \        if ( nbuf < (size_t)(n) ) {\            free(buf); \            buf = (kiss_fft_cpx*)KISS_FFT_MALLOC(sizeof(kiss_fft_cpx)*(n)); \            nbuf = (size_t)(n); \        } \   }while(0)static void kf_bfly2(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m        ){    kiss_fft_cpx * Fout2;    kiss_fft_cpx * tw1 = st->twiddles;    kiss_fft_cpx t;    Fout2 = Fout + m;    do{        C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2);        C_MUL (t,  *Fout2 , *tw1);        tw1 += fstride;        C_SUB( *Fout2 ,  *Fout , t );        C_ADDTO( *Fout ,  t );        ++Fout2;        ++Fout;    }while (--m);}static void kf_bfly4(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        const size_t m        ){    kiss_fft_cpx *tw1,*tw2,*tw3;    kiss_fft_cpx scratch[6];    size_t k=m;    const size_t m2=2*m;    const size_t m3=3*m;    tw3 = tw2 = tw1 = st->twiddles;    do {        C_FIXDIV(*Fout,4); C_FIXDIV(Fout[m],4); C_FIXDIV(Fout[m2],4); C_FIXDIV(Fout[m3],4);        C_MUL(scratch[0],Fout[m] , *tw1 );        C_MUL(scratch[1],Fout[m2] , *tw2 );        C_MUL(scratch[2],Fout[m3] , *tw3 );        C_SUB( scratch[5] , *Fout, scratch[1] );        C_ADDTO(*Fout, scratch[1]);        C_ADD( scratch[3] , scratch[0] , scratch[2] );        C_SUB( scratch[4] , scratch[0] , scratch[2] );        C_SUB( Fout[m2], *Fout, scratch[3] );        tw1 += fstride;        tw2 += fstride*2;        tw3 += fstride*3;        C_ADDTO( *Fout , scratch[3] );        if(st->inverse) {            Fout[m].r = scratch[5].r - scratch[4].i;            Fout[m].i = scratch[5].i + scratch[4].r;            Fout[m3].r = scratch[5].r + scratch[4].i;            Fout[m3].i = scratch[5].i - scratch[4].r;        }else{            Fout[m].r = scratch[5].r + scratch[4].i;            Fout[m].i = scratch[5].i - scratch[4].r;            Fout[m3].r = scratch[5].r - scratch[4].i;            Fout[m3].i = scratch[5].i + scratch[4].r;        }        ++Fout;    }while(--k);}static void kf_bfly3(         kiss_fft_cpx * Fout,         const size_t fstride,         const kiss_fft_cfg st,         size_t m         ){     size_t k=m;     const size_t m2 = 2*m;     kiss_fft_cpx *tw1,*tw2;     kiss_fft_cpx scratch[5];     kiss_fft_cpx epi3;     epi3 = st->twiddles[fstride*m];     tw1=tw2=st->twiddles;     do{         C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3);         C_MUL(scratch[1],Fout[m] , *tw1);         C_MUL(scratch[2],Fout[m2] , *tw2);         C_ADD(scratch[3],scratch[1],scratch[2]);         C_SUB(scratch[0],scratch[1],scratch[2]);         tw1 += fstride;         tw2 += fstride*2;         Fout[m].r = Fout->r - HALF_OF(scratch[3].r);         Fout[m].i = Fout->i - HALF_OF(scratch[3].i);         C_MULBYSCALAR( scratch[0] , epi3.i );         C_ADDTO(*Fout,scratch[3]);         Fout[m2].r = Fout[m].r + scratch[0].i;         Fout[m2].i = Fout[m].i - scratch[0].r;         Fout[m].r -= scratch[0].i;         Fout[m].i += scratch[0].r;         ++Fout;     }while(--k);}static void kf_bfly5(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m        ){    kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4;    int u;    kiss_fft_cpx scratch[13];    kiss_fft_cpx * twiddles = st->twiddles;    kiss_fft_cpx *tw;    kiss_fft_cpx ya,yb;    ya = twiddles[fstride*m];    yb = twiddles[fstride*2*m];    Fout0=Fout;    Fout1=Fout0+m;    Fout2=Fout0+2*m;    Fout3=Fout0+3*m;    Fout4=Fout0+4*m;    tw=st->twiddles;    for ( u=0; u<m; ++u ) {        C_FIXDIV( *Fout0,5); C_FIXDIV( *Fout1,5); C_FIXDIV( *Fout2,5); C_FIXDIV( *Fout3,5); C_FIXDIV( *Fout4,5);        scratch[0] = *Fout0;        C_MUL(scratch[1] ,*Fout1, tw[u*fstride]);        C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]);        C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]);        C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]);        C_ADD( scratch[7],scratch[1],scratch[4]);        C_SUB( scratch[10],scratch[1],scratch[4]);        C_ADD( scratch[8],scratch[2],scratch[3]);        C_SUB( scratch[9],scratch[2],scratch[3]);        Fout0->r += scratch[7].r + scratch[8].r;        Fout0->i += scratch[7].i + scratch[8].i;        scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r);        scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r);        scratch[6].r =  S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i);        scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i);        C_SUB(*Fout1,scratch[5],scratch[6]);        C_ADD(*Fout4,scratch[5],scratch[6]);        scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r);        scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r);        scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i);        scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i);        C_ADD(*Fout2,scratch[11],scratch[12]);        C_SUB(*Fout3,scratch[11],scratch[12]);        ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4;    }}/* perform the butterfly for one stage of a mixed radix FFT */static void kf_bfly_generic(        kiss_fft_cpx * Fout,        const size_t fstride,        const kiss_fft_cfg st,        int m,        int p        ){    int u,k,q1,q;    kiss_fft_cpx * twiddles = st->twiddles;    kiss_fft_cpx t;    int Norig = st->nfft;    CHECKBUF(scratchbuf,nscratchbuf,p);    for ( u=0; u<m; ++u ) {        k=u;        for ( q1=0 ; q1<p ; ++q1 ) {            scratchbuf[q1] = Fout[ k  ];            C_FIXDIV(scratchbuf[q1],p);            k += m;        }        k=u;        for ( q1=0 ; q1<p ; ++q1 ) {            int twidx=0;            Fout[ k ] = scratchbuf[0];            for (q=1;q<p;++q ) {                twidx += (int)fstride * k;                if (twidx>=Norig) twidx-=Norig;                C_MUL(t,scratchbuf[q] , twiddles[twidx] );                C_ADDTO( Fout[ k ] ,t);            }            k += m;        }    }}staticvoid kf_work(        kiss_fft_cpx * Fout,        const kiss_fft_cpx * f,        const size_t fstride,        int in_stride,        int * factors,        const kiss_fft_cfg st        ){    kiss_fft_cpx * Fout_beg=Fout;    const int p=*factors++; /* the radix  */    const int m=*factors++; /* stage's fft length/p */    const kiss_fft_cpx * Fout_end = Fout + p*m;    if (m==1) {        do{            *Fout = *f;            f += fstride*in_stride;        }while(++Fout != Fout_end );    }else{        do{            kf_work( Fout , f, fstride*p, in_stride, factors,st);            f += fstride*in_stride;        }while( (Fout += m) != Fout_end );    }    Fout=Fout_beg;    switch (p) {        case 2: kf_bfly2(Fout,fstride,st,m); break;        case 3: kf_bfly3(Fout,fstride,st,m); break;         case 4: kf_bfly4(Fout,fstride,st,m); break;        case 5: kf_bfly5(Fout,fstride,st,m); break;         default: kf_bfly_generic(Fout,fstride,st,m,p); break;    }}/*  facbuf is populated by p1,m1,p2,m2, ...    where     p[i] * m[i] = m[i-1]    m0 = n                  */static void kf_factor(int n,int * facbuf){    int p=4;    double floor_sqrt;    floor_sqrt = floor( sqrt((double)n) );    /*factor out powers of 4, powers of 2, then any remaining primes */    do {        while (n % p) {            switch (p) {                case 4: p = 2; break;                case 2: p = 3; break;                default: p += 2; break;            }            if (p > floor_sqrt)                p = n;          /* no more factors, skip to end */        }        n /= p;        *facbuf++ = p;        *facbuf++ = n;    } while (n > 1);}/* * * User-callable function to allocate all necessary storage space for the fft. * * The return value is a contiguous block of memory, allocated with malloc.  As such, * It can be freed with free(), rather than a kiss_fft-specific function. * */kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ){    kiss_fft_cfg st=NULL;    size_t memneeded = sizeof(struct kiss_fft_state)        + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/    if ( lenmem==NULL ) {        st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded );    }else{        if (mem != NULL && *lenmem >= memneeded)            st = (kiss_fft_cfg)mem;        *lenmem = memneeded;    }    if (st) {        int i;        st->nfft=nfft;        st->inverse = inverse_fft;        for (i=0;i<nfft;++i) {            const double pi=3.141592653589793238462643383279502884197169399375105820974944;            double phase = -2*pi*i / nfft;            if (st->inverse)                phase *= -1;            kf_cexp(st->twiddles+i, phase );        }        kf_factor(nfft,st->factors);    }    return st;}    void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride){    if (fin == fout) {        CHECKBUF(tmpbuf,ntmpbuf,st->nfft);        kf_work(tmpbuf,fin,1,in_stride, st->factors,st);        memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft);    }else{        kf_work( fout, fin, 1,in_stride, st->factors,st );    }}void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout){    kiss_fft_stride(cfg,fin,fout,1);}/* not really necessary to call, but if someone is doing in-place ffts, they may want to free the    buffers from CHECKBUF */ void kiss_fft_cleanup(void){    free(scratchbuf);    scratchbuf = NULL;    nscratchbuf=0;    free(tmpbuf);    tmpbuf=NULL;    ntmpbuf=0;}int kiss_fft_next_fast_size(int n){    while(1) {        int m=n;        while ( (m%2) == 0 ) m/=2;        while ( (m%3) == 0 ) m/=3;        while ( (m%5) == 0 ) m/=5;        if (m<=1)            break; /* n is completely factorable by twos, threes, and fives */        n++;    }    return n;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜不卡视频| 亚洲国产裸拍裸体视频在线观看乱了| 久久精品一区二区三区av| 久久免费电影网| 亚洲男女一区二区三区| 日韩av网站免费在线| 成人免费va视频| 欧美日韩高清不卡| 中文字幕一区av| 美女www一区二区| 成人av在线资源网| 欧美一区二区高清| 综合久久综合久久| 成人高清视频免费观看| 亚洲精选视频在线| 成人午夜视频网站| 亚洲图片欧美激情| 一级特黄大欧美久久久| 国产iv一区二区三区| 日韩三级视频中文字幕| 亚洲成人中文在线| 色综合久久久久综合体桃花网| 欧美一区二区三区视频免费播放| 精品一区二区影视| 91麻豆精品国产91久久久使用方法| 亚洲国产精品影院| 久久在线免费观看| 韩国一区二区三区| 制服丝袜激情欧洲亚洲| 丁香一区二区三区| 日韩黄色在线观看| 7777精品伊人久久久大香线蕉| 精品一区二区日韩| 亚洲靠逼com| www国产成人| 欧美私模裸体表演在线观看| 麻豆久久久久久| 亚洲欧美日韩国产综合| 欧美成人r级一区二区三区| 亚洲在线免费播放| 欧美午夜精品久久久| 国产成人亚洲精品狼色在线| 久久久久久夜精品精品免费| 欧美天堂一区二区三区| 岛国一区二区三区| 秋霞国产午夜精品免费视频| 精品奇米国产一区二区三区| 91久久精品一区二区二区| 亚洲成人www| 国产精品传媒入口麻豆| 欧美在线观看你懂的| 日本视频在线一区| 洋洋av久久久久久久一区| 国产欧美日本一区视频| gogo大胆日本视频一区| 亚洲精品亚洲人成人网| 久久精品夜色噜噜亚洲aⅴ| 欧美一区二区三区公司| 欧美亚洲国产怡红院影院| 99在线精品观看| 国产mv日韩mv欧美| 国产精品一区二区三区99| 中文字幕在线播放不卡一区| 久久综合九色综合97婷婷| 欧美一级淫片007| 欧美日本一区二区三区四区| 在线观看网站黄不卡| 91在线观看成人| 日韩国产高清在线| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品三级视频| 欧美老人xxxx18| 成人a区在线观看| 国产成人自拍网| 成人精品国产免费网站| 风间由美性色一区二区三区| 极品少妇xxxx精品少妇偷拍| 捆绑变态av一区二区三区| 亚洲图片另类小说| 亚洲男人的天堂网| 亚洲综合偷拍欧美一区色| 亚洲午夜在线视频| 亚欧色一区w666天堂| 首页亚洲欧美制服丝腿| 免费高清在线视频一区·| 久久国产三级精品| 国产成人av一区二区| 99久久免费国产| 国产在线不卡一区| 五月婷婷久久综合| 亚洲黄色尤物视频| 日韩在线一区二区| 久久99热99| 国产电影一区在线| 91视频一区二区| 欧美性一二三区| 欧美mv日韩mv| 亚洲欧洲成人自拍| 亚洲一区二区av在线| 久久精品国产秦先生| 丁香激情综合国产| 欧美日韩大陆一区二区| 欧美xxxxx牲另类人与| 亚洲国产高清在线| 久久精品亚洲精品国产欧美 | 欧美日韩一区二区三区不卡| 成人免费高清在线观看| 91极品视觉盛宴| 日韩免费一区二区| 日韩一区二区三区高清免费看看| 日韩你懂的在线播放| 中文字幕中文乱码欧美一区二区| 亚洲免费资源在线播放| 免费看黄色91| 色综合久久99| 精品国产青草久久久久福利| 日韩亚洲欧美综合| 国产精品久久一卡二卡| 日韩极品在线观看| av中文字幕不卡| 欧美一区二区三区不卡| 《视频一区视频二区| 蜜臀av性久久久久av蜜臀妖精| 福利电影一区二区| 在线综合视频播放| 亚洲美女少妇撒尿| 国产大片一区二区| 在线观看91av| 亚洲人成小说网站色在线| 精品亚洲国产成人av制服丝袜| 91美女视频网站| 国产午夜精品理论片a级大结局 | 亚洲国产另类av| 成人黄色777网| 精品处破学生在线二十三| 亚洲一区二区三区四区五区黄| 国产成人综合自拍| 欧美一级欧美三级在线观看 | 亚洲成精国产精品女| 懂色av一区二区三区免费看| 欧美一区二区久久| 亚洲国产日产av| 99精品一区二区三区| 中文字幕国产精品一区二区| 免费三级欧美电影| 欧美综合天天夜夜久久| 亚洲区小说区图片区qvod| 国产成人在线视频网址| 精品成人a区在线观看| 日本在线不卡视频一二三区| 色综合久久天天| 综合色中文字幕| 不卡视频在线看| 欧美国产激情二区三区| 国产麻豆精品在线| 欧美精品一区二区久久久| 青青草成人在线观看| 欧美日韩一区二区三区四区五区| 国产精品久久久久永久免费观看| 国内久久精品视频| 亚洲一区二区四区蜜桃| 91精品办公室少妇高潮对白| 亚洲视频一二三区| av在线一区二区| 亚洲精品视频在线| 一本到三区不卡视频| 一区二区三区资源| 色综合久久精品| 一区二区三区蜜桃网| 欧美三电影在线| 亚洲一区在线电影| 91精品黄色片免费大全| 蜜桃精品视频在线| 久久久夜色精品亚洲| 成人av资源下载| 一区二区中文字幕在线| 91免费国产视频网站| 一区二区激情视频| 在线成人高清不卡| 另类专区欧美蜜桃臀第一页| 久久综合色8888| 成人一区二区三区视频在线观看| 国产精品午夜免费| 色狠狠一区二区三区香蕉| 五月婷婷另类国产| 久久免费的精品国产v∧| 成人免费毛片aaaaa**| 亚洲精品国产a久久久久久| 欧美电影一区二区三区| 国产一区二区网址| 综合中文字幕亚洲| 欧美日韩国产经典色站一区二区三区| 日韩国产欧美三级| 亚洲国产精品二十页| 日本福利一区二区| 热久久久久久久| 国产精品国产馆在线真实露脸| 日本韩国欧美在线| 久久99九九99精品| 国产精品视频在线看|