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

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

?? trmonot.cpp

?? Windows上的MUD客戶端程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	      traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
	    }
	}
      else
	{
	  retval = SP_NOSPLIT;	/* Just traverse all neighbours */
	  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
	  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
	  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
	  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
	}
    }
  
  else if ((t->u0 > 0) && (t->u1 > 0)) 
    {
      if ((t->d0 > 0) && (t->d1 > 0)) /* downward + upward cusps */
	{
	  v0 = tr[t->d1].lseg;
	  v1 = tr[t->u0].rseg;
	  retval = SP_2UP_2DN;
	  if (((dir == TR_FROM_DN) && (t->d1 == from)) ||
	      ((dir == TR_FROM_UP) && (t->u1 == from)))
	    {
	      do_switch = TRUE;
	      mnew = make_new_monotone_poly(mcur, v1, v0);
	      traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
	      traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
	      traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
	      traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
	    }
	  else
	    {
	      mnew = make_new_monotone_poly(mcur, v0, v1);
	      traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
	      traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
	      traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
	      traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);	      
	    }
	}
      else			/* only downward cusp */
	{
	  if (_equal_to(&t->lo, &seg[t->lseg].v1))
	    {
	      v0 = tr[t->u0].rseg;
	      v1 = MODULO_NEXT(t->lseg + 1, global.nseg);
	      retval = SP_2UP_LEFT;
	      if ((dir == TR_FROM_UP) && (t->u0 == from))
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		}
	    }
	  else
	    {
	      v0 = t->rseg;
	      v1 = tr[t->u0].rseg;	
	      retval = SP_2UP_RIGHT;
	      if ((dir == TR_FROM_UP) && (t->u1 == from))
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		}
	    }
	}
    }
  else if ((t->u0 > 0) || (t->u1 > 0)) /* no downward cusp */
    {
      if ((t->d0 > 0) && (t->d1 > 0)) /* only upward cusp */
	{
	  if (_equal_to(&t->hi, &seg[t->lseg].v0))
	    {
	      v0 = tr[t->d1].lseg;
	      v1 = t->lseg;
	      retval = SP_2DN_LEFT;
	      if (!((dir == TR_FROM_DN) && (t->d0 == from)))
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);	      
		}
	    }
	  else
	    {
	      v0 = tr[t->d1].lseg;
	      v1 = MODULO_NEXT(t->rseg + 1, global.nseg);
	      retval = SP_2DN_RIGHT;	    
	      if ((dir == TR_FROM_DN) && (t->d1 == from))
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
		}
	    }
	}
      else			/* no cusp */
	{
	  if (_equal_to(&t->hi, &seg[t->lseg].v0) &&
	      _equal_to(&t->lo, &seg[t->rseg].v0))
	    {
	      v0 = t->rseg;
	      v1 = t->lseg;
	      retval = SP_SIMPLE_LRDN;
	      if (dir == TR_FROM_UP)
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		}
	    }
	  else if (_equal_to(&t->hi, &seg[t->rseg].v1) &&
		   _equal_to(&t->lo, &seg[t->lseg].v1))
	    {
	      v0 = MODULO_NEXT(t->rseg + 1, global.nseg);
	      v1 = MODULO_NEXT(t->lseg + 1, global.nseg);
	      retval = SP_SIMPLE_LRUP;
	      if (dir == TR_FROM_UP)
		{
		  do_switch = TRUE;
		  mnew = make_new_monotone_poly(mcur, v1, v0);
		  traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->d0, trnum, TR_FROM_UP);
		}
	      else
		{
		  mnew = make_new_monotone_poly(mcur, v0, v1);
		  traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);
		  traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
		  traverse_polygon(mnew, t->u0, trnum, TR_FROM_DN);
		  traverse_polygon(mnew, t->u1, trnum, TR_FROM_DN);
		}
	    }
	  else			/* no split possible */
	    {
	      retval = SP_NOSPLIT;
	      traverse_polygon(mcur, t->u0, trnum, TR_FROM_DN);
	      traverse_polygon(mcur, t->d0, trnum, TR_FROM_UP);
	      traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
	      traverse_polygon(mcur, t->d1, trnum, TR_FROM_UP);	      	      
	    }
	}
    }

  return retval;
}


