Initial commit

This commit is contained in:
2026-07-03 16:31:37 +07:00
commit 899c7c637d
1939 changed files with 641750 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
namespace RobotNet10.RobotApp.Detection;
/// <summary>
/// Represents a 2D point with additional laser scan metadata
/// </summary>
public class Point(double x, double y, double range, double alpha)
{
/// <summary>
/// X coordinate in meters
/// </summary>
public double X { get; set; } = x;
/// <summary>
/// Y coordinate in meters
/// </summary>
public double Y { get; set; } = y;
/// <summary>
/// Range of point from Lidar sensor in meters
/// </summary>
public double Range { get; set; } = range;
/// <summary>
/// Angle of laser beam to the point in radians
/// </summary>
public double Alpha { get; set; } = alpha;
/// <summary>
/// Cluster ID assigned by clustering algorithm (-1 if unassigned)
/// </summary>
public int Cluster { get; set; } = -1;
/// <summary>
/// Reachability distance for OPTICS algorithm
/// </summary>
public double ReachabilityDistance { get; set; } = double.MaxValue;
/// <summary>
/// Whether this point has been processed by the algorithm
/// </summary>
public bool Processed { get; set; } = false;
}
/// <summary>
/// Simple 2D point structure for cluster results
/// </summary>
public struct Point2D(double x, double y) : IEquatable<Point2D>, IComparable<Point2D>
{
/// <summary>
/// X coordinate in meters
/// </summary>
public double X { get; set; } = x;
/// <summary>
/// Y coordinate in meters
/// </summary>
public double Y { get; set; } = y;
public readonly bool Equals(Point2D other)
{
return Math.Abs(X - other.X) < 3e-3 && Math.Abs(Y - other.Y) < 3e-3;
}
public override readonly bool Equals(object? obj)
{
return obj is Point2D other && Equals(other);
}
public override readonly int GetHashCode()
{
return HashCode.Combine(X, Y);
}
public readonly int CompareTo(Point2D other)
{
if (!X.Equals(other.X))
return X.CompareTo(other.X);
return Y.CompareTo(other.Y);
}
public static bool operator ==(Point2D left, Point2D right)
{
return left.Equals(right);
}
public static bool operator !=(Point2D left, Point2D right)
{
return !left.Equals(right);
}
}