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

天行健 君子當自強而不息

3D幾何圖元(7)

新建網頁 1

 

一般來說,多邊形是由頂點和邊構成的平面物體。

 

簡單多邊形與復雜多邊形

簡單多邊形不包含"",復雜多邊形可能包含""(圖12.26)。簡單多邊形可以通過沿多邊形列出的所有頂點來描述(左手坐標系中,通常以從多邊形正面看時的順時針方向列出所有點)。簡單多邊形的使用頻率比復雜多邊形高得多。

通過添加一對"接縫"邊,能將任意復雜多邊形轉化成簡單多邊形,如圖12.27所示。見右邊的放大圖,我們在每個"縫"添加了兩個邊,這兩個邊實際上是重合的,放大圖中將其分開是為了讓你看得更清楚。當我們考慮到繞多邊形的邊的順序時,這兩個接縫邊的方向是相反的。

 

自相交多邊形

大多數簡單多邊形的邊不相交,如果有的邊相交了,那么這個多邊形叫做自相交多邊形。一個簡單的自相交多邊形如圖12.28所示。

 

凸多邊形與凹多邊形

非自相交多邊形能進一步細分為凸多邊形和凹多邊形。給凸多邊形下一個精確定義是一件非常困難的事,因為存在很多令人棘手的退化形式。對大多數多邊形,下列常用的定義是等價的。不過對于一些退化多邊形來說,根據一種定義它是凸的,而根據另一種定義它又可能是凹的。

(1)直觀上,凸多邊形是沒有任何"凹陷處"的,而凹多邊形至少有一個頂點處于"凹陷處"----凹點。

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

(3)沿凸多邊形周邊移動時,在每個頂點的轉向都是相同的。對凹多邊形,一些是向右轉,一些是向左轉,在凹點的轉向是相反的(注意這僅是對非自相交多邊形來說的)。

前面曾提到過,退化多邊形會使這些相對清晰的定義變得模糊不清。例如一些多邊形有兩個連續的頂點重合,或這一條邊以相反的方向重復了兩次。能認為這些多邊形是凸的嗎?實踐中,經常用到下列凸性的定義:

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

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

現在,讓我們忽略一些病態情況,給出一些大家意見都一致的凸、凹多邊形。如圖12.29所示,右上角的凹多邊形有1個凹點,而下面的凹多邊形有5個凹點。

任意凹多邊形都能分解為凸多邊形片,它的基本思路是定位凹點并通過添加對角線來有系統地移除它們。

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

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

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

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

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

下面的代碼說明了怎樣用角度和來判斷多邊形是否為凸多邊形。

    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;
    }

另一種檢測凸性的方法是檢測多邊形上是否有凹點,如果一個都沒有找到,就是凸多邊形。它的基本想法是每個頂點的轉向應該一致,任何轉向不一致的點都是凹點。

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

 

三角分解和扇形分解

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

扇形三角分割會分割出一些長的、較細的三角形,這在某些情況下會引起麻煩。如同計算表面的法向量一樣,數值的不精確性在度量極小的角時會造成一些問題。

一種更加"聰明"的分解方法是:連接兩頂點的對角線將一個多邊形分解為兩部分。這時,對角線端點處的兩個內角都能分解為兩個新的內角。因此,總共產生了4個新內角。為了分解多邊形,選擇能使這4個新內角中最小的角最大化的對角線,用這條對角線將多邊形分為兩個。對分割后的每一部分都遞歸應用這個過程直到剩下的都是三角形。

