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

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

?? angpp.c

?? vc編寫的3D圖形
?? C
字號:
/********************  angpp.c  ******************************

   Three dimensional surface reconstruction program

   This program assumes that the views from the main axis
   directions were done thus an angle view between two main
   axis views can be created from the depth_code viewa(floating
   point). 

 Daniel Geist
 Michael W. Vannier

 Mallinckrodt Institute of Radiology
 Washington University School of Medicine
 510 S. Kingshighway Blvd.
 St. Louis, Mo. 63110

 Note:  This program is intended for the private non-commercial
 use of interested individuals to provide a fuller explanation of
 the algorithms described in "Three dimensional reconstruction in
 Medical Imaging" by D. Geist and M. Vannier.

 1988
 *************************************************************/

#include <stdio.h>
#include <math.h>
#define FLOAT_LINE 1024
#define PI 3.141592653

/* the structure below is the data for a point on the surface projected
   on the view plane                        */
typedef struct DIS_REC {
    float dist;            /*distance from view plane */
    int indXY;             /* index of data on main axis view */
    char XY;               /* Which main axis view obtained from (X or Y)*/
};

struct DIS_REC distances[256]; /* one projected line */

int NLINES,IXmax,IYmax,xinc,yinc;
int (*xdir)(),(*ydir)();
float THETA,cosTheta,sinTheta,tgnTheta;
float fxbuf[3][256],fybuf[3][256];/* input buffers */

/*  output files  */
char fng[13],fnd[13],xfile[13],yfile[13],DR;

succ(i)
int i;
{
    return(i==2?0:i+1);
}

prev(i)
int i;
{
    return(i==0?2:i-1);
}

forward(i)
int i;
{ 
    return(i); 
}

backward(i,start)
int i;
{
    return(start-i); 
}

/* PUTD - fill a DIS_REC with values */
putd(pdis,D,i,xy_sym)
struct DIS_REC *pdis;
float D;
int i,xy_sym;

{ 
    pdis->dist=D;
    pdis->indXY=i;
    pdis->XY=xy_sym;
}

/* take one line from X and Y views and create a projrcted line */
getdistances(linex,liney)
float linex[],liney[];

{ 
    int i,IND,X,Y;
    float D;
    for(i=0;i<256;i++) distances[i].XY=0;
    /* project Y-data onto image line */
    for(i=0;i<256;i++) if(liney[i]!=256.0){
        X=(*ydir)(i,255);
        IND=IXmax -(X*sinTheta-liney[i]*cosTheta)+0.5;
        D=liney[i]/sinTheta+(X-liney[i]/tgnTheta)*cosTheta;
        if((IND>=0) && (IND<256)){
            if(distances[IND].XY==0)putd(&distances[IND],D,i,1);
            else if(distances[IND].dist>D)putd(&distances[IND],D,i,1);
        }
    }

    /*project X-data onto image plane */
    for(i=0;i<256;i++) if(linex[i]!=256.0){
        Y=(*xdir)(i,255);
        IND=IXmax-(linex[i]*sinTheta-Y*cosTheta)+0.5;
        D=Y/sinTheta+(linex[i]-Y/tgnTheta)*cosTheta;
        if((IND>=0) && (IND<256)){
            if(distances[IND].XY==0)putd(&distances[IND],D,i,2);
            else if(distances[IND].dist>D)putd(&distances[IND],D,i,2);
        }
    }

    /* fill holes due to low resolution */
    for(i=1;i<255;i++)if( (distances[i].XY==0) && (distances[i+1].XY!=0) &&
        (distances[i-1].XY!=0))
        putd(&distances[i],distances[i-1].dist,
        distances[i-1].indXY,(int)distances[i-1].XY);
}

/* returns gradient shade in point given the variations of the surface */
unsigned char grad(x1,x2,y1,y2,z1,z2,x_fac,y_fac,z_fac)
float x1,x2,y1,y2,z1,z2;
int x_fac,y_fac,z_fac;
{
    float gx,gy,gz,G,nx,ny;
    unsigned char gxint;
    /* components of gradient */
    gx=(x2-x1)/x_fac;
    gy=(y2-y1)/y_fac;
    gz=(z1-z2)/z_fac;
    G=sqrt(gx*gx+gy*gy+gz*gz);
    /*compute nx,ny normalized x,y component of gradient */
    nx=gx/G;
    ny=gy/G;
    gxint=255*(nx*cosTheta+ny*sinTheta)+0.5; /*scale gradient shade by 256 */
    return(gxint);
}

