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

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

?? mink.c

?? 是Computational Geometry in C中的原程序
?? C
字號(hào):
/*This code is described in "Computational Geometry in C" (Second Edition),Chapter 8.  It is not written to be comprehensible without theexplanation in that book.Compile: gcc -o mink mink.c (or simply: make)Written by Joseph O'Rourke.Last modified: December 1997Questions to orourke@cs.smith.edu.--------------------------------------------------------------------This code is Copyright 1997 by Joseph O'Rourke.  It may be freelyredistributed in its entirety provided that this copyright notice isnot removed.--------------------------------------------------------------------*/#include   <stdio.h>#include   <math.h>#include   <stdlib.h>#define EXIT_FAILURE   1#define X 0#define Y 1typedef enum { FALSE, TRUE }   bool;#define DIM 2               /* Dimension of points */typedef int tPointi[DIM];   /* Type integer point *//*----------Point(s) Structure-------------*/typedef struct tPointStructure tsPoint;typedef tsPoint *tPoint;struct tPointStructure {   int     vnum;   tPointi v;   bool    primary;};/* Global variables */#define PMAX    1000               /* Max # of points */typedef tsPoint tPointArray[PMAX];static tPointArray P;int m;  /* Total number of points in both polygons */int n;  /* Number of points in primary polygon */int s;  /* Number of points in secondary polygon *//*----------Function Prototypes-------------*/int     AreaSign( tPointi a, tPointi b, tPointi c );int     ReadPoints( tPointi p0 );void    PrintPoints( void );void    SubVec( tPointi a, tPointi b, tPointi c );void    AddVec( tPointi a, tPointi b, tPointi c );void    Vectorize( void );int     Compare( const void *tp1, const void *tp2 );void    OutputPolygons();void    Convolve( int j0, tPointi p0 );/*------------------------------------------*/main(){   tPointi p0 = {0,0};   int j0;               /* index of start point */   j0 = ReadPoints( p0 );   PrintPoints();   OutputPolygons();   Vectorize();   PrintPoints();   qsort(      &P[0],             /* pointer to 1st elem */      m,                 /* number of elems */      sizeof( tsPoint ), /* size of each elem */      Compare            /* -1,0,+1 compare function */   );   printf("%%After qsort of vectors:");   PrintPoints();   Convolve( j0, p0 );}int     AreaSign( tPointi a, tPointi b, tPointi c ){    double area2;    area2 = ( b[0] - a[0] ) * (double)( c[1] - a[1] ) -            ( c[0] - a[0] ) * (double)( b[1] - a[1] );    /* The area should be an integer. */    if      ( area2 >  0.5 ) return  1;    else if ( area2 < -0.5 ) return -1;    else                     return  0;}/*---------------------------------------------------------------------Reads in the coordinates of the points from stdin, filling in P,and setting the three global counters m=n+s.Returns a start point p0.---------------------------------------------------------------------*/int    ReadPoints( tPointi p0 ){   int i;   int xmin, ymin, xmax, ymax;     /* Primary min & max */   int sxmin, symin, sxmax, symax; /* Secondary min & max */   int mp, ms; /* i index of max (u-r) primary and secondary points */   m = 0;   scanf("%d", &n );   if ( n > PMAX )      printf("Error in ReadPoints:  > %d\n", PMAX), exit(EXIT_FAILURE);   for( i = 0; i < n; i++ ) {      scanf("%d %d",&P[i].v[X],&P[i].v[Y]);      P[i].vnum = i;      P[i].primary = TRUE;      m++;   }   /*printf("%%ReadPoints: %d primary points read\n", n);*/   scanf("%d", &s );   if ( n+s > PMAX )      printf("Error in ReadPoints:  > %d\n", PMAX), exit(EXIT_FAILURE);   for( i = 0; i < s; i++ ) {      scanf("%d %d",&P[n+i].v[X],&P[n+i].v[Y]);      /* Reflect secondary polygon */      P[n+i].v[X] = -P[n+i].v[X];      P[n+i].v[Y] = -P[n+i].v[Y];      P[n+i].vnum = i;      P[n+i].primary = FALSE;      m++;   }   /*printf("%%ReadPoints: %d secondary points read\n", s);*/   /* Compute Bounding Box and output Postscript header. */   xmin = xmax = P[0].v[X];   ymin = ymax = P[0].v[Y];   mp = 0;   for (i = 1; i < n; i++) {      if      ( P[i].v[X] > xmax ) xmax = P[i].v[X];      else if ( P[i].v[X] < xmin ) xmin = P[i].v[X];      if      ( P[i].v[Y] > ymax ) {ymax = P[i].v[Y]; mp = i;}      else if ( P[i].v[Y] == ymax && (P[i].v[X] > P[mp].v[X]) ) mp = i;      else if ( P[i].v[Y] < ymin ) ymin = P[i].v[Y];   }   printf("%%Index of upper rightmost primary, i=mp = %d\n", mp);   printf("%%highest primary: %d %d\n", P[mp].v[X], P[mp].v[Y]);   sxmin = sxmax = P[n].v[X];   symin = symax = P[n].v[Y];   ms = n;   for (i = 1; i < s; i++) {      if      ( P[n+i].v[X] > sxmax ) sxmax = P[n+i].v[X];      else if ( P[n+i].v[X] < sxmin ) sxmin = P[n+i].v[X];      if      ( P[n+i].v[Y] > symax ) {symax = P[n+i].v[Y]; ms = i;}      else if ( P[n+i].v[Y] == symax && (P[n+i].v[X] > P[ms].v[X]) ) ms = i;      else if ( P[n+i].v[Y] < symin ) symin = P[n+i].v[Y];   }   printf("%%Index of upper rightmost secondary, i=ms = %d\n", ms);   printf("%%highest secondary: %d %d\n", P[ms].v[X], P[ms].v[Y]);   /* Compute the start point: upper rightmost of both. */   printf("%%p0=(%d,%d)\n", p0[X], p0[Y]);   AddVec( p0, P[mp].v, p0 );   printf("%%p0=(%d,%d)\n", p0[X], p0[Y]);   AddVec( p0, P[ms].v, p0 );   printf("%%p0=(%d,%d)\n", p0[X], p0[Y]);   /* PostScript header */   printf("%%!PS\n");   printf("%%%%Creator: mink.c (Joseph O'Rourke)\n");   printf("%%%%BoundingBox: %d %d %d %d\n",       ((xmin < sxmin) ? xmin : sxmin),      ((ymin < symin) ? ymin : symin),      ((xmax > sxmax) ? xmax : sxmax),      ((xmax > sxmax) ? xmax : sxmax)      );   printf("%%%%EndComments\n");   printf(".00 .00 setlinewidth\n");   printf("%d %d translate\n",       -((xmin < sxmin) ? xmin : sxmin) + 72,      -((ymin < symin) ? ymin : symin) + 72 );   /* The +72 shifts the figure one inch from the lower left corner */   printf("%%j0 = %d\n", mp);   return mp; /* j0: starting index. */}void   PrintPoints( void ){   int i;   printf("%%Points:\n");   for( i = 0; i < m; i++ )      printf("%%i=%d: primary=%d | vnum=%3d, x=%4d, y=%4d\n",              i, P[i].primary, P[i].vnum, P[i].v[X], P[i].v[Y]);}void   OutputPolygons( void ){   int i;   printf("\n%%Primary Polygon:\n");   printf("newpath\n");   printf("%d\t%d\tmoveto\n", P[0].v[X], P[0].v[Y]);   for( i = 1; i <= n; i++ )      printf("%d\t%d\tlineto\n", P[i%n].v[X], P[i%n].v[Y]);   printf("closepath\n0.8 setgray fill stroke\n0 setgray");   printf("\n%%Secondary Polygon (reflected):\n");   printf("newpath\n");   printf("%d\t%d\tmoveto\n", P[n].v[X], P[n].v[Y]);   for( i = 1; i <= s; i++ )      printf("%d\t%d\tlineto\n", P[n+(i%s)].v[X], P[n+(i%s)].v[Y]);   printf("closepath stroke\n"); }/*---------------------------------------------------------------------a - b ==> c.---------------------------------------------------------------------*/void    SubVec( tPointi a, tPointi b, tPointi c ){   int i;   /*printf("a=(%d,%d); b=(%d,%d)\n",a[X],a[Y],b[X],b[Y]);*/   for( i = 0; i < DIM; i++ )      c[i] = a[i] - b[i];}/*---------------------------------------------------------------------a + b ==> c.---------------------------------------------------------------------*/void    AddVec( tPointi a, tPointi b, tPointi c ){   int i;   /*printf("a=(%d,%d); b=(%d,%d)\n",a[X],a[Y],b[X],b[Y]);*/   for( i = 0; i < DIM; i++ )      c[i] = a[i] + b[i];}void   Vectorize( void ){   int i;   tPointi last;  /* Holds the last vector difference. */   printf("%%Vectorize\n");   SubVec( P[0].v, P[n-1].v, last );   for( i = 0; i < n-1; i++ ) {      /*printf("i/i+1=%d,%d\n", i, i+1 );*/      SubVec( P[i+1].v, P[i].v, P[i].v );   }   P[n-1].v[X] = last[X];   P[n-1].v[Y] = last[Y];   SubVec( P[n].v, P[n+s-1].v, last );   for( i = 0; i < s-1; i++ ) {      /*printf("i/i+1=%d,%d\n", n+i, n+i+1 );*/      SubVec( P[n+i+1].v, P[n+i].v, P[n+i].v );   }   P[n+s-1].v[X] = last[X];   P[n+s-1].v[Y] = last[Y];}int   Compare( const void *tpi, const void *tpj ){   int a;             /* AreaSign result */   int x, y;          /* projections in 1st quadrant */   tPoint pi, pj;     /* Recasted points */   tPointi Origin = {0,0};   pi = (tPoint)tpi;   pj = (tPoint)tpj;   /* A vector in the open   upper halfplane is after      a vector in the closed lower halfplane. */   if      ( ( pi->v[Y] > 0 ) && (pj->v[Y] <= 0 ) )      return  1;   else if ( ( pi->v[Y] <= 0 ) && (pj->v[Y] > 0 ) )      return -1;   /* A vector on the x-axis and one in the lower halfplane      are handled by the Left computation below. */   /* Both vectors on the x-axis requires special handling. */   else if ( ( pi->v[Y] == 0 ) && (pj->v[Y] == 0 ) ) {       if      ( ( pi->v[X] < 0 ) && ( pj->v[X] > 0 ) )         return -1;      if      ( ( pi->v[X] > 0 ) && ( pj->v[X] < 0 ) )         return  1;      else if ( abs(pi->v[X]) < abs(pj->v[X]) )         return  -1;      else if ( abs(pi->v[X]) > abs(pj->v[X]) )         return   1;      else         return  0;   }   /* Otherwise, both in open upper halfplane,       or both in closed lower halfplane, but not both on x-axis. */   else {          a = AreaSign( Origin, pi->v, pj->v );      if      (a > 0)         return -1;      else if (a < 0)         return 1;      else { /* Begin collinear */         x =  abs( pi->v[X] ) - abs( pj->v[X] );         y =  abs( pi->v[Y] ) - abs( pj->v[Y] );            if      ( (x < 0) || (y < 0) )            return -1;         else if ( (x > 0) || (y > 0) )            return 1;         else /* points are coincident */            return 0;      } /* End collinear */   }}void    Convolve( int j0, tPointi p ){   int i;  /* Index into sorted edge vectors P */   int j;  /* Primary polygon indices */   printf("%%Convolve: Start array i = %d, primary j0= %d\n", i, j0);   printf("1 1 setlinewidth\n");   printf("newpath\n");   printf("%d\t%d\tmoveto\n", p[X], p[Y]);   i = 0;  /* Start at angle -pi, rightward vector. */   j = j0; /* Start searching for j0. */   do {      /* Advance around secondary edges until next j reached. */      while ( !(P[i].primary && P[i].vnum == j) ) {	 if ( !P[i].primary ) {            AddVec( p, P[i].v, p );            printf("%d\t%d\tlineto\n", p[X], p[Y]);	 }         i = (i+1)%m;	 printf("%%X: i incremented to %d\n", i);      }      /* Advance one primary edge. */      printf("%%X: j=%d found at i=%d\n", j, i);      AddVec( p, P[i].v, p );      printf("%d\t%d\tlineto\n", p[X], p[Y]);      j = (j+1)%n;      printf("%%X: j incremented to %d\n", j);   } while ( j != j0);   /* Finally, complete circuit on secondary/robot polygon. */   while (i != 0) {      if ( !P[i].primary ) {         AddVec( p, P[i].v, p );         printf("%d\t%d\tlineto\n", p[X], p[Y]);      }      i = (i+1)%m;      printf("%%X: i incremented to %d in final circuit\n", i);   }   printf("closepath stroke\n");   printf("showpage\n%%%%EOF\n");}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区二区| 欧美唯美清纯偷拍| 国产综合久久久久久久久久久久| 性做久久久久久| 亚洲国产精品综合小说图片区| 一区二区三区四区视频精品免费| 亚洲美女一区二区三区| 亚洲欧美一区二区不卡| 亚洲欧美日韩一区二区 | 91蝌蚪porny九色| 欧美成人一区二区三区片免费 | 美腿丝袜亚洲三区| 日韩成人一级大片| 日韩精品福利网| 奇米精品一区二区三区四区| 美美哒免费高清在线观看视频一区二区 | 久久久精品黄色| 久久精品在线免费观看| 国产日韩欧美a| 国产精品三级电影| 亚洲视频每日更新| 亚洲愉拍自拍另类高清精品| 欧美成人精品福利| 26uuu亚洲综合色| 久久综合色天天久久综合图片| 精品剧情在线观看| 国产欧美精品一区二区三区四区 | 精品区一区二区| 久久精品一区二区三区不卡牛牛 | 欧美韩日一区二区三区| 亚洲国产精品二十页| 日韩一区中文字幕| 亚洲123区在线观看| 久久国产剧场电影| 成人精品高清在线| 欧美日韩中文字幕一区| 精品国产自在久精品国产| 国产精品色婷婷久久58| 亚洲一本大道在线| 韩国在线一区二区| 91麻豆精品秘密| 日韩欧美国产午夜精品| 亚洲国产成人91porn| 天堂久久久久va久久久久| 另类综合日韩欧美亚洲| 不卡一区二区三区四区| 欧美性xxxxxx少妇| 久久久久综合网| 亚洲激情自拍视频| 精品一区二区三区免费观看| 91丨九色丨蝌蚪富婆spa| 欧美一二三四区在线| 国产精品国产三级国产a| 日日骚欧美日韩| 高清beeg欧美| 91麻豆精品国产| 国产精品夫妻自拍| 麻豆精品一二三| 日本高清成人免费播放| 精品国产123| 亚洲一区二区三区在线播放| 国产一区二区久久| 777a∨成人精品桃花网| 国产精品不卡在线| 精彩视频一区二区| 欧美四级电影在线观看| 欧美国产精品一区二区| 日韩高清欧美激情| 91成人看片片| 中文字幕av不卡| 激情成人综合网| 欧美肥妇毛茸茸| 亚洲黄色性网站| 成人av影视在线观看| 欧美成人a在线| 三级欧美韩日大片在线看| 99国产欧美另类久久久精品| 久久男人中文字幕资源站| 日韩制服丝袜先锋影音| 91福利精品视频| 国产精品国产精品国产专区不片| 国产一区二区主播在线| 欧美一级在线免费| 五月激情丁香一区二区三区| 99re视频精品| 国产精品国产三级国产aⅴ入口| 久久精品二区亚洲w码| 在线成人免费观看| 亚洲成av人综合在线观看| 91麻豆精品秘密| 综合久久久久久久| caoporn国产一区二区| 国产视频一区二区在线观看| 久久99国产精品麻豆| 日韩欧美国产电影| 免费在线观看日韩欧美| 91精品国产全国免费观看| 最新欧美精品一区二区三区| 国产精品毛片a∨一区二区三区| 免费观看日韩av| 欧美精品久久久久久久多人混战 | 欧美一级二级在线观看| 性做久久久久久免费观看欧美| 在线免费视频一区二区| 亚洲精品成人悠悠色影视| 91丨porny丨户外露出| 亚洲男人天堂av网| 91视频国产资源| 一区二区三区视频在线观看| 色综合久久综合| 夜色激情一区二区| 欧美性猛交一区二区三区精品| 一二三区精品福利视频| 在线国产电影不卡| 午夜精品久久久久久久99水蜜桃| 欧美精品xxxxbbbb| 奇米色777欧美一区二区| 精品国偷自产国产一区| 国产激情一区二区三区四区| 亚洲国产精品久久久男人的天堂 | xnxx国产精品| 国产成人午夜99999| 看国产成人h片视频| 欧美精品久久天天躁| 免费欧美日韩国产三级电影| 2023国产精品| 成人教育av在线| 一区二区在线观看视频在线观看| 欧美亚洲自拍偷拍| 美女性感视频久久| 国产校园另类小说区| 色婷婷精品久久二区二区蜜臀av| 亚洲成人综合网站| 精品久久人人做人人爰| 波多野结衣中文字幕一区 | 开心九九激情九九欧美日韩精美视频电影 | 91精品福利在线一区二区三区| 免费人成黄页网站在线一区二区| 久久久99免费| 91搞黄在线观看| 久久电影网电视剧免费观看| 中文字幕欧美三区| 欧美乱熟臀69xxxxxx| 国产一区二区在线观看免费| 亚洲欧美日韩在线| 欧美一级高清片| 99视频在线精品| 日韩不卡免费视频| 国产精品天天摸av网| 欧美日韩亚洲丝袜制服| 国产一区二区看久久| 亚洲一区二区三区中文字幕在线| 欧美精品一区二区三区四区| www.在线成人| 免费三级欧美电影| 亚洲少妇最新在线视频| 日韩精品中文字幕一区| 91免费精品国自产拍在线不卡| 蜜臀精品一区二区三区在线观看| 成人手机在线视频| 亚洲日穴在线视频| 精品久久国产字幕高潮| 91丨九色丨蝌蚪丨老版| 久久精品久久综合| 亚洲制服欧美中文字幕中文字幕| 欧美精品一区二区三区久久久| 日本韩国一区二区三区| 国产乱码精品一区二区三区av| 亚洲成精国产精品女| 国产精品乱人伦| 欧美xxxx在线观看| 国产欧美日本一区视频| 日韩三级中文字幕| 欧美亚洲综合网| 成人av电影观看| 国产一区二区久久| 日本伊人精品一区二区三区观看方式 | 欧美极品美女视频| 日韩欧美第一区| 欧美日韩高清一区二区不卡| jiyouzz国产精品久久| 国产伦精品一区二区三区在线观看| 亚洲成人免费观看| 亚洲人妖av一区二区| 国产欧美日韩精品一区| 精品剧情v国产在线观看在线| 欧美日韩mp4| 欧美在线观看视频在线| 不卡一卡二卡三乱码免费网站| 国产精品小仙女| 久久国产生活片100| 青青国产91久久久久久| 亚洲成人免费观看| 亚洲午夜影视影院在线观看| 91精品国产综合久久久蜜臀图片| 国产伦精品一区二区三区在线观看| 日日嗨av一区二区三区四区| 亚洲自拍偷拍九九九| 亚洲日本乱码在线观看| 亚洲国产高清在线|