青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

3D幾何圖元(7)

新建網(wǎng)頁(yè) 1

 

一般來(lái)說(shuō),多邊形是由頂點(diǎn)和邊構(gòu)成的平面物體。

 

簡(jiǎn)單多邊形與復(fù)雜多邊形

簡(jiǎn)單多邊形不包含"",復(fù)雜多邊形可能包含""(圖12.26)。簡(jiǎn)單多邊形可以通過(guò)沿多邊形列出的所有頂點(diǎn)來(lái)描述(左手坐標(biāo)系中,通常以從多邊形正面看時(shí)的順時(shí)針?lè)较蛄谐鏊悬c(diǎn))。簡(jiǎn)單多邊形的使用頻率比復(fù)雜多邊形高得多。

通過(guò)添加一對(duì)"接縫"邊,能將任意復(fù)雜多邊形轉(zhuǎn)化成簡(jiǎn)單多邊形,如圖12.27所示。見(jiàn)右邊的放大圖,我們?cè)诿總€(gè)"縫"添加了兩個(gè)邊,這兩個(gè)邊實(shí)際上是重合的,放大圖中將其分開(kāi)是為了讓你看得更清楚。當(dāng)我們考慮到繞多邊形的邊的順序時(shí),這兩個(gè)接縫邊的方向是相反的。

 

自相交多邊形

大多數(shù)簡(jiǎn)單多邊形的邊不相交,如果有的邊相交了,那么這個(gè)多邊形叫做自相交多邊形。一個(gè)簡(jiǎn)單的自相交多邊形如圖12.28所示。

 

凸多邊形與凹多邊形

非自相交多邊形能進(jìn)一步細(xì)分為凸多邊形和凹多邊形。給凸多邊形下一個(gè)精確定義是一件非常困難的事,因?yàn)榇嬖诤芏嗔钊思值耐嘶问健?duì)大多數(shù)多邊形,下列常用的定義是等價(jià)的。不過(guò)對(duì)于一些退化多邊形來(lái)說(shuō),根據(jù)一種定義它是凸的,而根據(jù)另一種定義它又可能是凹的。

(1)直觀上,凸多邊形是沒(méi)有任何"凹陷處"的,而凹多邊形至少有一個(gè)頂點(diǎn)處于"凹陷處"----凹點(diǎn)。

(2)凸多邊形,任意兩頂點(diǎn)的連線(xiàn)都包含在多邊形中。但在凹多邊形中,總能找到一對(duì)頂點(diǎn),它們的連線(xiàn)有一部分在多邊形外。

(3)沿凸多邊形周邊移動(dòng)時(shí),在每個(gè)頂點(diǎn)的轉(zhuǎn)向都是相同的。對(duì)凹多邊形,一些是向右轉(zhuǎn),一些是向左轉(zhuǎn),在凹點(diǎn)的轉(zhuǎn)向是相反的(注意這僅是對(duì)非自相交多邊形來(lái)說(shuō)的)。

前面曾提到過(guò),退化多邊形會(huì)使這些相對(duì)清晰的定義變得模糊不清。例如一些多邊形有兩個(gè)連續(xù)的頂點(diǎn)重合,或這一條邊以相反的方向重復(fù)了兩次。能認(rèn)為這些多邊形是凸的嗎?實(shí)踐中,經(jīng)常用到下列凸性的定義:

(1)如果只能對(duì)凸多邊形起作用的代碼對(duì)這個(gè)多邊形也能起作用,那么它就是凸的(也就是說(shuō)如果一個(gè)定義沒(méi)有被打破就不用修正它)。

(2)如果凸性測(cè)試算法判斷它是凸的,那么它就是凸的(這是由"算法定義"解釋的)。

現(xiàn)在,讓我們忽略一些病態(tài)情況,給出一些大家意見(jiàn)都一致的凸、凹多邊形。如圖12.29所示,右上角的凹多邊形有1個(gè)凹點(diǎn),而下面的凹多邊形有5個(gè)凹點(diǎn)。

任意凹多邊形都能分解為凸多邊形片,它的基本思路是定位凹點(diǎn)并通過(guò)添加對(duì)角線(xiàn)來(lái)有系統(tǒng)地移除它們。

怎樣才能知道一個(gè)多邊形是凸的還是凹的?一種方法是檢查各頂點(diǎn)的內(nèi)角和,考慮n個(gè)頂點(diǎn)的凸多邊形,它的內(nèi)角和為(n-2)180,有兩種方法可以證明這個(gè)結(jié)論。

