縹緲止盈
2021-05-06 14:09:33
我在這里瀏覽了其他一些接近的答案,但是找不到解決我問題的任何方法。我有一個(gè)繞軸位置旋轉(zhuǎn)的多邊形,我需要找到該多邊形的邊界框。本質(zhì)上,邊界框?qū)ο髴?yīng)具有左上角的x和y位置,以及框本身的width和height。我可以使用此代碼來計(jì)算不旋轉(zhuǎn)的多邊形的框,但它也不考慮旋轉(zhuǎn)。紅色正方形是當(dāng)前沒有旋轉(zhuǎn)的邊界框,綠色圓圈是旋轉(zhuǎn)軸,多邊形是多邊形本身。理想情況下,我不想在每次調(diào)用時(shí)重新計(jì)算每個(gè)頂點(diǎn)的位置以獲取邊界框,而是希望它位于數(shù)學(xué)本身中。這是不旋轉(zhuǎn)的多邊形和邊界框的示例:https : //i.imgur.com/MSOM9Q1.mp4這是我當(dāng)前的代碼,用于查找非旋轉(zhuǎn)多邊形的邊界框:const minX = Math.min(...this.vertices.map((vertex) => vertex.x));const minY = Math.min(...this.vertices.map((vertex) => vertex.y));return { x: minX + this.position.x, y: minY + this.position.y, width: Math.max(...this.vertices.map((vertex) => vertex.x)) - minX, height: Math.max(...this.vertices.map((vertex) => vertex.y)) - minY};多邊形對(duì)象結(jié)構(gòu):該position是多邊形的中心的rotationAxis是相對(duì)于多邊形的中心(位置)的矢量所述vertices陣列可相對(duì)于多邊形的中心向量的列表邊界框結(jié)構(gòu):我需要做什么來計(jì)算旋轉(zhuǎn)多邊形的邊界框?
1 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果不想在任何旋轉(zhuǎn)/平移后從多邊形的所有頂點(diǎn)重新計(jì)算與軸對(duì)齊的BBOX,請(qǐng)從僅4個(gè)頂點(diǎn)的OBB中進(jìn)行操作...
計(jì)算未旋轉(zhuǎn)/未平移多邊形的OBB
此操作很慢,但只能執(zhí)行一次(除非您的多邊形正在改變形狀或大?。?/p>
在多邊形的任何變換中
也以相同的方式轉(zhuǎn)換OBB頂點(diǎn)。然后根據(jù)轉(zhuǎn)換后的OBB頂點(diǎn)計(jì)算軸對(duì)齊的BBOX(只需像現(xiàn)在一樣查找最小/最大坐標(biāo))即可。
這樣,您只需要從4個(gè)頂點(diǎn)計(jì)算內(nèi)容,而不必將N
復(fù)雜度從O(N)
轉(zhuǎn)換為O(1)
。
此外,擁有OBB可能會(huì)在以后派上用場(chǎng),因?yàn)樗梢约涌炷承┎僮?,甚至可以提高碰撞測(cè)試的精度等。
添加回答
舉報(bào)
0/150
提交
取消