Files
UltimateFishing2020/Assets/Scripts/Assembly-CSharp/TriangleNet/Geometry/ExtensionMethods.cs
2026-03-04 10:03:45 +08:00

72 lines
2.1 KiB
C#

using TriangleNet.Meshing;
namespace TriangleNet.Geometry
{
public static class ExtensionMethods
{
public static IMesh Triangulate(this IPolygon polygon)
{
return new GenericMesher().Triangulate(polygon, null, null);
}
public static IMesh Triangulate(this IPolygon polygon, ConstraintOptions options)
{
return new GenericMesher().Triangulate(polygon, options, null);
}
public static IMesh Triangulate(this IPolygon polygon, QualityOptions quality)
{
return new GenericMesher().Triangulate(polygon, null, quality);
}
public static IMesh Triangulate(this IPolygon polygon, ConstraintOptions options, QualityOptions quality)
{
return new GenericMesher().Triangulate(polygon, options, quality);
}
public static IMesh Triangulate(this IPolygon polygon, ConstraintOptions options, QualityOptions quality, ITriangulator triangulator)
{
return new GenericMesher(triangulator).Triangulate(polygon, options, quality);
}
public static bool Contains(this ITriangle triangle, Point p)
{
return triangle.Contains(p.X, p.Y);
}
public static bool Contains(this ITriangle triangle, double x, double y)
{
Vertex vertex = triangle.GetVertex(0);
Vertex vertex2 = triangle.GetVertex(1);
Vertex vertex3 = triangle.GetVertex(2);
Point point = new Point(vertex2.X - vertex.X, vertex2.Y - vertex.Y);
Point point2 = new Point(vertex3.X - vertex.X, vertex3.Y - vertex.Y);
Point p = new Point(x - vertex.X, y - vertex.Y);
Point q = new Point(0.0 - point.Y, point.X);
Point q2 = new Point(0.0 - point2.Y, point2.X);
double num = DotProduct(p, q2) / DotProduct(point, q2);
double num2 = DotProduct(p, q) / DotProduct(point2, q);
if (num >= 0.0 && num2 >= 0.0 && num + num2 <= 1.0)
{
return true;
}
return false;
}
public static Rectangle Bounds(this ITriangle triangle)
{
Rectangle rectangle = new Rectangle();
for (int i = 0; i < 3; i++)
{
rectangle.Expand(triangle.GetVertex(i));
}
return rectangle;
}
internal static double DotProduct(Point p, Point q)
{
return p.X * q.X + p.Y * q.Y;
}
}
}