58 lines
1.7 KiB
C#
58 lines
1.7 KiB
C#
// Warning: Some assembly references could not be resolved automatically. This might lead to incorrect decompilation of some parts,
|
|
// for ex. property getter/setter access. To get optimal decompilation results, please manually add the missing references to the list of loaded assemblies.
|
|
// EdenAutoMorpherScript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
|
|
// Eden.AutoMorpher.TriangleUtil
|
|
using UnityEngine;
|
|
|
|
public class TriangleUtil
|
|
{
|
|
public Vector3 ClosestPointOnTriangle(Vector3 p, Vector3 a, Vector3 b, Vector3 c)
|
|
{
|
|
Vector3 vector = b - a;
|
|
Vector3 vector2 = c - a;
|
|
Vector3 rhs = p - a;
|
|
float num = Vector3.Dot(vector, rhs);
|
|
float num2 = Vector3.Dot(vector2, rhs);
|
|
if (num <= 0f && num2 <= 0f)
|
|
{
|
|
return a;
|
|
}
|
|
Vector3 rhs2 = p - b;
|
|
float num3 = Vector3.Dot(vector, rhs2);
|
|
float num4 = Vector3.Dot(vector2, rhs2);
|
|
if (num3 >= 0f && num4 <= num3)
|
|
{
|
|
return b;
|
|
}
|
|
float num5 = num * num4 - num3 * num2;
|
|
if (num5 <= 0f && num >= 0f && num3 <= 0f)
|
|
{
|
|
float num6 = num / (num - num3);
|
|
return a + num6 * vector;
|
|
}
|
|
Vector3 rhs3 = p - c;
|
|
float num7 = Vector3.Dot(vector, rhs3);
|
|
float num8 = Vector3.Dot(vector2, rhs3);
|
|
if (num8 >= 0f && num7 <= num8)
|
|
{
|
|
return c;
|
|
}
|
|
float num9 = num7 * num2 - num * num8;
|
|
if (num9 <= 0f && num2 >= 0f && num8 <= 0f)
|
|
{
|
|
float num10 = num2 / (num2 - num8);
|
|
return a + num10 * vector2;
|
|
}
|
|
float num11 = num3 * num8 - num7 * num4;
|
|
if (num11 <= 0f && num4 - num3 >= 0f && num7 - num8 >= 0f)
|
|
{
|
|
float num12 = (num4 - num3) / (num4 - num3 + (num7 - num8));
|
|
return b + num12 * (c - b);
|
|
}
|
|
float num13 = 1f / (num11 + num9 + num5);
|
|
float num14 = num9 * num13;
|
|
float num15 = num5 * num13;
|
|
return a + vector * num14 + vector2 * num15;
|
|
}
|
|
}
|