57 lines
2.9 KiB
C#
57 lines
2.9 KiB
C#
// 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));
|
|
}
|
|
}
|
|
}
|