doline(linex,linex1,linex2,liney,liney1,liney2,z_fac,fg,fd)
float linex[],linex1[],linex2[],liney[],liney1[],liney2[];
int z_fac;
FILE *fg,*fd;

{ 
    int i;
    unsigned char lined[256],lineg[256];
    /* empty bit on image line */
    for(i=0;i<256;i++)if(distances[i].XY==0)lineg[i]=lined[i]=0;
    else{
        lined[i]=(distances[i].dist<256)?255-distances[i].dist+0.5:0;
        /* bit on image line projected from Y view */
        if(distances[i].XY==1) switch(distances[i].indXY){
        case 0:
            lineg[i]=
                grad(liney[1]*yinc,liney[0]*yinc,(float)0,(float)2,
            liney1[0],liney2[0],1,2,z_fac);
            break;
        case 255:
            lineg[i]=
                grad(liney[255]*yinc,liney[254]*yinc,(float)0,(float)2,
            liney1[255],liney2[255],1,2,z_fac);
            break;
        default:
            lineg[i]=
                grad(liney[distances[i].indXY+yinc],
            liney[distances[i].indXY-yinc],(float)0,(float)2,
            liney1[distances[i].indXY],
            liney2[distances[i].indXY],2,2,z_fac); 
            break;
        }
        /* bit on image line projected from X view */
        else switch(distances[i].indXY){
        case 0:
            lineg[i]=
                grad((float)0,(float)2,linex[1]*xinc,linex[0]*xinc,
            linex1[0],linex2[0],2,1,z_fac);
            break;
        case 255:
            lineg[i]=
                grad((float)0,(float)2,linex[255]*xinc,linex[254]*xinc,
            linex1[255],linex2[255],2,1,z_fac);
            break;
        default:
            lineg[i]=
                grad((float)0,(float)2,linex[distances[i].indXY+xinc],
            linex[distances[i].indXY-xinc],
            linex1[distances[i].indXY],
            linex2[distances[i].indXY],2,2,z_fac);
            break;
        }
    }

    fwrite(lineg,1,256,fg);
    fwrite(lined,1,256,fd);
}

doviews()
{
    FILE *fg,*fd,*fx,*fy;
    int z,i,j,k,mid;
    mid=1;
    fd=fopen(fnd,"wb");
    fg=fopen(fng,"wb");
    fx=fopen(xfile,"rb");
    fy=fopen(yfile,"rb");

    /*read first three lines */
    for(i=0;i<3;i++){
        fseek(fx,(long)FLOAT_LINE*(*ydir)(i,NLINES-1),SEEK_SET);
        fread(fxbuf[i],1,FLOAT_LINE,fx);
        fseek(fy,(long)FLOAT_LINE*(*xdir)(i,NLINES-1),SEEK_SET);
        fread(fybuf[i],1,FLOAT_LINE,fy);
    }

    /* do first line (forward differene)*/
    getdistances(fxbuf[0],fybuf[0]);
    doline(fxbuf[0],fxbuf[0],fxbuf[1],fybuf[0],fybuf[0],fybuf[1],1,fg,fd);

    /* do middle lines (central diffrence) */
    printf("Begining computation of  views\n");
    for(z=0;z<(NLINES-2);z++){      /*for each slice */
        getdistances(fxbuf[mid],fybuf[mid]);
        doline(fxbuf[mid],fxbuf[prev(mid)],fxbuf[succ(mid)],
        fybuf[mid],fybuf[prev(mid)],fybuf[succ(mid)],2,fg,fd);
        fseek(fx,(long)FLOAT_LINE*(*ydir)(i,NLINES-1),SEEK_SET);
        fseek(fy,(long)FLOAT_LINE*(*xdir)(i,NLINES-1),SEEK_SET);
        i++;
        fread(fxbuf[prev(mid)],1,FLOAT_LINE,fx);
        fread(fybuf[prev(mid)],1,FLOAT_LINE,fy);
        mid=succ(mid);
        printf(" did %d \n",z);
    }

    /* do last line (backward difference)*/
    getdistances(fxbuf[mid],fybuf[mid]);
    doline(fxbuf[mid],fxbuf[prev(mid)],fxbuf[mid],
    fybuf[mid],fybuf[prev(mid)],fybuf[mid],1,fg,fd);

    fclose(fg);
    fclose(fd);
    fclose(fx);
    fclose(fy);
}

