這幾天沒投簡歷,沒有面試,打算還是好好準備一下再投簡歷吧,一直裸面也是浪費面試官的時間。
所以功課還是必須得做的,正好昨天看到網上別人的一道面試題感覺挺有意思,記錄一下:
如何判斷兩個三角形是否相交
乍一看以爲是一道簡單的題,以爲只要判斷三角形A和三角形B是否存在包含關係以及分別對兩個三角形的三條邊各判定是否與對方的三條邊相交即可,但是仔細想想,這樣就只是侷限於2D平面,如果是在3D空間裏還會有垂直相交於一條線或者一個頂點的情況。
在網上搜了一下別人的解法,這裏是參考:
平面內檢測兩條線段的位置關係
快速檢測空間三角形相交算法
另外,發現在unity裏有一個現成的接口判斷兩個物體是否穿插 Physics.OverlapSphere 相交球
public static Collider[] OverlapSphere(Vector3 position, float radius, int layerMask = AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
position:相交球的位置
radius:相交球的半徑
layerMask:要檢測的層
返回的是以position爲原點radius爲半徑的球內“滿足條件”的碰撞體集合Collider[]。
Unity API Document中的例子:
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void ExplosionDamage(Vector3 center, float radius)
{
Collider[] hitColliders = Physics.OverlapSphere(center, radius);
int i = 0;
while (i < hitColliders.Length)
{
hitColliders[i].SendMessage("AddDamage");
i++;
}
}
}
其中省略layerMask的話,返回的結果Collider[]中包含“自己”,且爲collider[0],如果不想其中包含“自己”,需要將想要檢測的物體設置好layer。