这几天没投简历,没有面试,打算还是好好准备一下再投简历吧,一直裸面也是浪费面试官的时间。
所以功课还是必须得做的,正好昨天看到网上别人的一道面试题感觉挺有意思,记录一下:
如何判断两个三角形是否相交
乍一看以为是一道简单的题,以为只要判断三角形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。