getang(ang)
int *ang;
{ 
    scanf("%d",ang);
    sprintf(fng,"gang%d.out",*ang);
    sprintf(fnd,"dang%d.out",*ang);
    if( ( *ang > 0) && ( *ang < 90) ){
        xdir=forward;
        ydir=forward;
        sprintf(xfile,"%c:xdis1.dat",DR);
        sprintf(yfile,"%c:ydis1.dat",DR);
        xinc=1;
        yinc=1;
    }
    else if( ( *ang > 90) && ( *ang < 180) ){
        xdir=backward;
        ydir=forward;
        sprintf(xfile,"%c:ydis1.dat",DR);
        sprintf(yfile,"%c:xdis2.dat",DR);
        xinc=-1;
        yinc=1;
        *ang-=90;
    }
    else if( ( *ang > 180) && ( *ang < 270) ){
        xdir=backward;
        ydir=backward;
        sprintf(xfile,"%c:xdis2.dat",DR);
        sprintf(yfile,"%c:ydis2.dat",DR);
        xinc=-1;
        yinc=-1;
        *ang-=180;
    }
    else if( ( *ang > 270) && ( *ang < 360) ){
        xdir=forward;
        ydir=backward;
        sprintf(xfile,"%c:ydis2.dat",DR);
        sprintf(yfile,"%c:xdis1.dat",DR);
        xinc=1;
        yinc=-1;
        *ang-=270;
    }
    else {
        printf(" Bad angle\n");
        exit(1);
    }
}

/**********************************************************/
/**** MAIN ***** MAIN ***** MAIN ***** MAIN ***** MAIN ****/
/**********************************************************/

main()

