国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

碰撞檢測算法——分離軸算法在Unity中實(shí)現(xiàn)(二)

這篇具有很好參考價(jià)值的文章主要介紹了碰撞檢測算法——分離軸算法在Unity中實(shí)現(xiàn)(二)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、介紹

? ? ? ?分離軸算法(簡稱SAT)通常用于檢查兩個(gè)簡單多邊形(凸邊形)之間或多邊形與圓之間的碰撞。本質(zhì)上,如果您能夠繪制一條線來分隔兩個(gè)多邊形,則它們不會(huì)發(fā)生碰撞,如果找不到一條線來分割兩個(gè)多邊形,則它們發(fā)生碰撞。

如圖:

多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

? ? ? ? 具體做法是遍歷兩個(gè)多邊形的所有邊,求得每條邊的法向軸,再求出每個(gè)多邊形在法向軸上的投影,求出投影的最大值點(diǎn)和最小值點(diǎn),通過比較兩個(gè)多邊形的最值點(diǎn)的關(guān)系得出是否碰撞。

演示:

多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?多邊形碰撞檢測分離軸 code,U3d,知識(shí)點(diǎn)記錄,unity,游戲引擎

?運(yùn)行代碼:

獲取在法向軸上投影的函數(shù):

public void ProjectPolygon(Vector2 axis, Polygon polygon, ref float min, ref float max)
{
    //要在軸上投影一個(gè)點(diǎn),使用點(diǎn)積
    float dotProduct = Vector2.Dot(axis, polygon.Points[0]);
    min = dotProduct;
    max = dotProduct;
    for (int i = 0; i < polygon.Points.Count; i++)
    {
        dotProduct = Vector2.Dot(polygon.Points[i], axis);
        if (dotProduct < min)
        {
            min = dotProduct;
        }
        else
        {
            if (dotProduct > max)
            {
                max = dotProduct;
            }
        }
    }
}

?判斷是否相交函數(shù):、

  public float IntervalDistance(float minA, float maxA, float minB, float maxB)
  {
      if (minA < minB)
      {
          return minB - maxA;
      }
      else
      {
          return minA - maxB;
      }
  }

檢測函數(shù):

    public bool CollisionDetection(Polygon polygonA, Polygon polygonB)
    {
        int edgeCountA = polygonA.Edges.Count;
        int edgeCountB = polygonB.Edges.Count;
        Vector2 edge;

        // 循環(huán)遍歷兩個(gè)多邊形的所有邊
        for (int edgeIndex = 0; edgeIndex < edgeCountA + edgeCountB; edgeIndex++)
        {
            if (edgeIndex < edgeCountA)
            {
                edge = polygonA.Edges[edgeIndex];
            }
            else
            {
                edge = polygonB.Edges[edgeIndex - edgeCountA];
            }

            //查找多邊形當(dāng)前是否相交

            // 找出垂直于當(dāng)前邊的軸
            Vector2 axis = new Vector2(-edge.y, edge.x);
            axis.Normalize();

            // 求多邊形在當(dāng)前軸上的投影
            float minA = 0; float minB = 0; float maxA = 0; float maxB = 0;
            ProjectPolygon(axis, polygonA, ref minA, ref maxA);
            ProjectPolygon(axis, polygonB, ref minB, ref maxB);

            // 檢查多邊形投影當(dāng)前是否相交
            if (IntervalDistance(minA, maxA, minB, maxB) > 0)
                return false;
        }
        return true;
    }

結(jié)果演示:

碰撞檢測算法-分離軸算法

參考鏈接:

https://code.tutsplus.com/collision-detection-using-the-separating-axis-theorem--gamedev-169t

How 2D Game Collision Works (Separating Axis Theorem) - YouTube

Collision Detection with SAT (Math for Game Developers) - YouTube文章來源地址http://www.zghlxwxcb.cn/news/detail-764576.html

