public static bool CreateInscribed(Vector3 v0, Vector3 v1, Vector3 v2, out Circle3 circle) { Vector3 value = v1 - v0; Vector3 vector = v2 - v1; Vector3 value2 = v0 - v2; circle.Normal = vector.Cross(value); Vector3 vector2 = circle.Normal.UnitCross(value); Vector3 vector3 = circle.Normal.UnitCross(vector); Vector3 vector4 = circle.Normal.UnitCross(value2); float num = vector3.Dot(value); if (Mathf.Abs(num) < 1E-05f) { circle = default(Circle3); return(false); } float num2 = vector4.Dot(vector); if (Mathf.Abs(num2) < 1E-05f) { circle = default(Circle3); return(false); } float num3 = vector2.Dot(value2); if (Mathf.Abs(num3) < 1E-05f) { circle = default(Circle3); return(false); } float num4 = 1f / num; float num5 = 1f / num2; float num6 = 1f / num3; circle.Radius = 1f / (num4 + num5 + num6); circle.Center = circle.Radius * (num4 * v0 + num5 * v1 + num6 * v2); circle.Normal.Normalize(); circle.Axis0 = vector2; circle.Axis1 = circle.Normal.Cross(circle.Axis0); return(true); }
public static bool CreateCircumscribed(Vector3 v0, Vector3 v1, Vector3 v2, out Circle3 circle) { Vector3 vector = v0 - v2; Vector3 vector2 = v1 - v2; float num = vector.Dot(vector); float num2 = vector.Dot(vector2); float num3 = vector2.Dot(vector2); float num4 = num * num3 - num2 * num2; if (Mathf.Abs(num4) < 1E-05f) { circle = default(Circle3); return(false); } float num5 = 0.5f / num4; float d = num5 * num3 * (num - num2); float d2 = num5 * num * (num3 - num2); Vector3 b = d * vector + d2 * vector2; circle.Center = v2 + b; circle.Radius = b.magnitude; circle.Normal = vector.UnitCross(vector2); if (Mathf.Abs(circle.Normal.x) >= Mathf.Abs(circle.Normal.y) && Mathf.Abs(circle.Normal.x) >= Mathf.Abs(circle.Normal.z)) { circle.Axis0.x = -circle.Normal.y; circle.Axis0.y = circle.Normal.x; circle.Axis0.z = 0f; } else { circle.Axis0.x = 0f; circle.Axis0.y = circle.Normal.z; circle.Axis0.z = -circle.Normal.y; } circle.Axis0.Normalize(); circle.Axis1 = circle.Normal.Cross(circle.Axis0); return(true); }