{ 
    char filname[13];
    FILE *par;
    int ANG;

    /* first get some parameters */
    par=fopen("param.dat","rb");
    fscanf(par,"%c %d",&DR,&NLINES);
    fclose(par);
    printf("Enter angle: ");
    getang(&ANG);

    IXmax=(255*ANG)/90;
    THETA=(float)ANG*PI/180;
    sinTheta=sin(THETA);
    cosTheta=cos(THETA);
    tgnTheta=sinTheta/cosTheta;

    doviews();
    exit(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区欧美一区| 日韩午夜在线观看视频| 欧洲国产伦久久久久久久| 欧美区视频在线观看| 国产免费久久精品| 日韩av一级片| 欧美四级电影在线观看| 中文字幕第一区综合| 久久国产福利国产秒拍| 欧美另类高清zo欧美| 日韩伦理电影网| 国产成人午夜高潮毛片| 精品国产乱码久久久久久牛牛| 亚洲美女免费视频| 成人动漫一区二区三区| 久久久一区二区三区捆绑**| 日韩国产欧美视频| 欧美日韩和欧美的一区二区| 亚洲精品高清在线| 色综合中文字幕| 国产精品久久久久四虎| 成人动漫av在线| 一区视频在线播放| 99免费精品在线| 亚洲男人电影天堂| 99久久99久久综合| 国产三区在线成人av| 国产一区二区在线影院| 亚洲精品在线观| 国内精品在线播放| 久久久亚洲欧洲日产国码αv| 亚洲成av人在线观看| 欧美性大战久久久| 亚洲高清视频在线| 69堂亚洲精品首页| 久久99精品国产.久久久久久| 欧美xxx久久| 国产精品亚洲午夜一区二区三区| 久久久亚洲高清| bt7086福利一区国产| 亚洲精选视频在线| 欧美一a一片一级一片| 日韩高清中文字幕一区| 日韩精品一区二区在线观看| 国产高清久久久久| 中文字幕一区在线观看| 欧日韩精品视频| 蜜臀av一区二区| 国产人成一区二区三区影院| 成人18精品视频| 亚洲丰满少妇videoshd| 亚洲精品在线观看视频| 波多野结衣中文一区| 亚洲免费观看高清完整版在线观看| 色94色欧美sute亚洲13| 男女男精品视频| 欧美国产综合一区二区| 91国偷自产一区二区使用方法| 国内精品伊人久久久久av一坑 | 国产亚洲短视频| 成人综合婷婷国产精品久久蜜臀| 中文字幕色av一区二区三区| 69久久夜色精品国产69蝌蚪网| 精品一区二区三区免费播放| 国产精品国产三级国产aⅴ无密码| 欧美午夜片在线看| 国产一区在线观看麻豆| 亚洲美女精品一区| 久久嫩草精品久久久精品一| 在线看不卡av| 国产精品中文欧美| 亚洲国产日韩a在线播放| 国产午夜亚洲精品不卡| 在线成人小视频| 不卡高清视频专区| 美女诱惑一区二区| 亚洲女爱视频在线| 久久久精品人体av艺术| 欧美精品tushy高清| 91美女片黄在线观看91美女| 久久se这里有精品| 亚洲大片一区二区三区| 国产精品美女一区二区三区| 日韩精品一区二区三区四区| 欧美特级限制片免费在线观看| 丁香亚洲综合激情啪啪综合| 免费在线观看一区| 亚洲国产中文字幕在线视频综合 | 成人免费视频app| 首页综合国产亚洲丝袜| 亚洲婷婷在线视频| 中文字幕不卡三区| 久久―日本道色综合久久| 欧美一级艳片视频免费观看| 91福利在线看| 97久久精品人人澡人人爽| 国产成人99久久亚洲综合精品| 韩国中文字幕2020精品| 青青草伊人久久| 亚洲成a人片在线观看中文| 樱桃国产成人精品视频| 中文字幕在线观看一区| 中文字幕在线视频一区| 亚洲国产精品激情在线观看| 久久久久久久久久电影| 欧美精品一区二区在线观看| 日韩一卡二卡三卡国产欧美| 欧美一区二区播放| 5858s免费视频成人| 欧美夫妻性生活| 欧美日本国产一区| 91精品国产综合久久婷婷香蕉| 欧美日韩国产精品成人| 久久久久久久久久久久久夜| 亚洲精品在线观看视频| 久久精品亚洲精品国产欧美kt∨ | 欧美日韩国产色站一区二区三区| 色先锋资源久久综合| 色一情一乱一乱一91av| 欧美在线制服丝袜| 欧美视频在线观看一区二区| 欧美日精品一区视频| 欧美丰满少妇xxxxx高潮对白 | 久久九九影视网| 国产午夜亚洲精品羞羞网站| 国产精品理伦片| 亚洲人成精品久久久久| 亚洲高清不卡在线| 美女高潮久久久| 国产乱国产乱300精品| 国产成a人亚洲精| 91丨九色丨蝌蚪丨老版| 在线观看免费亚洲| 欧美精品xxxxbbbb| 久久久久久久久一| 亚洲精品国产高清久久伦理二区| 亚洲电影在线免费观看| 久久精品国产色蜜蜜麻豆| 成人免费毛片嘿嘿连载视频| 日本韩国精品在线| 欧美一区永久视频免费观看| 国产日本欧洲亚洲| 亚洲午夜电影网| 精品一二三四区| 91高清视频免费看| 精品久久免费看| 亚洲美女视频在线| 九九精品一区二区| 91在线精品一区二区| 6080日韩午夜伦伦午夜伦| 国产精品污网站| 丝袜美腿成人在线| 成人精品小蝌蚪| 欧美一区二区三区公司| 欧美激情在线一区二区| 蜜桃av噜噜一区二区三区小说| 成人性生交大合| 91麻豆精品国产91久久久使用方法| 久久综合成人精品亚洲另类欧美 | 捆绑调教美女网站视频一区| 丁香五精品蜜臀久久久久99网站| 欧美裸体bbwbbwbbw| 中文字幕色av一区二区三区| 久99久精品视频免费观看| av电影天堂一区二区在线| 日韩欧美成人激情| 亚洲国产视频直播| 成人免费av在线| 精品乱人伦小说| 亚洲二区在线视频| 91啪亚洲精品| 国产精品人人做人人爽人人添| 日本在线观看不卡视频| 色域天天综合网| 国产精品欧美久久久久一区二区 | 日韩二区三区四区| 一本一道波多野结衣一区二区| 久久久久国产精品人| 蜜臀av性久久久久蜜臀aⅴ| 在线观看视频91| 国产精品久久久久毛片软件| 国产一区二区视频在线| 在线综合+亚洲+欧美中文字幕| 亚洲精品视频一区| 99vv1com这只有精品| 欧美国产日韩一二三区| 国产91丝袜在线播放九色| ww亚洲ww在线观看国产| 久草这里只有精品视频| 欧美一卡二卡三卡四卡| 日韩高清欧美激情| 欧美剧情片在线观看| 日精品一区二区| 欧美精品久久久久久久久老牛影院| 亚洲综合图片区| 欧美体内she精高潮| 亚洲大片精品永久免费| 4438x亚洲最大成人网| 免费成人av在线播放| 日韩欧美在线综合网|