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

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

?? obb.c

?? 任意給定三維空間的點集
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* * obb.C - *     \*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/#include  <stdlib.h>#include  <stdio.h>#include  <assert.h>#include  <math.h>#include  <time.h>#include  <string.h>//#include  "dmalloc.h"#include  "_generic.h"#include  "sarray.h"#include  "real.h"#include  "point.h"#include  "misc.h"/*--- Constants ---*//*--- Start of Code ---*//* from MAGIC */void EigenSymmetric3(double mat[3][3], double eval[3],                     double evec[3][3]);#define X 0#define Y 1#define Z 2inline void  Zero(double pt[3]){    pt[X] = 0.0;    pt[Y] = 0.0;    pt[Z] = 0.0;}static Point3d    compute_pnt( Point3d  * evecs,                               double  * coff ){    Point3d  pnt;    pnt.add_scale( evecs[ 0 ], coff[ 0 ] );    pnt.add_scale( evecs[ 1 ], coff[ 1 ] );    pnt.add_scale( evecs[ 2 ], coff[ 2 ] );    return  pnt;}void  extractOrthonormalBase(Point3d  & p_a,                             Point3d  & p_b,                             Point3d  & p_c ){    Point3d  evec[ 3 ];    evec[ 0 ] = p_a;    evec[ 1 ] = p_b;    evec[ 2 ] = p_c;    if  ( evec[ 0 ].length() < evec[ 1 ].length() )        exchange( evec[ 0 ], evec[ 1 ] );    if  ( evec[ 0 ].length() < evec[ 2 ].length() )        exchange( evec[ 0 ], evec[ 2 ] );    if  ( evec[ 1 ].length() < evec[ 2 ].length() )        exchange( evec[ 1 ], evec[ 2 ] );    // The vectors are sorted by length...    if  ( evec[ 0 ].length() == 0.0 ) {        p_a = Point3d( 1, 0, 0 );        p_b = Point3d( 0, 1, 0 );        p_c = Point3d( 0, 0, 1 );        return;    }    evec[ 0 ].normalize();    //evec[ 1 ].add_scale( evec[ 0 ], - evec[ 0 ].dot_prod( evec[ 1 ] ) );    evec[ 1 ].normalize();    evec[ 2 ].normalize();        //printf( "dot prod 0,1: %g\n", evec[ 0 ].dot_prod( evec[ 1 ] ) );    //printf( "dot prod 0,2: %g\n", evec[ 0 ].dot_prod( evec[ 2 ] ) );    evec[ 2 ].add_scale( evec[ 0 ], - evec[ 0 ].dot_prod( evec[ 2 ] ) );    printf( "dot prod 0,2: %g\n", evec[ 0 ].dot_prod( evec[ 2 ] ) );    evec[ 2 ].add_scale( evec[ 1 ], - evec[ 1 ].dot_prod( evec[ 2 ] ) );    printf( "dot prod 1,2: %g\n", evec[ 1 ].dot_prod( evec[ 2 ] ) );    evec[ 2 ].print();    printf( "\n\n" );    evec[ 2 ].normalize();    // The vectors are sorted by length...    if  ( evec[ 1 ].length() == 0.0 ) {        assert( false );        return;    }    if  ( ( evec[ 0 ].length() != 0.0 )          &&  ( evec[ 1 ].length() != 0.0 )           &&  ( evec[ 2 ].length() == 0.0 ) ) {        evec[ 2 ] = cross_prod( evec[ 0 ], evec[ 1 ] );        evec[ 2 ].normalize();    }    /*    printf( "\n\n res:\n" );    evec[ 0 ].print();    printf( "\n" );    evec[ 1 ].print();    printf( "\n" );    evec[ 2 ].print();    printf( "\n" );    */    p_a = evec[ 0 ];    p_b = evec[ 1 ];    p_c = evec[ 2 ];}void  EigenSymetric3vec( double  mCoVars[3][3],                         Point3d  & p_a,                         Point3d  & p_b,                         Point3d  & p_c ){    //double  XfTemp;    Point3d  evec[ 3 ];    double  EigenVals[3];    double  mXForm[3][3];    /* put eigenvectors into mXForm */    //EigenSymmetric3(mCoVars, EigenVals, mXForm);    Jacobi_EigenSymmetric3( mCoVars, EigenVals, mXForm );    //printf( "eigen values: %g %g %g\n",    //         EigenVals[ 0 ],    //        EigenVals[ 1 ],    //        EigenVals[ 2 ] );    /* Normalize the eigenvectors to make unit axes. */    for  ( int  i = 0; i < 3; i++ ) {        //printf( "___%d: %g %g %g\n", i,        //        mXForm[i][0],        //        mXForm[i][1],        //       mXForm[i][2] );        evec[ i ] = Point3d( mXForm[i][0],                              mXForm[i][1],                             mXForm[i][2] );        evec[ i ].normalize_big();    }    p_a = evec[ 0 ];    p_b = evec[ 1 ];    p_c = evec[ 2 ];}Point3d    matrix_multiply( double  mCoVars[3][3],                            Point3d  & vec ){    double  sum;    Point3d  out;    for  ( int  ind = 0; ind < 3; ind++ ) {        sum = 0;        for  ( int  jnd = 0; jnd < 3; jnd++ )            sum += mCoVars[ ind ][ jnd ] * vec[ jnd ];        out[ ind ] = sum;    }    return   out;}void MakeCovarOBB( const ArrPoint3d  & arr,                   Point3d  & base_pnt,                   Point3d  & side_0,                   Point3d  & side_1,                   Point3d  & side_2 ){    //double  boxpt[3], boxvecs[3][3];    double  oon;    double  mCoVars[3][3], mXForm[3][3];    //double  ptAvg[3], ptAvgSq[3], ptAvgXS[3];    Point3d  ptAvg, ptAvgSq, ptAvgXS;    double  EigenVals[3];    double  XfMin[3], XfMax[3];    double  XfTemp;    //int  i;        assert( arr.size() > 0 );    oon = 1.0 / (double)arr.size();    /* Make averages for covariance matrix. */    /* Intitialize averages. */    ptAvg.zero();    ptAvgSq.zero();    ptAvgXS.zero();       /* Sum all point data. */    for  ( int  i = 0; i < arr.size(); i++ ) {        ptAvg.add( arr[ i ] );        ptAvgSq[X] += arr[i][X] * arr[i][X];        ptAvgSq[Y] += arr[i][Y] * arr[i][Y];        ptAvgSq[Z] += arr[i][Z] * arr[i][Z];        ptAvgXS[X] += arr[i][X]*arr[i][Y];        ptAvgXS[Y] += arr[i][X]*arr[i][Z];        ptAvgXS[Z] += arr[i][Y]*arr[i][Z];    }    /* Divide sums to make average. */    ptAvg.scale( oon );    ptAvgSq.scale( oon );    ptAvgXS.scale( oon );    /* Compose covariance matrix. */    mCoVars[0][0] = ptAvgSq[X] - ptAvg[X]*ptAvg[X];    mCoVars[0][1] = ptAvgXS[X] - ptAvg[X]*ptAvg[Y];    mCoVars[0][2] = ptAvgXS[Y] - ptAvg[X]*ptAvg[Z];    mCoVars[1][0] = ptAvgXS[X] - ptAvg[Y]*ptAvg[X];    mCoVars[1][1] = ptAvgSq[Y] - ptAvg[Y]*ptAvg[Y];    mCoVars[1][2] = ptAvgXS[Z] - ptAvg[Y]*ptAvg[Z];    mCoVars[2][0] = ptAvgXS[Y] - ptAvg[Z]*ptAvg[X];    mCoVars[2][1] = ptAvgXS[Z] - ptAvg[Z]*ptAvg[Y];    mCoVars[2][2] = ptAvgSq[Z] - ptAvg[Z]*ptAvg[Z];    /*    for  ( int  ind = 0; ind < 3; ind++ ) {        printf( "[ " );        for  ( int  jnd = 0; jnd < 3; jnd++ )            printf( "%g ", mCoVars[ ind ][ jnd ] );        printf( "]\n" );    }    */    /* Find eigenvectors for the covariance matrix. */    /* put eigenvectors into mXForm */    //EigenSymmetric3(mCoVars, EigenVals, mXForm);    Jacobi_EigenSymmetric3( mCoVars, EigenVals, mXForm );    /*      printf( "PCA eigen values: %g %g %g\n",            EigenVals[ 0 ],            EigenVals[ 1 ],            EigenVals[ 2 ] );    */    /* Normalize the eigenvectors to make unit axes. */    Point3d  evec[ 3 ];    for  ( int  i = 0; i < 3; i++ ) {        //XfTemp = (double)(1.0/sqrt(mXForm[i][0]*mXForm[i][0] +        //                          mXForm[i][1]*mXForm[i][1] +        //                          mXForm[i][2]*mXForm[i][2]));        //mXForm[i][0] *= XfTemp;        //mXForm[i][1] *= XfTemp;        //mXForm[i][2] *= XfTemp;        evec[ i ] = Point3d( mXForm[i][0],                              mXForm[i][1],                             mXForm[i][2] );        //printf( "vec:%d: ", i );        //evec[ i ].print();        //printf( "\n" );        /*        Point3d  evec_out;        evec_out = multiply( mCoVars, evec[ i ] );        printf( "mult:   " );        evec_out.print();        printf( "ratio: %g\n", evec_out.length() / evec[ i ].length() );        */    }    /* find minimum/maximum of points in new coord       system defined by the eigenvectors */    /* initialize min & max with first point's values */    XfMax[ 0 ] = XfMin[ 0 ] = evec[ 0 ].dot_prod( arr[ 0 ] );    XfMax[ 1 ] = XfMin[ 1 ] = evec[ 1 ].dot_prod( arr[ 0 ] );    XfMax[ 2 ] = XfMin[ 2 ] = evec[ 2 ].dot_prod( arr[ 0 ] );    /* check subsequent points */    for  ( int ind = 1; ind < arr.size(); ind++){        XfTemp = evec[ 0 ].dot_prod( arr[ ind ] );        XfMin[ 0 ] = min( XfMin[ 0 ], XfTemp );        XfMax[ 0 ] = max( XfMax[ 0 ], XfTemp );        XfTemp = evec[ 1 ].dot_prod( arr[ ind ] );        XfMin[ 1 ] = min( XfMin[ 1 ], XfTemp );        XfMax[ 1 ] = max( XfMax[ 1 ], XfTemp );        XfTemp = evec[ 2 ].dot_prod( arr[ ind ] );        XfMin[ 2 ] = min( XfMin[ 2 ], XfTemp );        XfMax[ 2 ] = max( XfMax[ 2 ], XfTemp );    }    /* Now the orthogonal bounding box in transformed       coordinates is in XfMin and XfMax. */    base_pnt = compute_pnt( evec, XfMin );        side_0 = evec[ 0 ];    side_0.scale( XfMax[ 0 ] - XfMin[ 0 ] );    side_1 = evec[ 1 ];    side_1.scale( XfMax[ 1 ] - XfMin[ 1 ] );    side_2 = evec[ 2 ];    side_2.scale( XfMax[ 2 ] - XfMin[ 2 ] );    }void  computeParallelogram(  const ArrPoint3d  & arr,                             const Point3d  & vec1,                             const Point3d  & vec2,                             const Point3d  & vec3,                             Point3d  & base_pnt,                             Point3d  & side_0,                             Point3d  & side_1,                             Point3d  & side_2 ){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
波多野结衣一区二区三区| 91在线porny国产在线看| 国产一区二区三区蝌蚪| 成人国产精品免费网站| 六月婷婷色综合| 香蕉加勒比综合久久| 一二三区精品福利视频| 国产精品久久久久久久蜜臀| 国产亚洲1区2区3区| 一区二区欧美在线观看| 亚洲精品美腿丝袜| 精一区二区三区| 欧美在线综合视频| 中文字幕国产一区二区| 国产精品国产a级| 日韩—二三区免费观看av| 污片在线观看一区二区| 成人av资源在线| 日韩女同互慰一区二区| 精品成人佐山爱一区二区| 久久久精品黄色| 免费观看在线色综合| 91福利国产精品| 中文字幕欧美激情| 激情综合亚洲精品| 91精品国产麻豆国产自产在线| 1024成人网色www| 国产乱码一区二区三区| 欧美电影一区二区三区| 欧美成人a视频| 亚洲一级二级三级| 色综合天天性综合| 中文字幕免费一区| 国产伦精品一区二区三区在线观看| 国产91在线看| 26uuu国产一区二区三区| 日韩成人伦理电影在线观看| 欧美在线看片a免费观看| 亚洲婷婷综合久久一本伊一区| 国产毛片精品视频| 日韩欧美123| 亚洲精品欧美在线| 91麻豆国产香蕉久久精品| 欧美国产成人在线| 亚洲成av人片一区二区| 国产一二精品视频| 日本福利一区二区| 亚洲靠逼com| 91免费国产在线观看| 日韩一区欧美一区| 91久久一区二区| 一区二区三区精品视频| 欧美在线色视频| 国产精品美女久久福利网站| 成人国产视频在线观看| 日韩欧美一二三四区| 中文字幕一区二区三区色视频| 亚洲第一在线综合网站| 国产91精品欧美| 欧美一区二区三区视频在线| 美脚の诱脚舐め脚责91| 日本韩国一区二区三区视频| 国产亚洲精品超碰| 免费高清在线一区| 久久久久久久久岛国免费| 亚洲成a人v欧美综合天堂| 91精品国产色综合久久ai换脸 | 国产精品色呦呦| 成人午夜视频在线| 精品国免费一区二区三区| 国产一区二区三区在线观看免费 | 天堂久久久久va久久久久| 777色狠狠一区二区三区| 久久精品国产一区二区三| 国产免费久久精品| 欧洲视频一区二区| 成人欧美一区二区三区白人| 欧美性生交片4| 亚洲天堂a在线| 9191久久久久久久久久久| 一区二区三区高清不卡| 91精品国产丝袜白色高跟鞋| 亚洲最大色网站| 99re热视频精品| 天天综合色天天综合色h| 欧美在线一二三四区| 亚洲精品免费电影| 色噜噜狠狠一区二区三区果冻| 午夜精品影院在线观看| 久久久国产精品不卡| 精品在线一区二区| 亚洲欧美日本在线| 色偷偷久久人人79超碰人人澡| 日韩av中文字幕一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 色噜噜狠狠一区二区三区果冻| 久久精品噜噜噜成人av农村| 亚洲少妇最新在线视频| 日韩精品一区二区三区蜜臀| 毛片一区二区三区| 一区二区三区四区av| 国产日产精品一区| 99久久久国产精品免费蜜臀| 亚洲另类春色国产| 国产视频911| 99久久综合99久久综合网站| 久久99精品国产麻豆不卡| 久久免费午夜影院| 成人午夜视频福利| 久久99国产精品久久99果冻传媒| 日韩一区二区视频| 国产一区二区三区在线看麻豆| 午夜欧美一区二区三区在线播放| 日本一区二区视频在线| 精品av久久707| 成人爽a毛片一区二区免费| 奇米一区二区三区| 亚洲国产激情av| 国产日韩综合av| 精品处破学生在线二十三| 91精品中文字幕一区二区三区| 91行情网站电视在线观看高清版| 成人成人成人在线视频| 亚洲国产精品久久不卡毛片| 日韩美女视频一区| 91精品国产美女浴室洗澡无遮挡| 国产不卡高清在线观看视频| 精品一区二区免费在线观看| 国产精品理论在线观看| 国产日产亚洲精品系列| 国产区在线观看成人精品 | 日韩精品中午字幕| 欧美喷潮久久久xxxxx| 色哟哟欧美精品| 91久久国产最好的精华液| 99在线精品一区二区三区| 成人av在线网站| 日本中文在线一区| 日韩中文字幕1| 1区2区3区国产精品| 亚洲三级在线看| 亚洲一区在线观看视频| 精品国产3级a| 久久久亚洲国产美女国产盗摄| 色诱亚洲精品久久久久久| 精品一区二区三区在线视频| 精品一区二区三区的国产在线播放 | av亚洲精华国产精华精华| 成人成人成人在线视频| 美女诱惑一区二区| 国产一区二区三区四区在线观看| 国产最新精品免费| 五月天精品一区二区三区| 国产精品免费久久| 亚洲欧美日韩一区二区三区在线观看 | 国产高清在线精品| 成人av资源站| 国产剧情在线观看一区二区| 成人国产精品免费网站| 91电影在线观看| 91精品久久久久久蜜臀| 久久精品亚洲乱码伦伦中文| 日韩一区和二区| 国产欧美一二三区| 精品电影一区二区三区| 国产精品久久久久久福利一牛影视 | 天天操天天色综合| 国产最新精品精品你懂的| 成人精品鲁一区一区二区| 在线精品视频一区二区三四| 日韩色在线观看| 国产精品视频yy9299一区| 亚洲成人在线免费| 国内精品免费在线观看| 美女视频黄免费的久久 | 一区二区三区在线观看视频| 日韩av二区在线播放| 福利视频网站一区二区三区| 精品一区二区三区的国产在线播放| proumb性欧美在线观看| 欧美一区二区播放| 国产精品久久久久桃色tv| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲第一电影网| 亚洲成a人片在线观看中文| 国产成人av资源| 成人动漫一区二区| 91原创在线视频| 久久免费的精品国产v∧| 亚洲高清三级视频| 麻豆91免费观看| 在线视频一区二区三| 欧美剧情片在线观看| 91精品欧美综合在线观看最新| 中文字幕欧美一| 国产99久久久久| 91啪九色porn原创视频在线观看| 精品久久久久久久久久久久包黑料 | 欧美制服丝袜第一页| 在线播放中文一区|