這個方法產生較少的細三角形,但在實踐中,它過于復雜。根據幾何學和應用目的,扇形分解已經足夠了(并且簡單得多)。

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


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩情趣电影| 午夜精品久久| 欧美在现视频| 欧美一区二区视频97| 久久精品日产第一区二区| 欧美一区二区女人| 毛片基地黄久久久久久天堂| 欧美国产日韩二区| 亚洲人成欧美中文字幕| 最新日韩在线视频| 亚洲另类春色国产| 午夜在线视频观看日韩17c| 欧美在线亚洲一区| 欧美成人在线网站| 国产日韩一区| 亚洲人成人77777线观看| 亚洲综合成人婷婷小说| 麻豆av福利av久久av| 亚洲精品一区二区三区婷婷月| 亚洲自拍偷拍福利| 欧美激情第二页| 国产日韩欧美综合一区| 99在线精品免费视频九九视| 欧美一区二区观看视频| 亚洲国产美国国产综合一区二区| 亚洲少妇中出一区| 麻豆精品一区二区综合av| 国产精品久久9| 亚洲欧洲在线播放| 久久人人爽人人爽爽久久| 一本色道久久综合亚洲精品不| 久久精品91| 国产精品黄页免费高清在线观看| 91久久精品美女| 久久久噜噜噜久久久| 亚洲一二三区视频在线观看| 久久夜色精品国产欧美乱| 亚洲免费观看高清在线观看 | 亚洲午夜在线观看| 蜜臀av国产精品久久久久| 亚洲综合第一| 国产精品国产一区二区| 99在线观看免费视频精品观看| 久热国产精品视频| 亚洲欧美一级二级三级| 欧美视频在线观看免费| 亚洲人www| 蜜桃伊人久久| 久久网站热最新地址| 国产日韩一区在线| 欧美专区18| 亚洲欧美另类在线观看| 国产精品美女久久久久久2018 | 欧美不卡激情三级在线观看| 午夜精品美女自拍福到在线| 国产精品高潮在线| 亚洲一区二区三区四区在线观看 | 亚洲第一福利视频| 久久亚洲私人国产精品va| 国内精品视频一区| 欧美在线观看日本一区| 羞羞视频在线观看欧美| 国产在线国偷精品产拍免费yy| 久久久福利视频| 久久久国产精品一区二区中文| 很黄很黄激情成人| 免费成人小视频| 欧美高清日韩| 亚洲一区二区三区高清| 亚洲一级二级在线| 国产色产综合产在线视频| 老牛影视一区二区三区| 美女精品在线| 亚洲视频在线一区| 午夜一区二区三视频在线观看| 国语精品中文字幕| 亚洲国产成人一区| 欧美性jizz18性欧美| 久久精品动漫| 欧美韩日一区二区三区| 亚洲一区二区高清视频| 亚洲在线网站| 亚洲第一主播视频| 99视频+国产日韩欧美| 国产日韩一区二区| 亚洲欧洲三级| 国产一区二区激情| 亚洲人成啪啪网站| 国产中文一区| 日韩视频永久免费观看| 国外成人在线视频| 一区二区冒白浆视频| 亚洲欧美伊人| 亚洲三级免费电影| 午夜精品一区二区三区四区| 91久久香蕉国产日韩欧美9色| 在线亚洲国产精品网站| 亚洲高清视频在线观看| 亚洲天堂男人| 亚洲精品日韩精品| 久久激情五月激情| 亚洲女性喷水在线观看一区| 久久国产加勒比精品无码| 制服丝袜亚洲播放| 免费成人av在线看| 久久久久久久综合| 国产精品伦子伦免费视频| 亚洲国产欧美国产综合一区| 国产在线不卡| 午夜激情综合网| 亚洲主播在线| 欧美日韩精品一区| 欧美激情综合| 亚洲电影av| 久久蜜桃av一区精品变态类天堂| 亚洲欧美视频在线观看| 欧美日韩精品一二三区| 亚洲黄色大片| 亚洲国产精品久久久久婷婷884 | 午夜国产精品影院在线观看 | 亚洲美洲欧洲综合国产一区| 亚洲高清资源| 久久天天躁狠狠躁夜夜爽蜜月| 欧美一区免费视频| 国产精品国产精品| 夜夜躁日日躁狠狠久久88av| 亚洲精品视频在线观看网站| 美女亚洲精品| 欧美福利网址| 亚洲国产婷婷香蕉久久久久久99| 久久久久女教师免费一区| 久久久人成影片一区二区三区观看 | 亚洲男女自偷自拍| 欧美日韩在线亚洲一区蜜芽| 亚洲高清毛片| 亚洲精品免费在线播放| 免费中文日韩| 亚洲国产精品成人久久综合一区| 亚洲欧洲日本在线| 欧美日韩1080p| 一区二区三区久久| 欧美一区二区三区四区在线 | 亚洲大胆人体视频| 久久综合成人精品亚洲另类欧美| 亚洲国产精品一区二区www在线 | 欧美一区二区三区男人的天堂 | 午夜精品福利在线| 久久久久久噜噜噜久久久精品| 国产一区二区中文| 久久理论片午夜琪琪电影网| 欧美aa国产视频| 亚洲麻豆av| 国产精品视频免费观看www| 欧美夜福利tv在线| 亚洲大胆在线| 午夜亚洲影视| 极品尤物av久久免费看| 欧美成人精品激情在线观看| 亚洲靠逼com| 久久精品国产96久久久香蕉| 在线看片日韩| 欧美日韩日本网| 先锋影音久久| 亚洲福利在线观看| 亚洲欧美在线高清| 亚洲福利视频一区| 国产精品va在线播放| 久久精品99国产精品酒店日本| 最新成人在线| 久久精品国产精品亚洲综合| 91久久线看在观草草青青| 国产精品久久久久9999| 美国成人直播| 午夜精品视频在线观看| 亚洲激情在线观看| 久久精品日韩欧美| 在线视频中文亚洲| 亚洲国产欧美在线| 国产一区二区三区黄| 欧美日韩mp4| 老司机免费视频久久| 亚洲欧美久久久| 亚洲毛片网站| 欧美凹凸一区二区三区视频| 午夜伦欧美伦电影理论片| 亚洲日本欧美日韩高观看| 国内精品久久久久影院 日本资源| 欧美日韩国产999| 榴莲视频成人在线观看| 欧美在线不卡| 午夜精品久久久久久久蜜桃app | 欧美日本中文| 美女精品视频一区| 久久大香伊蕉在人线观看热2| 夜夜夜精品看看| 亚洲理伦在线| 亚洲精品日韩精品| 亚洲激情在线视频| 欧美高清视频| 免费一级欧美片在线播放|