0

在问这个之前我确实做了一些搜索,但是我如何确定给定一组坐标,哪些坐标在彼此的范围内?

如果我有一组坐标

我知道我可以做类似的事情:

float[] point1 = new float[3] {756.0,26.0,-1410.0};
float[] point2 = new float[3] {752.0,28.0,-1391.0};
float[] point3 = new float[3] {552.0,28.0,12.0};
float[] point4 = new float[3] {668.0,29.0,12.0};
float[] point5 = new float[3] {869.0,35.0,13.0};
float[] point6 = new float[3] {768.0,29.0,-1407.0};
float[] point7 = new float[3] {769.0,35.0,-1393.0};

然后将一组坐标与另一组坐标进行比较,但我希望做的是有一个坐标列表,我想显示仅在某个范围内的坐标。我只是不确定如何一次做超过 1 个。

List<float[]> Positions = new List<float[]>();
float[] location = new float[3] { entity.X, entity.Y, entity.Z }
Postions.Add(location)
... loop thru and add all values ...

            int rSquare = 25;  //minimum distance I want to be less than
            int x0 = 10, y0 = 10, z0 = 10;  //placeholder because I dont know what I'm comparing against
            var res = locations
                .Select(tmp =>
                {
                    return new
                    {
                        x = tmp[0],
                        y = tmp[1],
                        z = tmp[2]
                    };
                })
                .Where(p => (p.x - x0) * (p.x - x0) + (p.y - y0) * (p.y - y0) + (p.z - z0) * (p.z - z0) < rSquare)  
                .ToList();

这会给我一个与另一个相比的坐标,并返回所有距离 < 25 的坐标。如何将任何给定的坐标集与位置列表中的任何其他给定坐标集进行比较?“占位符”只是为了给我一些可以反对的东西,但我希望有一种更简单的方法,而不是一次将它们与自己进行比较。

谢谢

编辑回应:我希望我能取回任何在所需距离内的坐标。在这种情况下,从给定的 7 个点中,我希望看到 1、2、6 和 7 的值(或其中的一些表示),因为它们都在 25 以内。3,4,5 的值与其他任何值相距甚远,所以我不想看到它们。我给出了 7 个值,但我最终拥有的列表可能有数百个我想要比较的 x/y/z 位置。

4

1 回答 1

1

蛮力方法可能只是:

 // Given a distance function:
 double DistSq(float[] point1, float[] point2)
 {
      return (point1[0] - point2[0]) * (point1[0] - point2[0]) 
      + (point1[1] - point2[1]) * (point1[1] - point2[1]) 
      + (point1[2] - point2[2]) * (point1[2] - point2[2]); 
 }

你可以做:

 distance = 5; // How far apart can 2 points be...
 double distSq = distance * distance;
 var pointsWithoutOutliers = Positions.Where(p => Positions.Any(o => !Object.ReferenceEquals(o,p) && DistSq(p,0)<distSq));
于 2013-08-23T00:01:41.933 回答