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

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

?? trmonot.cpp

?? Windows上的MUD客戶(hù)端程序
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*----------------------------------------------------------------------------
                        _                              _ _       
        /\             | |                            | (_)      
       /  \   _ __   __| |_ __ ___  _ __ ___   ___  __| |_  __ _ 
      / /\ \ | '_ \ / _` | '__/ _ \| '_ ` _ \ / _ \/ _` | |/ _` |
     / ____ \| | | | (_| | | | (_) | | | | | |  __/ (_| | | (_| |
    /_/    \_\_| |_|\__,_|_|  \___/|_| |_| |_|\___|\__,_|_|\__,_|

    The contents of this file are subject to the Andromedia Public
	License Version 1.0 (the "License"); you may not use this file
	except in compliance with the License. You may obtain a copy of
	the License at http://www.andromedia.com/APL/

    Software distributed under the License is distributed on an
	"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
	implied. See the License for the specific language governing
	rights and limitations under the License.

    The Original Code is Pueblo client code, released November 4, 1998.

    The Initial Developer of the Original Code is Andromedia Incorporated.
	Portions created by Andromedia are Copyright (C) 1998 Andromedia
	Incorporated.  All Rights Reserved.

	Andromedia Incorporated                         415.365.6700
	818 Mission Street - 2nd Floor                  415.365.6701 fax
	San Francisco, CA 94103

    Contributor(s):
	--------------------------------------------------------------------------
	   Chaco team:  Dan Greening, Glenn Crocker, Jim Doubek,
	                Coyote Lussier, Pritham Shetty.

					Wrote and designed original codebase.

------------------------------------------------------------------------------

----------------------------------------------------------------------------*/

#include <TrBasic.h>
#include <math.h>
#include <memory.h>

#define CROSS_SINE(v0, v1) ((v0).x * (v1).y - (v1).x * (v0).y)
#define LENGTH(v0) (sqrt((v0).x * (v0).x + (v0).y * (v0).y))

static monchain_t mchain[TRSIZE]; /* Table to hold all the monotone */
				  /* polygons . Each monotone polygon */
				  /* is a circularly linked list */

static vertexchain_t vert[SEGSIZE]; /* chain init. information. This */
				    /* is used to decide which */
				    /* monotone polygon to split if */
				    /* there are several other */
				    /* polygons touching at the same */
				    /* vertex  */

static int mon[SEGSIZE];	/* contains position of any vertex in */
				/* the monotone chain for the polygon */
static int visited[TRSIZE];
static int chain_idx, op_idx, mon_idx;

/* Function returns TRUE if the trapezoid lies inside the polygon */
static int inside_polygon(trap_t *t)
{
  int rseg = t->rseg;

  if (t->state == ST_INVALID)
    return 0;

  if ((t->lseg <= 0) || (t->rseg <= 0))
    return 0;
  
  if (((t->u0 <= 0) && (t->u1 <= 0)) || 
      ((t->d0 <= 0) && (t->d1 <= 0))) /* triangle */
    return (_greater_than(&seg[rseg].v1, &seg[rseg].v0));
  
  return 0;
}


/* return a new mon structure from the table */
static int newmon()
{
  return ++mon_idx;
}


/* return a new chain element from the table */
static int new_chain_element()
{
  return ++chain_idx;
}


static double get_angle(point_t *vp0, point_t *vpnext, point_t *vp1)
{
  point_t v0, v1;
  
  v0.x = vpnext->x - vp0->x;
  v0.y = vpnext->y - vp0->y;

  v1.x = vp1->x - vp0->x;
  v1.y = vp1->y - vp0->y;

  if (CROSS_SINE(v0, v1) >= 0)	/* sine is positive */
    return DOT(v0, v1)/LENGTH(v0)/LENGTH(v1);
  else
    return (-1.0 * DOT(v0, v1)/LENGTH(v0)/LENGTH(v1) - 2);
}


/* (v0, v1) is the new diagonal to be added to the polygon. Find which */
/* chain to use and return the positions of v0 and v1 in p and q */ 
static int get_vertex_positions(int v0, int v1, int *ip, int *iq)
{
  vertexchain_t *vp0, *vp1;
  register int i;
  double angle, temp;
  int tp, tq;

  vp0 = &vert[v0];
  vp1 = &vert[v1];
  
  /* p is identified as follows. Scan from (v0, v1) rightwards till */
  /* you hit the first segment starting from v0. That chain is the */
  /* chain of our interest */
  
  angle = -4.0;
  for (i = 0; i < 4; i++)
    {
      if (vp0->vnext[i] <= 0)
	continue;
      if ((temp = get_angle(&vp0->pt, &(vert[vp0->vnext[i]].pt), 
			    &vp1->pt)) > angle)
	{
	  angle = temp;
	  tp = i;
	}
    }

  *ip = tp;

  /* Do similar actions for q */

  angle = -4.0;
  for (i = 0; i < 4; i++)
    {
      if (vp1->vnext[i] <= 0)
	continue;      
      if ((temp = get_angle(&vp1->pt, &(vert[vp1->vnext[i]].pt), 
			    &vp0->pt)) > angle)
	{
	  angle = temp;
	  tq = i;
	}
    }

  *iq = tq;

  return 0;
}

  
/* v0 and v1 are specified in anti-clockwise order with respect to 
 * the current monotone polygon mcur. Split the current polygon into 
 * two polygons using the diagonal (v0, v1) 
 */
static int make_new_monotone_poly(int mcur, int v0, int v1)
{
  int p, q, ip, iq;
  int mnew = newmon();
  int i, j, nf0, nf1;
  vertexchain_t *vp0, *vp1;
  
  vp0 = &vert[v0];
  vp1 = &vert[v1];

  get_vertex_positions(v0, v1, &ip, &iq);

  if ((ip > 10000) || (ip < 0)) {
  	TRACE("Bad ip value in make_new_monotone_poly\n");
  } 
  if ((iq > 10000) || (iq < 0)) {
  	TRACE("Bad iq value in make_new_monotone_poly\n");
  }

  p = vp0->vpos[ip];
  q = vp1->vpos[iq];

  /* At this stage, we have got the positions of v0 and v1 in the */
  /* desired chain. Now modify the linked lists */

  i = new_chain_element();	/* for the new list */
  j = new_chain_element();

  mchain[i].vnum = v0;
  mchain[j].vnum = v1;

  mchain[i].next = mchain[p].next;
  mchain[mchain[p].next].prev = i;
  mchain[i].prev = j;
  mchain[j].next = i;
  mchain[j].prev = mchain[q].prev;
  mchain[mchain[q].prev].next = j;

  mchain[p].next = q;
  mchain[q].prev = p;

  nf0 = vp0->nextfree;
  nf1 = vp1->nextfree;

  vp0->vnext[ip] = v1;

  vp0->vpos[nf0] = i;
  vp0->vnext[nf0] = mchain[mchain[i].next].vnum;
  vp1->vpos[nf1] = j;
  vp1->vnext[nf1] = v0;

  vp0->nextfree++;
  vp1->nextfree++;

#ifdef DEBUG
  TRACE("make_poly: mcur = %d, (v0, v1) = (%d, %d)\n", 
	  mcur, v0, v1);
  TRACE("next posns = (p, q) = (%d, %d)\n", p, q);
#endif

  mon[mcur] = p;
  mon[mnew] = i;
  return mnew;
}

/* Main routine to get monotone polygons from the trapezoidation of 
 * the polygon.
 */

int monotonate_trapezoids(int n)
{
  register int i;
  int tr_start;

  memset((void *)vert, 0, sizeof(vert));
  memset((void *)visited, 0, sizeof(visited));
  memset((void *)mchain, 0, sizeof(mchain));
  memset((void *)mon, 0, sizeof(mon));
  
  /* First locate a trapezoid which lies inside the polygon */
  /* and which is triangular */
  for (i = 0; i < TRSIZE; i++)
    if (inside_polygon(&tr[i]))
      break;
  tr_start = i;
  
  /* Initialise the mon data-structure and start spanning all the */
  /* trapezoids within the polygon */

  for (i = 1; i <= n; i++)
    {
      mchain[i].prev = i - 1;
      mchain[i].next = i + 1;
      mchain[i].vnum = i;
      vert[i].pt = seg[i].v0;
      vert[i].vnext[0] = i + 1;	/* next vertex */
      vert[i].vpos[0] = i;	/* locn. of next vertex */
      vert[i].nextfree = 1;
    }
  mchain[1].prev = n;
  mchain[n].next = 1;
  vert[n].vnext[0] = 1;
  vert[n].vpos[0] = n;
  chain_idx = n;
  mon_idx = 0;
  mon[0] = 1;			/* position of any vertex in the first */
				/* chain  */
  
  /* traverse the polygon */
  if (tr[tr_start].u0 > 0)
    traverse_polygon(0, tr_start, tr[tr_start].u0, TR_FROM_UP);
  else if (tr[tr_start].d0 > 0)
    traverse_polygon(0, tr_start, tr[tr_start].d0, TR_FROM_DN);
  
  /* return the number of polygons created */
  return newmon();
}


/* recursively visit all the trapezoids */
int traverse_polygon(int mcur, int trnum, int from, int dir)
{
  trap_t *t = &tr[trnum];
  int howsplit, mnew;
  int v0, v1, v0next, v1next;
  int retval, tmp;
  int do_switch = FALSE;

  if ((trnum <= 0) || visited[trnum])
    return 0;

  visited[trnum] = TRUE;
  
  /* We have much more information available here. */
  /* rseg: goes upwards   */
  /* lseg: goes downwards */

  /* Initially assume that dir = TR_FROM_DN (from the left) */
  /* Switch v0 and v1 if necessary afterwards */


  /* special cases for triangles with cusps at the opposite ends. */
  /* take care of this first */
  if ((t->u0 <= 0) && (t->u1 <= 0))
    {
      if ((t->d0 > 0) && (t->d1 > 0)) /* downward opening triangle */
	{
	  v0 = tr[t->d1].lseg;
	  v1 = t->lseg;
	  if (from == t->d1)
	    {
	      do_switch = TRUE;
	      mnew = make_new_monotone_poly(mcur, v1, v0);
	      traverse_polygon(mcur, 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->d0, trnum, TR_FROM_UP);
	      traverse_polygon(mnew, t->d1, trnum, TR_FROM_UP);
	    }
	}
      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->d0 <= 0) && (t->d1 <= 0))
    {
      if ((t->u0 > 0) && (t->u1 > 0)) /* upward opening triangle */
	{
	  v0 = t->rseg;
	  v1 = tr[t->u0].rseg;
	  if (from == t->u1)
	    {
	      do_switch = TRUE;
	      mnew = make_new_monotone_poly(mcur, v1, v0);
	      traverse_polygon(mcur, t->u1, trnum, TR_FROM_DN);
	      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);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美剧情电影在线观看完整版免费励志电影| www.亚洲色图| 五月婷婷久久综合| 亚洲国产色一区| 一区二区三区免费网站| 亚洲欧美视频在线观看| 中文字幕在线观看不卡| 欧美极品xxx| 欧美激情在线一区二区三区| 久久久亚洲午夜电影| 久久影院电视剧免费观看| 精品国产青草久久久久福利| 精品国产三级电影在线观看| 久久精品这里都是精品| 国产日韩欧美综合一区| 日本一区二区成人| 亚洲三级在线播放| 亚洲一二三四久久| 亚洲成人av电影在线| 日日摸夜夜添夜夜添精品视频| 亚洲福利视频三区| 日本免费新一区视频| 精品一区二区久久久| 国产一区二区三区在线观看免费视频| 国产乱人伦偷精品视频免下载| 国产成人亚洲综合色影视| www.欧美精品一二区| 日本高清无吗v一区| 欧美日韩在线观看一区二区| 欧美一区二区三区视频免费播放| 日韩视频在线你懂得| 久久色.com| 一区在线播放视频| 亚洲va欧美va天堂v国产综合| 麻豆国产欧美日韩综合精品二区 | 亚洲图片另类小说| 亚洲免费观看高清| 日本不卡的三区四区五区| 国产综合色视频| 成人黄色网址在线观看| 欧美亚洲日本国产| 欧美不卡视频一区| 亚洲特黄一级片| 日韩va欧美va亚洲va久久| 国产一区二区三区在线观看免费| 一本一道久久a久久精品| 在线不卡的av| 国产午夜精品一区二区三区视频| 亚洲精品你懂的| 蜜臀av性久久久久蜜臀aⅴ | 欧美最新大片在线看 | 亚洲小说春色综合另类电影| 麻豆久久一区二区| 本田岬高潮一区二区三区| 6080国产精品一区二区| 国产精品女主播av| 免费成人美女在线观看.| 91在线看国产| 久久在线观看免费| 亚洲在线观看免费视频| 国产福利精品导航| 欧美二区三区的天堂| 国产精品理论在线观看| 秋霞午夜鲁丝一区二区老狼| 国产**成人网毛片九色| 欧美日韩精品欧美日韩精品一 | 精油按摩中文字幕久久| 色婷婷综合久色| 久久久www成人免费无遮挡大片| 亚洲综合色网站| 国产麻豆欧美日韩一区| 在线电影国产精品| 亚洲免费资源在线播放| 国产福利一区二区三区视频| 欧美一区二区免费视频| 亚洲综合视频在线| 91在线观看污| 中文字幕+乱码+中文字幕一区| 免费久久99精品国产| 91福利视频在线| 中文字幕制服丝袜一区二区三区| 麻豆国产欧美一区二区三区| 中文字幕不卡的av| 国产一区二区在线视频| 国产欧美一区二区三区鸳鸯浴| 亚洲三级理论片| 色欧美片视频在线观看在线视频| 91麻豆精品国产自产在线 | 欧美美女bb生活片| 日韩久久一区二区| 欧美在线观看视频一区二区| 久久女同精品一区二区| 麻豆成人久久精品二区三区红| 久久久精品国产免大香伊| 中文字幕欧美区| 国产又粗又猛又爽又黄91精品| 在线成人小视频| 天天色 色综合| 欧美日韩一级视频| 亚洲高清视频的网址| 在线亚洲免费视频| 一区二区成人在线视频| 在线免费不卡电影| 一区二区三区美女视频| 色久综合一二码| av在线播放不卡| 国产精品午夜在线| 成人v精品蜜桃久久一区| 中文字幕乱码一区二区免费| 国产成人精品综合在线观看 | 亚洲国产成人私人影院tom| 国产精品综合av一区二区国产馆| 26uuu久久天堂性欧美| 另类人妖一区二区av| 日韩精品在线看片z| 久久se精品一区精品二区| 精品国产自在久精品国产| 激情综合网av| 国产日韩欧美一区二区三区综合| 国产成人日日夜夜| 一区精品在线播放| 91免费在线视频观看| 亚洲色图第一区| 欧美色网站导航| 日韩在线a电影| 日韩美女在线视频| 国产美女视频一区| 国产精品国产三级国产专播品爱网 | 26uuu国产电影一区二区| 国产精品一区二区男女羞羞无遮挡| 久久蜜臀精品av| 99久久精品国产导航| 亚洲一二三四久久| www一区二区| 成人免费视频免费观看| 玉米视频成人免费看| 91麻豆精品国产综合久久久久久| 狠狠色丁香婷婷综合| 国产精品美女www爽爽爽| 91官网在线免费观看| 裸体歌舞表演一区二区| 国产精品护士白丝一区av| 欧美日韩国产高清一区二区三区| 免费不卡在线视频| 日本一区二区综合亚洲| 在线免费观看日本欧美| 日韩黄色免费电影| 国产日产亚洲精品系列| 欧美性生活一区| 久久99精品一区二区三区三区| 中文字幕亚洲欧美在线不卡| 欧美日韩1区2区| 从欧美一区二区三区| 亚洲va欧美va国产va天堂影院| 久久综合精品国产一区二区三区| 色综合天天做天天爱| 美女视频黄a大片欧美| 国产精品福利影院| 91精品国产综合久久香蕉的特点| 高清国产一区二区三区| 午夜精品免费在线观看| 亚洲国产成人午夜在线一区| 4hu四虎永久在线影院成人| 成人免费三级在线| 美女性感视频久久| 亚洲欧美视频在线观看| 久久久国际精品| 欧美精品电影在线播放| av中文字幕在线不卡| 国产在线播放一区二区三区| 亚洲网友自拍偷拍| 国产精品久久久久aaaa樱花| 日韩精品一区二区在线观看| 在线影院国内精品| 丰满少妇在线播放bd日韩电影| 五月天久久比比资源色| 亚洲欧洲在线观看av| 久久天天做天天爱综合色| 在线不卡免费欧美| 91久久精品一区二区三| 成人中文字幕电影| 欧美一级二级三级蜜桃| 在线观看免费亚洲| 成人av午夜影院| 国产乱子伦视频一区二区三区| 日韩电影在线一区二区三区| 亚洲综合一区二区三区| 136国产福利精品导航| 国产亚洲成av人在线观看导航| 日韩欧美激情四射| 7777精品伊人久久久大香线蕉完整版| 91小视频免费看| a美女胸又www黄视频久久| 国产精品综合二区| 国产一区二区三区综合 | 日韩欧美激情在线| 91精品国产综合久久久久久久| 在线精品观看国产| 色噜噜狠狠色综合中国| 91免费看`日韩一区二区|