int triangulate_monotone_polygons(int nmonpoly, int op[][3])
{
  register int i;
  point_t ymax, ymin;
  int p, vfirst, posmax, posmin, v;
  int vcount;

#ifdef DEBUG
  for (i = 0; i < nmonpoly; i++)
    {
      TRACE("\n\nPolygon %d: ", i);
      vfirst = mchain[mon[i]].vnum;
      p = mchain[mon[i]].next;
      TRACE("%d ", mchain[mon[i]].vnum);
      while (mchain[p].vnum != vfirst)
	{
	  TRACE("%d ", mchain[p].vnum);
	  p = mchain[p].next;
	}
    }
  TRACE("\n");
#endif

  op_idx = 0;
  for (i = 0; i < nmonpoly; i++)
    {
      vcount = 1;
      vfirst = mchain[mon[i]].vnum;
      ymax = ymin = vert[vfirst].pt;
      posmax = posmin = mon[i];
      p = mchain[mon[i]].next;
      while ((v = mchain[p].vnum) != vfirst)
	{
	  if (_greater_than(&vert[v].pt, &ymax))
	    {
	      ymax = vert[v].pt;
	      posmax = p;
	    }
	  if (_less_than(&vert[v].pt, &ymin))
	    {
	      ymin = vert[v].pt;
	      posmin = p;
	    }
	  p = mchain[p].next;
	  vcount++;
	}
      
      if (vcount == 3)		/* already a triangle */
	{
	  op[op_idx][0] = mchain[p].vnum;
	  op[op_idx][1] = mchain[mchain[p].next].vnum;
	  op[op_idx][2] = mchain[mchain[p].prev].vnum;
	  op_idx++;
	}
      else			/* triangulate the polygon */
	{
	  v = mchain[mchain[posmax].next].vnum;
	  if (_equal_to(&vert[v].pt, &ymin))
	    {			/* LHS is a single line */
	      triangulate_single_polygon(posmax, TRI_LHS, op);
	    }
	  else
	    triangulate_single_polygon(posmax, TRI_RHS, op);
	}
    }
  
#ifdef DEBUG
  for (i = 0; i < (global.nseg - 2); i++)
    TRACE("tri #%d: (%d, %d, %d)\n", i, op[i][0], op[i][1],
	   op[i][2]);
#endif
	return 0;
}


/* A greedy corner-cutting algorithm to triangulate a y-monotone 
 * polygon in O(n) time.
 * Joseph O-Rourke, Computational Geometry in C.
 */