到了這里,關(guān)于碰撞檢測算法——分離軸算法在Unity中實(shí)現(xiàn)(二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【W(wǎng)eiler-Atherton算法】 計(jì)算機(jī)圖形學(xué)多邊形裁剪算法

    【W(wǎng)eiler-Atherton算法】 計(jì)算機(jī)圖形學(xué)多邊形裁剪算法

    源代碼: https://github.com/ricar0/Weiler-Atherton-Alogrithm/tree/master 通常來說就是利用多邊形來裁剪多邊形的一種方法,一般情況下是利用矩形來裁剪凹凸多邊形 凸多邊形 凹多邊形 上面紅色劃線部分就是裁剪出的部分 OPENGL基礎(chǔ)語法 基本上就是一些畫線和畫多邊形的操作,難度較低

    2023年04月09日
    瀏覽(89)
  • [游戲開發(fā)]Unity中隨機(jī)位置_在圓/橢圓/三角形/多邊形/內(nèi)隨機(jī)一個(gè)點(diǎn)

    [游戲開發(fā)]Unity中隨機(jī)位置_在圓/橢圓/三角形/多邊形/內(nèi)隨機(jī)一個(gè)點(diǎn)

    在做游戲的時(shí)候經(jīng)常需要隨機(jī)某一個(gè)點(diǎn),而且形狀各種各樣,每次要隨機(jī)的時(shí)候就容易忘記怎么弄了。這里總結(jié)一下各種常見形狀內(nèi)基礎(chǔ)隨機(jī)方式。 略~ 圓形隨機(jī)一般有兩種。一種是通過極坐標(biāo)來隨機(jī),另一種是先正常隨機(jī)矩形在判斷點(diǎn)是否在圓形內(nèi)。第二種其實(shí)使用的范圍

    2024年02月12日
    瀏覽(21)
  • 【計(jì)算機(jī)圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    【計(jì)算機(jī)圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    傳送門 實(shí)現(xiàn)多邊形掃描線填充算法,并和鼠標(biāo)進(jìn)行交互。 具體原理略過,會(huì)貼上完整代碼,可直接運(yùn)行。 環(huán)境: vs2019,OpenGL的庫(可以搜索如何用vs使用OpenGL的庫,可以使用vs自帶的插件或者其他方法,很方便) 要點(diǎn): 1.NET和AET的創(chuàng)建,改動(dòng) 2.改變鼠標(biāo)點(diǎn)擊和鼠標(biāo)拖拽的響應(yīng)

    2023年04月08日
    瀏覽(100)
  • 【計(jì)算幾何】凸多面體重疊判斷算法:GJK 算法詳解 & C++代碼實(shí)現(xiàn)二維情形的凸多邊形重疊判斷

    【計(jì)算幾何】凸多面體重疊判斷算法:GJK 算法詳解 & C++代碼實(shí)現(xiàn)二維情形的凸多邊形重疊判斷

    GJK 算法是由 Gilbert,Johnson,Keerthi 三位前輩發(fā)明的, 用來計(jì)算兩個(gè)凸多面體之間的碰撞檢測 ,以及最近距離。 GJK 算法可以在 O ( M + N ) O(M+N) O ( M + N ) 的時(shí)間復(fù)雜度內(nèi),檢測出碰撞,算法在每次迭代的過程中,都會(huì)優(yōu)先選擇靠近原點(diǎn)的方向,因此收斂速度會(huì)很快。算法的證明

    2024年02月08日
    瀏覽(22)
  • 計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)——利用MFC對(duì)話框?qū)崿F(xiàn)多邊形繪制與填充(掃描線填充算法)附源碼

    計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)——利用MFC對(duì)話框?qū)崿F(xiàn)多邊形繪制與填充(掃描線填充算法)附源碼

    內(nèi)容概括: 利用基于對(duì)話框的MFC項(xiàng)目 實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊繪制多邊形 實(shí)現(xiàn)掃描線算法填充多邊形 源碼見Yushan-Ji/ComputerGraphics: ECNU2023秋 計(jì)算機(jī)圖形學(xué)課程實(shí)驗(yàn)代碼 (github.com) 通過鼠標(biāo)交互輸入多邊形 對(duì)各種多邊形進(jìn)行填充,包括邊界自交的情況 利用 OnLButtonDown 和 OnRButtonDown 函數(shù),

    2024年02月04日
    瀏覽(175)
  • Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)、校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦

    Java根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法)、校驗(yàn)經(jīng)緯度是否在圓/多邊形區(qū)域內(nèi)的算法推薦

    目錄 前言 一、根據(jù)坐標(biāo)經(jīng)緯度計(jì)算兩點(diǎn)距離(5種方法) 1.方法一 2.方法二 3.方法三 4.方法四 5.方法五 5.1 POM引入第三方依賴 5.2 代碼 6.測試結(jié)果對(duì)比 二、校驗(yàn)經(jīng)緯度是否在制定區(qū)域內(nèi) 1.判斷一個(gè)坐標(biāo)是否在圓形區(qū)域內(nèi) 2.判斷一個(gè)坐標(biāo)是否在一個(gè)多邊形區(qū)域內(nèi) 3.結(jié)果 總結(jié) ??

    2024年02月10日
    瀏覽(28)
  • opencv 之 外接多邊形(矩形、圓、三角形、橢圓、多邊形)使用詳解

    opencv 之 外接多邊形(矩形、圓、三角形、橢圓、多邊形)使用詳解

    本文主要講述opencv中的外接多邊形的使用: 多邊形近似 外接矩形、最小外接矩形 最小外接圓 外接三角形 橢圓擬合 凸包 將重點(diǎn)講述最小外接矩形的使用 給一個(gè)opencv官方的例程: 過程圖像如下: 橢圓擬合一般用于輪廓提取之后: 凸包繪制 計(jì)算兩個(gè)旋轉(zhuǎn)矩形交集: C++版的最

    2024年02月09日
    瀏覽(227)
  • 基于C++ 的OpenCV繪制多邊形,多邊形多條邊用不用的顏色繪制

    使用基于C++的OpenCV庫來繪制多邊形,并且為多邊形的不同邊使用不同的顏色,可以按照以下步驟進(jìn)行操作: 首先,確保你已經(jīng)安裝了OpenCV庫并配置好了你的開發(fā)環(huán)境。 導(dǎo)入必要的頭文件: 創(chuàng)建一個(gè)空白的圖像,然后繪制多邊形,并為每條邊選擇不同的顏色: 在這個(gè)示例中,

    2024年02月13日
    瀏覽(89)
  • 3DS MAX三維建模平面基礎(chǔ)與初級(jí)多邊形(可編輯多邊形的講解)

    3DS MAX三維建模平面基礎(chǔ)與初級(jí)多邊形(可編輯多邊形的講解)

    ????????3DS MAX三維建模平面基礎(chǔ)與初級(jí)多邊形(可編輯多邊形的講解) ????????歡迎大家來學(xué)習(xí)3DS MAX教程,在這里先說一下研究好3ds Max一定要一邊看教程一邊要自己學(xué)的操作才能更快的進(jìn)步,預(yù)祝大家學(xué)習(xí)順利。 ? ? ? ? 這篇是第四篇關(guān)于3ds Max的文章了,基于上一

    2024年04月12日
    瀏覽(92)
  • 計(jì)算兩個(gè)多邊形的交集

    計(jì)算兩個(gè)多邊形的交集

    已知兩個(gè)多邊形Polygon1和Polygon2,分別由點(diǎn)集C1={P1,P2,...,Pm}和C2={Q1,Q2,...,Qn}表示,求這兩個(gè)多邊形的交集。 兩個(gè)多邊形相交后,其頂點(diǎn)要么是兩個(gè)多邊形邊的交點(diǎn),要么是在多邊形內(nèi)部的點(diǎn)。 計(jì)算兩個(gè)多邊形每條邊之間的交點(diǎn)。 計(jì)算包含在多邊形內(nèi)部的點(diǎn)。 將交點(diǎn)和多邊形內(nèi)

    2024年02月12日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包