[TASK] Initial commit with basic product setup
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace KDTree
|
||||
{
|
||||
/// <summary>
|
||||
/// An interface which enables flexible distance functions.
|
||||
/// </summary>
|
||||
public interface DistanceFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Compute a distance between two n-dimensional points.
|
||||
/// </summary>
|
||||
/// <param name="p1">The first point.</param>
|
||||
/// <param name="p2">The second point.</param>
|
||||
/// <returns>The n-dimensional distance.</returns>
|
||||
double Distance(double[] p1, double[] p2);
|
||||
|
||||
/// <summary>
|
||||
/// Find the shortest distance from a point to an axis aligned rectangle in n-dimensional space.
|
||||
/// </summary>
|
||||
/// <param name="point">The point of interest.</param>
|
||||
/// <param name="min">The minimum coordinate of the rectangle.</param>
|
||||
/// <param name="max">The maximum coorindate of the rectangle.</param>
|
||||
/// <returns>The shortest n-dimensional distance between the point and rectangle.</returns>
|
||||
double DistanceToRectangle(double[] point, double[] min, double[] max);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A distance function for our KD-Tree which returns squared euclidean distances.
|
||||
/// </summary>
|
||||
public class SquareEuclideanDistanceFunction : DistanceFunctions
|
||||
{
|
||||
/// <summary>
|
||||
/// Find the squared distance between two n-dimensional points.
|
||||
/// </summary>
|
||||
/// <param name="p1">The first point.</param>
|
||||
/// <param name="p2">The second point.</param>
|
||||
/// <returns>The n-dimensional squared distance.</returns>
|
||||
public double Distance(double[] p1, double[] p2)
|
||||
{
|
||||
double fSum = 0;
|
||||
for (int i = 0; i < p1.Length; i++)
|
||||
{
|
||||
double fDifference = (p1[i] - p2[i]);
|
||||
fSum += fDifference * fDifference;
|
||||
}
|
||||
return fSum;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Find the shortest distance from a point to an axis aligned rectangle in n-dimensional space.
|
||||
/// </summary>
|
||||
/// <param name="point">The point of interest.</param>
|
||||
/// <param name="min">The minimum coordinate of the rectangle.</param>
|
||||
/// <param name="max">The maximum coorindate of the rectangle.</param>
|
||||
/// <returns>The shortest squared n-dimensional squared distance between the point and rectangle.</returns>
|
||||
public double DistanceToRectangle(double[] point, double[] min, double[] max)
|
||||
{
|
||||
double fSum = 0;
|
||||
double fDifference = 0;
|
||||
for (int i = 0; i < point.Length; ++i)
|
||||
{
|
||||
fDifference = 0;
|
||||
if (point[i] > max[i])
|
||||
fDifference = (point[i] - max[i]);
|
||||
else if (point[i] < min[i])
|
||||
fDifference = (point[i] - min[i]);
|
||||
fSum += fDifference * fDifference;
|
||||
}
|
||||
return fSum;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user