int triangulate_single_polygon(int posmax, int side, int op[][3])
{
  register int v;
  int rc[SEGSIZE], ri = 0;	/* reflex chain */
  int endv, tmp, vpos;
  
  if (side == TRI_RHS)		/* RHS segment is a single segment */
    {
      rc[0] = mchain[posmax].vnum;
      tmp = mchain[posmax].next;
      rc[1] = mchain[tmp].vnum;
      ri = 1;
      
      vpos = mchain[tmp].next;
      v = mchain[vpos].vnum;
      
      if ((endv = mchain[mchain[posmax].prev].vnum) == 0)
	endv = global.nseg;
    }
  else				/* LHS is a single segment */
    {
      tmp = mchain[posmax].next;
      rc[0] = mchain[tmp].vnum;
      tmp = mchain[tmp].next;
      rc[1] = mchain[tmp].vnum;
      ri = 1;

      vpos = mchain[tmp].next;
      v = mchain[vpos].vnum;

      endv = mchain[posmax].vnum;
    }
  
  while ((v != endv) || (ri > 1))
    {
      if (ri > 0)		/* reflex chain is non-empty */
	{
	  if (CROSS(vert[v].pt, vert[rc[ri - 1]].pt, 
		    vert[rc[ri]].pt) > 0)
	    {			/* convex corner: cut if off */
	      op[op_idx][0] = rc[ri - 1];
	      op[op_idx][1] = rc[ri];
	      op[op_idx][2] = v;
	      op_idx++;	     
	      ri--;
	    }
	  else		/* non-convex */
	    {		/* add v to the chain */
	      ri++;
	      rc[ri] = v;
	      vpos = mchain[vpos].next;
	      v = mchain[vpos].vnum;
	    }
	}
      else			/* reflex-chain empty: add v to the */
	{			/* reflex chain and advance it  */
	  rc[++ri] = v;
	  vpos = mchain[vpos].next;
	  v = mchain[vpos].vnum;
	}
    } /* end-while */
  
  /* reached the bottom vertex. Add in the triangle formed */
  op[op_idx][0] = rc[ri - 1];
  op[op_idx][1] = rc[ri];
  op[op_idx][2] = v;
  op_idx++;	     
  ri--;
  
  return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人在线观看| 一区二区三区精品在线观看| 99这里都是精品| 日韩影院免费视频| 国产精品成人免费| 日韩免费电影网站| 91黄色免费网站| 国产精品一区二区在线看| 亚洲一区二区三区三| 久久综合av免费| 91麻豆精品国产91久久久久久久久| 国产91在线|亚洲| 蜜桃久久久久久| 亚洲黄色性网站| 1区2区3区国产精品| 久久婷婷综合激情| 欧美一区二区三区在线| 国产亚洲一二三区| 欧美一区二区三区在线看| 欧美性三三影院| 91天堂素人约啪| 国产精品911| 国内精品国产成人国产三级粉色| 亚洲亚洲人成综合网络| 亚洲免费大片在线观看| 国产精品人成在线观看免费| 精品国偷自产国产一区| 欧美一区二区在线免费播放| 欧美又粗又大又爽| 一本到不卡精品视频在线观看| 国产成人一级电影| 精品伊人久久久久7777人| 日韩精品国产欧美| 婷婷综合在线观看| 日本视频免费一区| 久久国产精品第一页| 日韩国产欧美在线观看| 性做久久久久久| 五月综合激情日本mⅴ| 亚洲一区二区三区免费视频| 亚洲精品国久久99热| 亚洲欧美日韩人成在线播放| 亚洲色图第一区| 亚洲精品伦理在线| 亚洲自拍偷拍综合| 午夜精品久久久久久不卡8050| 一区二区三区高清不卡| 一区二区三区四区视频精品免费| 亚洲欧美视频在线观看| 一区二区三区四区高清精品免费观看 | 国产日产亚洲精品系列| 久久久www免费人成精品| 久久精品一区八戒影视| 国产精品色一区二区三区| 国产精品污污网站在线观看| 国产精品理论在线观看| 亚洲免费视频成人| 丝袜美腿亚洲一区| 韩国av一区二区三区在线观看| 国产一区二区0| 成人av小说网| 欧美日韩亚洲丝袜制服| 日韩欧美一区二区在线视频| 2023国产一二三区日本精品2022| 亚洲精品一区二区三区影院| 国产亚洲一本大道中文在线| 亚洲女爱视频在线| 婷婷六月综合亚洲| 国产美女在线观看一区| 99久久精品免费看国产 | 99久久99久久精品免费观看| 一本大道久久a久久精二百| 在线观看日韩电影| 欧美精品一区二区三区蜜臀| 中文字幕精品一区| 亚洲午夜电影网| 国内欧美视频一区二区| 91在线观看成人| 91精品国产品国语在线不卡| 久久蜜桃一区二区| 亚洲午夜久久久久中文字幕久| 麻豆精品国产91久久久久久| 成人一区二区三区| 555夜色666亚洲国产免| 国产亚洲综合性久久久影院| 亚洲免费观看在线视频| 久久福利视频一区二区| 一本色道**综合亚洲精品蜜桃冫| 欧美一区二区福利在线| 国产精品视频九色porn| 日韩va欧美va亚洲va久久| 成人免费福利片| 欧美一区二区免费| 一区二区三区资源| 国产在线一区观看| 欧美日韩高清一区二区不卡 | 中文字幕中文字幕中文字幕亚洲无线| 亚洲综合av网| av在线一区二区三区| 日韩欧美一级二级| 亚洲在线视频网站| 懂色av一区二区在线播放| 91精品国产麻豆| 亚洲欧美aⅴ...| 国产真实乱子伦精品视频| 3d动漫精品啪啪一区二区竹菊| 国产精品色噜噜| 国产中文一区二区三区| 日韩一卡二卡三卡四卡| 一级特黄大欧美久久久| 丁香五精品蜜臀久久久久99网站 | 秋霞电影网一区二区| 色婷婷久久一区二区三区麻豆| 久久综合色之久久综合| 日韩成人精品在线| 欧美日韩一区二区三区高清| 最新日韩av在线| 国产高清精品在线| 精品久久一二三区| 免费观看在线综合色| 欧美怡红院视频| 亚洲欧美另类小说| 99久久精品国产一区| 国产欧美精品一区二区色综合 | 一本色道久久综合精品竹菊| 国产视频一区二区在线| 免费在线成人网| 91精品国产黑色紧身裤美女| 亚洲一区二区欧美日韩| 91首页免费视频| 亚洲日本中文字幕区| 99视频在线观看一区三区| 欧美国产一区二区在线观看| 国产乱理伦片在线观看夜一区| 欧美成人精品1314www| 免费精品视频最新在线| 日韩无一区二区| 久久国产精品99久久人人澡| 日韩视频在线你懂得| 蜜桃视频一区二区| 精品成人佐山爱一区二区| 久久99日本精品| 久久综合狠狠综合| 国产成a人亚洲| 国产精品美女久久久久久久久久久| 国产超碰在线一区| 国产精品乱码人人做人人爱| 不卡一卡二卡三乱码免费网站| 日本一区二区视频在线| 99在线精品视频| 亚洲午夜影视影院在线观看| 欧美三级日韩在线| 日韩成人dvd| 欧美va亚洲va| 国产99久久久国产精品| 成人欧美一区二区三区在线播放| 91一区一区三区| 亚洲国产精品久久人人爱| 欧美日本一区二区在线观看| 秋霞成人午夜伦在线观看| 久久久美女艺术照精彩视频福利播放| 国产xxx精品视频大全| 亚洲色图另类专区| 91精品国产高清一区二区三区| 寂寞少妇一区二区三区| 中文无字幕一区二区三区| 色网站国产精品| 蜜芽一区二区三区| 国产精品欧美一级免费| 欧美在线观看视频一区二区三区| 蜜臀久久99精品久久久画质超高清 | 国产精品欧美一级免费| 欧美日韩一区国产| 韩国午夜理伦三级不卡影院| 91精品国产高清一区二区三区蜜臀 | 精品sm捆绑视频| 99久久夜色精品国产网站| 亚洲美女一区二区三区| 欧美日韩一级二级三级| 国产伦精品一区二区三区视频青涩| 久久久久久久电影| 91丝袜国产在线播放| 中文字幕在线一区免费| 色婷婷精品大视频在线蜜桃视频| 亚洲午夜视频在线观看| 精品国产区一区| 欧美亚洲综合另类| 久久精品99国产国产精| 中文字幕在线一区免费| 日韩精品影音先锋| www.日本不卡| 天天免费综合色| 亚洲欧洲在线观看av| 欧美久久久久久久久久| 国产精品一二三四| 图片区日韩欧美亚洲| 久久久久9999亚洲精品| 在线国产亚洲欧美| 激情六月婷婷久久| 丝袜诱惑亚洲看片|