(1)設(shè)θi為頂點(diǎn)i的內(nèi)角,很明顯,θi 180(假設(shè)多邊形是凸的)。在每個(gè)頂點(diǎn)上,補(bǔ)角為(180-θi,對(duì)于一個(gè)封閉的凸多邊形,全部頂點(diǎn)的補(bǔ)角之和為360,有:

(2)任意n個(gè)頂點(diǎn)的凸多邊形都能分解為n-2個(gè)三角形,由經(jīng)典幾何知識(shí)可知,三角形內(nèi)角和為180。所有三角形的內(nèi)角和為(n-2)180,可以看到,這個(gè)和總是等于多邊形的內(nèi)角和。

不幸的是,凹多邊形和凸多邊形一樣,內(nèi)角和也是(n-2)180。怎樣才能進(jìn)一步判斷一個(gè)多邊形是不是凸多邊形呢?對(duì)一個(gè)凸多邊形,內(nèi)角不會(huì)大于外角。(外角不是補(bǔ)角,一對(duì)內(nèi)角外角的和等于360

所以,將每個(gè)頂點(diǎn)處較小的角(內(nèi)角或外角)相加,凸多邊形得到(n-2)180,凹多邊形則小于它。怎樣判斷哪個(gè)角較小呢?幸運(yùn)的是,有這樣一個(gè)工具 ---- 點(diǎn)乘,這種方法返回的角總是以較短的弧度來(lái)度量的。

下面的代碼說(shuō)明了怎樣用角度和來(lái)判斷多邊形是否為凸多邊形。

    Listing 12.4: 3D polygon convexity test using angle sum
   
   
// Function to determine if a polygon is convex. The polygon is
    // assumed to be planar.
    //
    // Input:
    // n Number of vertices
    // vl pointer to array of of vertices
   
bool isConvex(int n, const Vector3 vl[]) 
    {
      
// Initialize sum to 0 radians
   
  float angleSum = 0.0f;
   
      
// Go around the polygon and sum the angle at each vertex
   
  for (int i = 0 ; i < n ; ++i) 
      {
        
// Get edge vectors. We have to be careful on
        // the first and last vertices. Also, note that
        // this could be optimized considerably…
   

       Vector3 e1;
   
       
if (i == 0) 
         e1 = vl[n–1] – vl[i];
       
else
         e1 = vl[i–1] – vl[i];
   
        Vector3 e2;
   
        
if (i == n–1) 
          e2 = vl[0] – vl[i];
        
else 
          e2 = vl[i+1] – vl[i];
   
        
// Normalize and compute dot product
   
    e1.normalize();
        e2.normalize();
   
        
float dot = e1 * e2;
   
        
// Compute smaller angle using “safe” function that protects
        // against range errors which could be caused by numerical imprecision
   
    float theta = safeAcos(dot);
   
        
// Sum it up
   
    angleSum += theta;
      }
   
      
// Figure out what the sum of the angles should be, assuming
      // we are convex. Remember that pi/2 rad = 180 degrees
   
  float convexAngleSum = (float)(n – 2) * kPiOverTwo;
   
      
// Now, check if the sum of the angles is less than it should be;
      // then we’re concave. We give a slight tolerance for numerical imprecision
   
  if (angleSum < convexAngleSum – (float)n * 0.0001f) 
      {
        
// We’re concave
   
    return false;
      }
   
      
// We’re convex, within tolerance
   
  return true;
    }

另一種檢測(cè)凸性的方法是檢測(cè)多邊形上是否有凹點(diǎn),如果一個(gè)都沒(méi)有找到,就是凸多邊形。它的基本想法是每個(gè)頂點(diǎn)的轉(zhuǎn)向應(yīng)該一致,任何轉(zhuǎn)向不一致的點(diǎn)都是凹點(diǎn)。

怎樣檢測(cè)一個(gè)點(diǎn)的轉(zhuǎn)向呢?技巧是利用邊向量的叉乘,左手坐標(biāo)系中,如果向量的轉(zhuǎn)向是順指針,它們的叉乘就會(huì)指向你。什么是指向你呢?我們從多邊形的正面看,正面由法向量指明。如果沒(méi)有提供法向量,就必須做一些計(jì)算來(lái)得到。一旦有了法向量,檢查多邊形的每個(gè)頂點(diǎn)。用相鄰的兩個(gè)邊向量計(jì)算該頂點(diǎn)的法向量,接著用多邊形的法向量和頂點(diǎn)的法向量點(diǎn)乘,檢測(cè)它們的方向是否相反。如果是(點(diǎn)乘為負(fù)),那么這個(gè)頂點(diǎn)就是一個(gè)凹點(diǎn)。

 

三角分解和扇形分解

任意多邊形都能分解為三角形。因此,所有對(duì)三角形的操作都能應(yīng)用到多邊形上。復(fù)雜、自相交、甚至簡(jiǎn)單的凹多邊形的三角分解都不是一件簡(jiǎn)單的工作。幸運(yùn)的是,簡(jiǎn)單多邊形的三角分解是一件容易的事。一種顯而易見(jiàn)的三角分解技術(shù)是選取一個(gè)點(diǎn)(稱(chēng)作第一個(gè)點(diǎn)),沿著頂點(diǎn)按"扇形"分解多邊形。給定一個(gè)有n個(gè)頂點(diǎn)的多邊形,沿多邊形列頂點(diǎn)v1...vn,能夠很容易地構(gòu)造形如{v1,vi-1, vi}n-2個(gè)三角形,見(jiàn)圖12.30

扇形三角分割會(huì)分割出一些長(zhǎng)的、較細(xì)的三角形,這在某些情況下會(huì)引起麻煩。如同計(jì)算表面的法向量一樣,數(shù)值的不精確性在度量極小的角時(shí)會(huì)造成一些問(wèn)題。

一種更加"聰明"的分解方法是:連接兩頂點(diǎn)的對(duì)角線(xiàn)將一個(gè)多邊形分解為兩部分。這時(shí),對(duì)角線(xiàn)端點(diǎn)處的兩個(gè)內(nèi)角都能分解為兩個(gè)新的內(nèi)角。因此,總共產(chǎn)生了4個(gè)新內(nèi)角。為了分解多邊形,選擇能使這4個(gè)新內(nèi)角中最小的角最大化的對(duì)角線(xiàn),用這條對(duì)角線(xiàn)將多邊形分為兩個(gè)。對(duì)分割后的每一部分都遞歸應(yīng)用這個(gè)過(guò)程直到剩下的都是三角形。

這個(gè)方法產(chǎn)生較少的細(xì)三角形,但在實(shí)踐中,它過(guò)于復(fù)雜。根據(jù)幾何學(xué)和應(yīng)用目的,扇形分解已經(jīng)足夠了(并且簡(jiǎn)單得多)。

posted on 2008-02-25 17:51 lovedday 閱讀(1406) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(lèi)(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产欧美亚州国产日韩mv天天看完整| 黑人一区二区| 午夜精品999| 亚洲主播在线观看| 亚洲一区二区三区影院| 午夜电影亚洲| 久久亚洲欧美国产精品乐播| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美韩日一区| 国产精品成人观看视频免费 | 久久久夜夜夜| 欧美丰满少妇xxxbbb| 欧美日韩亚洲一区二区三区在线| 国产精品日韩欧美一区| 国外成人在线视频| 亚洲精品美女在线观看| 亚洲女人天堂av| 免费成人高清视频| 正在播放亚洲一区| 久久综合色8888| 国产精品大片wwwwww| 激情伊人五月天久久综合| 亚洲毛片av在线| 久久久综合精品| 99精品久久免费看蜜臀剧情介绍| 欧美中文在线观看| 欧美亚洲一区二区三区| 久久激五月天综合精品| 欧美成ee人免费视频| 国产精品裸体一区二区三区| 黄色成人在线| 亚洲欧美视频一区二区三区| 男人插女人欧美| 午夜精品久久久久久久99热浪潮 | 久久国产福利| 国产精品扒开腿做爽爽爽软件| 国模私拍一区二区三区| 一本色道久久综合一区| 美国成人直播| 亚洲欧美一区二区激情| 欧美激情aⅴ一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区| 1769国内精品视频在线播放| 久久国产精品久久久久久| 日韩视频免费观看高清在线视频| 久久久国产精品一区二区中文| 国产精品久久看| 亚洲图中文字幕| 亚洲精品国偷自产在线99热| 另类专区欧美制服同性| 韩国成人福利片在线播放| 欧美有码在线观看视频| 亚洲一区二区三区乱码aⅴ| 欧美日韩亚洲国产精品| 亚洲久久一区二区| 亚洲国产精品va| 欧美大片免费久久精品三p | 欧美日韩视频在线一区二区| 亚洲精品韩国| 亚洲国产欧美一区| 蜜桃伊人久久| 在线精品福利| 欧美好骚综合网| 牛牛影视久久网| 日韩午夜在线| 99精品欧美| 国产精品激情电影| 欧美一区二区成人6969| 欧美一级专区免费大片| 国内免费精品永久在线视频| 久久视频一区| 麻豆成人综合网| 99国产精品99久久久久久粉嫩| 欧美激情视频一区二区三区在线播放 | 一区二区三区四区国产精品| 欧美一级二区| 国产伦精品一区二区三区四区免费 | 亚洲精品久久久久久下一站| 亚洲国产欧美一区二区三区丁香婷| 噜噜噜91成人网| 99视频热这里只有精品免费| 99国产精品国产精品久久| 欧美高清视频一区二区三区在线观看| 亚洲动漫精品| 一片黄亚洲嫩模| 国产精品永久免费观看| 免费毛片一区二区三区久久久| 欧美风情在线| 久久av一区二区| 欧美sm视频| 午夜一区二区三视频在线观看| 午夜久久久久久| 亚洲国产视频a| 亚洲在线一区| 亚洲激情黄色| 亚洲综合色在线| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲精品一区二区三区樱花 | 性欧美精品高清| 欲香欲色天天天综合和网| 亚洲免费成人av电影| 国模吧视频一区| 一区二区免费在线视频| 在线日韩欧美视频| 亚洲女优在线| 一区二区高清| 久久久精品国产免大香伊| 亚洲一区二区三区在线看| 久久精品免费播放| 香蕉久久夜色精品国产| 欧美精品v国产精品v日韩精品| 欧美在线影院在线视频| 欧美伦理91i| 欧美激情一区二区三区成人| 国产一区二区三区成人欧美日韩在线观看| 亚洲国产综合在线看不卡| 在线观看精品视频| 欧美一区二区日韩| 午夜精品一区二区三区在线| 欧美日韩国产二区| 亚洲国产精品专区久久| 在线免费日韩片| 久久精品国产96久久久香蕉| 欧美在线91| 国产精品推荐精品| 亚洲免费一区二区| 欧美一区二区三区日韩| 国产精品久久久久久久电影| 日韩视频一区二区三区在线播放免费观看 | 性欧美大战久久久久久久久| 欧美激情视频免费观看| 乱码第一页成人| 国产一区二区三区在线播放免费观看| 制服丝袜激情欧洲亚洲| 亚洲小视频在线| 欧美日韩中文字幕精品| 亚洲激情成人在线| 99视频精品全国免费| 欧美人体xx| 在线亚洲美日韩| 欧美一区二区在线视频| 国产一区av在线| 久久久久久久高潮| 麻豆成人在线| 91久久精品久久国产性色也91| 久久婷婷色综合| 亚洲国产另类久久精品| 99精品国产热久久91蜜凸| 欧美人成在线视频| 亚洲无线视频| 久久久久久久综合日本| 伊人久久av导航| 欧美成人高清| 一区二区三区国产精品| 香蕉乱码成人久久天堂爱免费 | 欧美体内she精视频在线观看| 亚洲精品一区二区三区av| 亚洲无毛电影| 国产农村妇女精品一二区| 久久成人精品电影| 欧美成人精品高清在线播放| 亚洲精品一区二区三区在线观看 | 国产精品久久久999| 亚洲欧美日韩视频一区| 美女网站在线免费欧美精品| 亚洲精品中文字| 国产精品亚洲一区二区三区在线| 久久成人人人人精品欧| 亚洲欧洲一二三| 久久岛国电影| 亚洲精品色图| 国产欧美日韩在线观看| 欧美91视频| 欧美一区二区三区电影在线观看| 欧美激情亚洲综合一区| 午夜欧美精品| 欧美精品一区二区在线播放| 欧美亚洲免费电影| 99re6这里只有精品视频在线观看| 久久久999成人| 亚洲影院免费| 亚洲人久久久| 国产欧美综合在线| 欧美三级电影网| 久热精品视频在线观看一区| 在线视频精品一| 亚洲自拍偷拍麻豆| 亚洲国产午夜| 久久国产精品一区二区三区四区| 亚洲免费av电影| 影音先锋在线一区| 国产伦精品一区二区三区视频孕妇| 欧美~级网站不卡| 欧美一区二区福利在线| 99热免费精品| 亚洲国产精品欧美一二99| 久久久久九九九| 欧美在线国产精品| 亚洲一区观看| 亚洲图片自拍偷拍|