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

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

?? marching.c

?? Trung Nguyen 編寫的一個簡單的fast marching 算法
?? C
字號:
/*--------------------------- Commande MegaWave -----------------------------*//* mwcommand   name = {marching};   author = {"Trung Nguyen"};   version = {"1.0"};   function = {"Fast Marching Level Set"};   usage = {        'l':[l=-1]->l               "level to print out (default: all levels)",     'e':error<-error                  "image of error",     in->in                      "input Fcurve",     size->size                  "size of image output",     out<-out                    "distance image"   };*/#include <stdio.h>#include <math.h>#include <time.h>#include "mw.h"#define PI 3.141592#define INFINITY 10000.0#define max(x, y) (x > y ? x : y)#define min(x, y) (x < y ? x : y)#define ARRAY_2D_ALLOC(array, iWidth, iHeight, type) \(array) = (type**) malloc((iHeight)*sizeof(type*)); \if((array) == NULL) mwerror(FATAL, 1, "ARRAY_2D_ALLOC --> memory"); \(array)[0] = (type*) calloc((iWidth)*(iHeight), sizeof(type)); \if((array)[0] == NULL) mwerror(FATAL, 1, "ARRAY_2D_ALLOC --> memory"); \for(i = 1; i < (iHeight); i++) \  (array)[i] = (array)[i-1]+(iWidth);enum Status {ALIVE, NARROW_BAND, FAR_AWAY};int MAX;typedef struct {  int    x;  int    y;} Element;Element*        heap;int*            heap_size;enum Status**   stat;double**        T;        /* distance of points */int**           pos;         /* position of a grid point in the heap */float sqr(float x) { return (x * x); }/*** Manipulate a heap at node i ***/void Heapify(Element* h, int N, int i) {  int       l, r, smallest;  Element   tmp;  l = 2 * i;   r = 2 * i + 1;  /* Find the smallest value between 3 nodes */  if (l <= *heap_size && T[h[l].x + MAX/2][h[l].y + MAX/2] < T[h[i].x + MAX/2][h[i].y + MAX/2])    smallest = l;  else smallest = i;    if (r <= *heap_size && T[h[r].x + MAX/2][h[r].y + MAX/2] < T[h[smallest].x + MAX/2][h[smallest].y + MAX/2])     smallest = r;  if (smallest != i) {        tmp = h[i];    h[i] = h[smallest];    h[smallest] = tmp;    pos[h[i].x + MAX/2][h[i].y + MAX/2] = i;    pos[h[smallest].x + MAX/2][h[smallest].y + MAX/2] = smallest;    Heapify(h, N, smallest);  }    }/* Extract the smallest value of a heap */Element Heap_Extract_Min(Element* h, int *N) {  Element min;    if (*N < 1) {    printf("error: heap underflow\n");    return min;  }    min = h[1];  pos[h[1].x + MAX/2][h[1].y + MAX/2] = 0;  h[1] = h[*N];  pos[h[1].x + MAX/2][h[1].y + MAX/2] = 1;    (*N)--;  Heapify(h, *N, 1);    return min;}/*** Insert an element into a heap ***/void Heap_Insert(Element* h, int* N, Element e) {  int i;  i = (N != NULL) ? ++(*N) : 0;    /* Find the best place for e */  while (i > 1 && T[h[i / 2].x + MAX/2][h[i / 2].y + MAX/2] > T[e.x + MAX/2][e.y + MAX/2]) {    h[i] = h[i / 2];    pos[h[i].x + MAX/2][h[i].y + MAX/2] = i;    i = i / 2;  }    h[i] = e;  pos[e.x + MAX/2][e.y + MAX/2] = i;}/*** Return G(A, B, C, D) at the value T ***/float G(float A, float B, float C, float D, float T) {  return (sqr(max(max(T - B, 0), -min(D - T, 0))) +    sqr(max(max(T - A, 0), -min(C - T, 0))));}/*** Approximate the gradient of a point (cf. Rouy and Tourin) ***/float Distance(float A, float B, float C, float D, float F) {  float low = -INFINITY;  float upp = INFINITY;  float time;  time = (low + upp) / 2;  while (low < upp &&  G(A, B, C, D, time) != F)     if (G(A, B, C, D, time) < F) {      low = time + 0.0001;      time = (low + upp) / 2;    }    else {      upp = time - 0.0001;      time = (low + upp) / 2;    }        return time;  }/*** Marching algorithm (cf. Sethian) ***/void Marching() {  Element p, e;  int i, j, k, fix;  while (*heap_size > 0) {    p = Heap_Extract_Min(heap, heap_size);    stat[p.x + MAX/2][p.y + MAX/2] = ALIVE;        for (k = 0; k < 4; k++) {      i = (k < 2 ? (k * 2 - 1) : 0);       j = (k < 2 ? 0 : k * 2 - 5);        if (p.x + i - 1 > -MAX/2 && p.x + i + 1 < MAX/2 && 	  p.y + j - 1 > -MAX/2 && p.y + j  + 1< MAX/2 &&	  stat[p.x + i + MAX/2][p.y + j + MAX/2] != ALIVE) {		T[p.x + i + MAX/2][p.y + j + MAX/2] 	  = Distance(T[p.x + i + MAX/2][p.y + j - 1 + MAX/2],		     T[p.x + i - 1 + MAX/2][p.y + j + MAX/2],		     T[p.x + i + MAX/2][p.y + j + 1 + MAX/2],		     T[p.x + i + 1 + MAX/2][p.y + j + MAX/2], 1.0);		for (fix = pos[p.x + i + MAX/2][p.y + j + MAX/2] / 2; fix >= 1; fix = fix / 2) 	  Heapify(heap, *heap_size, fix);	if (stat[p.x + i + MAX/2][p.y + j + MAX/2] == FAR_AWAY) {	  stat[p.x + i + MAX/2][p.y + j + MAX/2] = NARROW_BAND;	  e.x = p.x + i;	  e.y = p.y + j;	  Heap_Insert(heap, heap_size, e);	}	      }    }   }}/*** MAIN PROGRAM ***/void marching(in, l, size, out, error)      Fcurve in;     Fimage out, error;     int size;     int *l;{   int x, y, d, i, j, nb_points = 0;  double medx = 0, medy = 0;  float sum_error = 0;  Point_fcurve p;  Element e;  int print_error;  clock_t tick;  if (error) print_error = 1; else print_error = 0;  MAX = size + 2;  ARRAY_2D_ALLOC(T, MAX, MAX, double);  ARRAY_2D_ALLOC(pos, MAX, MAX, int);  ARRAY_2D_ALLOC(stat, MAX, MAX, enum Status);  for (i = 0; i < MAX; i++)    for (j = 0; j < MAX; j++) {      stat[i][j] = FAR_AWAY;      T[i][j] = INFINITY;    }    heap = (Element*) malloc(MAX * MAX * sizeof(Element));  heap_size = (int*) malloc(sizeof(int));  *heap_size = 0;    for (p = in->first; p; p = p->next) {    medx += p->x;    medy += p->y;    nb_points++;  }  medx /= nb_points;  medy /= nb_points;  for (p = in->first; p; p = p->next) {    x = (int)(p->x - medx);    y = (int)(p->y - medy);    if (x + MAX/2 < 0 || y + MAX /2 < 0 || x + MAX/2 > MAX || y + MAX/2 > MAX)      mwerror(FATAL, 1, "Output image size is too small");    stat[x + MAX/2][y + MAX/2] = ALIVE;    T[x + MAX/2][y + MAX/2] = 0.0;  }    for (x = -MAX/2; x < MAX/2; x++)    for (y = -MAX/2; y < MAX/2; y++)       if (stat[x + MAX/2][y + MAX/2] == ALIVE) {	for (i = -1; i <= 1; i++)	  for (j = -1; j <= 1; j++)	    if (stat[x + i + MAX/2][y + j + MAX/2] == FAR_AWAY)	      if (x * x + y * y < (x + i) * (x + i) + (y + j) * (y + j)) {		stat[x + i + MAX/2][y + j + MAX/2] = NARROW_BAND;		T[x + i + MAX/2][y + j + MAX/2] = i * i + j * j;		e.x = x + i;		e.y = y + j;		Heap_Insert(heap, heap_size, e);	      }	          }    Marching();  if  ((out = mw_change_fimage(out ,size, size)) == NULL)   mwerror(FATAL, 1, "Not enough memory !\n");  if  ((error = mw_change_fimage(error, size, size)) == NULL)   mwerror(FATAL, 1, "Not enough memory !\n");    for (x = 1; x < MAX - 1; x++)    for (y = 1; y < MAX - 1; y++) {      error->gray[(MAX - y - 2) * size + x - 1] = (T[x][y] == INFINITY) ? 0 :  fabs(T[x][y] - sqrt(sqr(x - MAX/2) + sqr(y - MAX/2)));      sum_error += sqr(error->gray[(MAX - y - 2) * size + x - 1]);      if (*l == -1)	out->gray[(MAX - y - 2) * size + x - 1] = (T[x][y] == INFINITY) ? 0 : T[x][y];      else	if (((int)(T[x][y])) == *l) 	  out->gray[(MAX - y - 2) * size + x - 1] = 255;	else	  out->gray[(MAX - y - 2) * size + x - 1] = 0;    }  if (print_error)    printf("Total squared error: %f\n", sum_error / (size * size));  free(heap);  free(heap_size);  free(stat[0]);  free(stat);  free(T[0]);  free(T);  free(pos[0]);  free(pos);  printf("%f seconds\n", (float)clock() / CLOCKS_PER_SEC);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品久久久久久蜜臀| 成人午夜激情在线| 亚洲国产日韩一区二区| 最新日韩在线视频| 亚洲女爱视频在线| 亚洲免费毛片网站| 亚洲综合色噜噜狠狠| 亚洲一区二区三区小说| 亚洲欧美电影院| 午夜电影一区二区| 免费人成黄页网站在线一区二区 | voyeur盗摄精品| 国产91丝袜在线播放0| 成人午夜在线免费| 色诱视频网站一区| 欧美日韩国产一级片| 日韩一区二区三区电影在线观看| 欧美日韩国产首页| 精品粉嫩超白一线天av| 国产婷婷一区二区| 亚洲女人****多毛耸耸8| 亚洲图片自拍偷拍| 蜜臂av日日欢夜夜爽一区| 精品一区二区三区久久| 成人视屏免费看| 欧亚一区二区三区| 精品卡一卡二卡三卡四在线| 国产女人18水真多18精品一级做| 亚洲欧洲99久久| 亚洲成a天堂v人片| 国产乱人伦偷精品视频不卡| 91啪在线观看| 26uuu国产在线精品一区二区| 欧美国产精品劲爆| 午夜精品影院在线观看| 国产麻豆视频一区二区| 欧美最新大片在线看| 欧美成人高清电影在线| 亚洲日本乱码在线观看| 日韩主播视频在线| 成人app网站| 日韩免费一区二区| 亚洲综合激情网| 国产成人精品一区二区三区网站观看 | 午夜电影久久久| 不卡一区二区三区四区| 777欧美精品| 亚洲欧美激情视频在线观看一区二区三区 | 精品国产成人系列| 一区二区三区在线高清| 国产大陆亚洲精品国产| 日韩美女一区二区三区| 亚洲综合视频网| 91免费小视频| 国产网红主播福利一区二区| 日本网站在线观看一区二区三区| 91美女视频网站| 国产精品欧美一区喷水| 国产成人小视频| 精品国产三级电影在线观看| 日韩经典中文字幕一区| 91久久精品午夜一区二区| 三级在线观看一区二区| 欧美系列一区二区| 国产精品国产自产拍高清av | 日韩欧美一区在线| 亚洲成av人**亚洲成av**| 91小视频在线免费看| 国产情人综合久久777777| 久久99国产精品久久99| 欧美一级理论性理论a| 视频一区视频二区中文字幕| 欧美日韩午夜精品| 亚洲不卡一区二区三区| 在线视频欧美精品| 亚洲免费在线视频一区 二区| 成人avav影音| 亚洲精品国产无天堂网2021| 色婷婷久久一区二区三区麻豆| 国产精品欧美一区喷水| 91同城在线观看| 一区二区三区在线观看视频| 在线精品视频一区二区三四| 一区二区欧美在线观看| 91国产免费观看| 日韩国产在线一| 欧美va亚洲va在线观看蝴蝶网| 免费在线看成人av| 久久亚洲精华国产精华液 | 亚洲国产精品欧美一二99| 欧美午夜精品一区二区三区| 亚洲国产日韩一区二区| 日韩欧美一区二区免费| 国产呦萝稀缺另类资源| 成人欧美一区二区三区黑人麻豆| 色美美综合视频| 日产国产高清一区二区三区| 日韩精品中文字幕在线不卡尤物| 国产一区二区三区在线观看免费| 国产精品看片你懂得 | 日本va欧美va欧美va精品| 欧美精品一区二区蜜臀亚洲| 国产成人av福利| 亚洲日本电影在线| 91精品婷婷国产综合久久性色 | 日本大胆欧美人术艺术动态| 精品国产百合女同互慰| caoporen国产精品视频| 一区二区三区四区在线| 精品国产一区二区三区久久久蜜月| 国产成人免费在线观看不卡| 亚洲精品免费一二三区| 精品少妇一区二区三区| 91理论电影在线观看| 蜜臀a∨国产成人精品| 国产精品久久久久天堂| 在线播放欧美女士性生活| 懂色av一区二区夜夜嗨| 亚洲成国产人片在线观看| 国产女主播一区| 91精品国产免费| 99久久精品国产一区| 青青草国产成人av片免费| 综合久久一区二区三区| 久久久三级国产网站| 精品视频在线看| 97久久精品人人澡人人爽| 狠狠色丁香久久婷婷综合丁香| 亚洲精品国久久99热| 国产女主播一区| 精品99一区二区| 欧美日韩久久久| 色女孩综合影院| 成人a免费在线看| 国产成人综合在线观看| 麻豆精品在线看| 日韩精品一二区| 亚洲一区在线视频观看| |精品福利一区二区三区| 久久色中文字幕| 精品久久99ma| 欧美一级黄色片| 91麻豆精品国产综合久久久久久 | 婷婷国产v国产偷v亚洲高清| 精品久久人人做人人爱| 欧美日韩国产a| 欧美日韩精品一区二区在线播放| 91免费国产在线| 94色蜜桃网一区二区三区| 丁香天五香天堂综合| 国产99一区视频免费| 久久精品国产亚洲aⅴ| 美国毛片一区二区三区| 石原莉奈在线亚洲二区| 人人爽香蕉精品| 蜜桃视频一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 美女www一区二区| 国产在线播放一区二区三区 | 亚洲美女免费视频| 亚洲激情网站免费观看| 亚洲综合色区另类av| 天堂在线一区二区| 久久丁香综合五月国产三级网站| 韩日精品视频一区| 国产精品正在播放| 成人av网站在线| 一本到不卡精品视频在线观看| 欧洲视频一区二区| 91精品久久久久久久91蜜桃| 欧美大片顶级少妇| 国产精品二三区| 亚洲一区二区三区中文字幕在线| 日韩精品三区四区| 国产一区二区在线看| 99国产精品一区| 8v天堂国产在线一区二区| 精品日产卡一卡二卡麻豆| 国产欧美一区二区三区鸳鸯浴| 亚洲人一二三区| 美女在线一区二区| 国产成人av资源| 欧美日韩国产片| 亚洲国产成人午夜在线一区| 亚洲一区二区三区不卡国产欧美| 视频一区欧美日韩| 国产成人精品一区二| 欧美日韩一级黄| 国产亚洲精久久久久久| 视频在线在亚洲| va亚洲va日韩不卡在线观看| 欧美一区二区三区在线看| 中文字幕精品—区二区四季| 天天操天天综合网| 丁香六月久久综合狠狠色| 91精品福利在线一区二区三区| 亚洲欧洲日本在线| 激情综合色播激情啊| 欧美三片在线视频观看| 久久久美女艺术照精彩视频福利播放|