rj-action-library/Runtime/Math/Geometry/Distance3.cs

118 lines
2.1 KiB
C#
Raw Normal View History

2024-08-11 17:38:06 +00:00
using Godot;
using System.Collections;
using System.Collections.Generic;
namespace Rokojori
{
public class Distance
{
/*
2024-09-14 06:41:52 +00:00
P = Point
2024-08-11 17:38:06 +00:00
S = Sphere
2024-09-14 06:41:52 +00:00
L = Line
2024-08-11 17:38:06 +00:00
C = Capsule
P S L C
P y y y y
S y y y
L y y
C y
*/
public static float Of( Vector3 a, Vector3 b )
{
return ( a - b ).Length();
}
public static float Of( Vector3 a, Sphere b )
{
return b.DistanceToPoint( a );
}
public static float Of( Sphere a, Vector3 b )
{
return Of( b, a );
}
public static float Of( Vector3 a, Line3 b )
{
return b.DistanceToPoint( a );
}
public static float Of( Line3 b, Vector3 a )
{
return Of( a, b );
}
public static float Of( Vector3 a, Capsule3 b )
{
return b.DistanceToPoint( a );
}
public static float Of( Capsule3 a, Vector3 b )
{
return Of( b, a );
}
public static float Of( Sphere a, Sphere b )
{
return a.DistanceToSphere( b );
}
public static float Of( Sphere a, Line3 b )
{
var centerDistance = Of( a.center, b );
return Mathf.Max( centerDistance - a.radius, 0 );
}
public static float Of( Line3 a, Sphere b )
{
return Of( b, a );
}
public static float Of( Sphere a, Capsule3 b )
{
var centerDistance = Of( a.center, b );
return Mathf.Max( centerDistance - a.radius, 0 );
}
public static float Of( Capsule3 a, Sphere b )
{
return Of( b, a );
}
public static float Of( Line3 a, Line3 b )
{
return a.DistanceToLine( b );
}
public static float Of( Line3 a, Capsule3 b )
{
var lineDistance = Of( a, b.centerLine );
return Mathf.Max( 0, lineDistance - b.radius );
}
public static float Of( Capsule3 a, Line3 b )
{
return Of( b, a );
}
public static float Of( Capsule3 a, Capsule3 b )
{
var lineDistance = Of( a.centerLine, b.centerLine );
return Mathf.Max( 0, lineDistance - ( a.radius + b.radius ) );
}
}
}