• <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>

            天行健 君子當自強而不息

            幾何檢測(1)

            新建網頁 1

             

            2D隱式直線上的最近點

            考慮2D中的直線L,L由所有滿足p . n = d的點p組成。

            其中n是單位向量,我們的目標是對任意點q,找出直線L上距q距離最短的點q',它是q投影到L上的結果。讓我們畫一條經過q平行于L的輔助線M,如圖13.1所示。設nMdM分別為直線方程的法向量和d值。因為L和M平行,所以它們的法向量相等:nM=n。又因為q在M上,所以dMq.n

            現在可以得知,M到L的有符號距離為:d - dm = d - q . n。這個距離顯然等于qq'之間的距離(如果結果只需要距離而不是q'的值,到這里可以停止計算了)。為了計算q',只需要將q沿n的方向位移一定距離(公式13.1):

            q' = q + (d - q . n)n

            公式13.1   計算2D隱式直線上的最近點

             

            參數射線上的最近點

            考慮在2D或3D中的參數射線R:p(t) = porg + td

            其中d是單位向量,參數t在0到L間變化,L是R的長度。 對一給定點q,我們想要找出在R上離q最近的點q'

            這是一個簡單的向量到向量的投影問題,設vporgq的向量,我們希望得到vd上的投影,或v平行于d的部分,如圖13.2所示:

            點乘v . d的結果就是滿足p(t)=q'的t值。

            t = d . v = d . (q - porg)

            q' = p(t) = porg + td = porg + (d . (q - porg))d

            公式13.2   計算參數射線上的最近點

            實際上,等式p(t)求得了在包含R的直線上距q最近的點。如果t<0t>L,則p(t)不在R的范圍內。這種情況下,R上距q最近的點是原點(如果t<0)或者終點( t>L)。

            如果射線的定義是t00變化,d不必是單位向量,那么在計算t值時必須除以d的模:

            t = d . (q - porg) / ||d||

             

            平面上的最近點

            考慮平面p,其定義為標準的隱式:滿足p . n = d的點的集合。

            其中n為單位向量,給定一點q,我們想要找到點q',它是qp上的投影。q'就是p上離q最近的點。

            前面已經學過如果計算點到平面上的距離,為了計算q',只要在n的方向上平移一段距離(公式13.3):

            q' = q + (d - q .n) . n

            公式13.3   計算平面上的最近點

            注意到,該式和用于計算在2D中隱式直線上最近點的公式13.1相同。

             

            圓和球上的最近點

            考慮2D中的點q和圓心為c、半徑為r的圓(下面的討論也適用于3D中的球體)。我們希望找到點q',它是圓上離q最近的點。

            d為從q指向c的向量,該向量和圓相交于q'。設b為從q指向q'的向量,如圖13.3所示:

            可以清楚地看出,||b|| = ||d|| - r,因此:

            b = ((||d|| - r)/||d||)d

            將此位移加到q上,并將它投影到圓上(公式13.4):

            q' = q + b = q + ((||d|| - r)/||d||)d

            公式13.4   計算圓或球上的最近點

             

            AABB上的最近點

            設B是由極值點pminpmax定義的AABB。對任意點q都能很容易地計算出B上距離q最近的點q'。所用的方法是按一定的順序沿著每條軸將q推向B。見程序清單13.1

                Listing 13.1: Computing the closest point in an AABB to a point
               
               
            if (x < minX) 
                  x = minX;
               
            else if (x > maxX) 
                  x = maxX;
               
               
            if (y < minY) 
                  y = minY;
               
            else if (y > maxY) 
                  y = maxY;
               
               
            if (z < minZ) 
                  z = minZ;
               
            else if (z > maxZ) 
                  z = maxZ;

            注意,如果q本來就在矩形邊界框內部,代碼運行的結果將返回原來的點。

            posted on 2008-02-26 16:04 lovedday 閱讀(772) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            亚洲成色WWW久久网站| 日本亚洲色大成网站WWW久久| 亚洲精品国精品久久99热| 久久久久久国产精品无码下载 | 久久精品国产亚洲一区二区三区| 亚洲人成无码久久电影网站| 亚洲国产精品无码久久| 9191精品国产免费久久| 国产精品一区二区久久精品涩爱| 日本免费久久久久久久网站| 久久强奷乱码老熟女网站| 婷婷综合久久中文字幕蜜桃三电影| 国内精品伊人久久久久影院对白| 亚洲精品无码专区久久久| 国产精品欧美亚洲韩国日本久久 | 久久这里都是精品| 国产亚洲美女精品久久久| 一本色道久久综合狠狠躁| 久久精品中文字幕第23页| 国产精品久久午夜夜伦鲁鲁| 亚洲狠狠婷婷综合久久蜜芽| 久久久久无码专区亚洲av| 国产情侣久久久久aⅴ免费| 三级三级久久三级久久| 97精品伊人久久大香线蕉| 久久综合九色欧美综合狠狠| 国产精品亚洲美女久久久| 国内精品久久久久久99| 久久99精品久久久久久久久久| AV无码久久久久不卡蜜桃| 亚洲午夜久久久影院伊人| 欧美日韩精品久久免费| 成人久久免费网站| 久久婷婷五月综合色高清| 精品久久久无码21p发布| 久久婷婷五月综合成人D啪 | 成人综合久久精品色婷婷| 热久久最新网站获取| 久久免费大片| 久久天天躁夜夜躁狠狠躁2022| 午夜不卡久久精品无码免费|