// Decompiled with JetBrains decompiler // Type: Eden.AutoMorpher.TriangleUtil // Assembly: EdenAutoMorpherScript, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null // MVID: D39968B3-E151-4276-BDB4-E82752BBAFF0 // Assembly location: D:\dev\AutoMorpher\Assets\@Eden_Tools\Eden_AutoMorpher\Script\EdenAutoMorpherScript.dll using UnityEngine; namespace Eden.AutoMorpher { public class TriangleUtil { public Vector3 ClosestPointOnTriangle(Vector3 p, Vector3 a, Vector3 b, Vector3 c) { Vector3 vector3_1 = Vector3.op_Subtraction(b, a); Vector3 vector3_2 = Vector3.op_Subtraction(c, a); Vector3 vector3_3 = Vector3.op_Subtraction(p, a); float num1 = Vector3.Dot(vector3_1, vector3_3); float num2 = Vector3.Dot(vector3_2, vector3_3); if ((double)num1 <= 0.0 && (double)num2 <= 0.0) return a; Vector3 vector3_4 = Vector3.op_Subtraction(p, b); float num3 = Vector3.Dot(vector3_1, vector3_4); float num4 = Vector3.Dot(vector3_2, vector3_4); if ((double)num3 >= 0.0 && (double)num4 <= (double)num3) return b; float num5 = (float)((double)num1 * (double)num4 - (double)num3 * (double)num2); if ((double)num5 <= 0.0 && (double)num1 >= 0.0 && (double)num3 <= 0.0) { float num6 = num1 / (num1 - num3); return Vector3.op_Addition(a, Vector3.op_Multiply(num6, vector3_1)); } Vector3 vector3_5 = Vector3.op_Subtraction(p, c); float num7 = Vector3.Dot(vector3_1, vector3_5); float num8 = Vector3.Dot(vector3_2, vector3_5); if ((double)num8 >= 0.0 && (double)num7 <= (double)num8) return c; float num9 = (float)((double)num7 * (double)num2 - (double)num1 * (double)num8); if ((double)num9 <= 0.0 && (double)num2 >= 0.0 && (double)num8 <= 0.0) { float num10 = num2 / (num2 - num8); return Vector3.op_Addition(a, Vector3.op_Multiply(num10, vector3_2)); } float num11 = (float)((double)num3 * (double)num8 - (double)num7 * (double)num4); if ((double)num11 <= 0.0 && (double)num4 - (double)num3 >= 0.0 && (double)num7 - (double)num8 >= 0.0) { float num12 = (float)(((double)num4 - (double)num3) / ((double)num4 - (double)num3 + ((double)num7 - (double)num8))); return Vector3.op_Addition(b, Vector3.op_Multiply(num12, Vector3.op_Subtraction(c, b))); } float num13 = (float)(1.0 / ((double)num11 + (double)num9 + (double)num5)); float num14 = num9 * num13; float num15 = num5 * num13; return Vector3.op_Addition(Vector3.op_Addition(a, Vector3.op_Multiply(vector3_1, num14)), Vector3.op_Multiply(vector3_2, num15)); } } }