如何使用LINQ在3D坐标列表中找到峰值3D坐标?

时间:2013-08-12 05:18:35

标签: c# linq 3d directx

using Microsoft.DirectX.Direct3D;

struct Voxel
{
    public Vector3 p

    public Voxel(float _x, float _y, float _z)
    {
        p = new Vector3(_x, _y, _z);
    }
}

List<Voxel> myDataList = new List<Voxel>();

在一些添加数据方法之后,我终于得到myDataList,如下所示:

myDataList[0] - { X: 164 , Y: 59 , Z: 120 }
myDataList[1] - { X: 146 , Y: 63 , Z: 120 }
myDataList[2] - { X: 192 , Y: 59 , Z: 120 }
myDataList[3] - { X: 196 , Y: 79 , Z: 120 } //peak coordinate is here
myDataList[4] - { X: 110 , Y: 55 , Z: 120 }

在上面的例子中,myDataList [3]是它具有最高Y值的峰值坐标,即79.

我的问题是,我怎样才能确定myDataList [3]是包含最高Y值的峰值坐标?

我知道我可以做下面的事情来获得最大Y值

float maxY = myDataList.Max(y => y.p.Y); //output = 79

但我想要的是3D坐标(X,Y,Z),而不仅仅是知道maxY

* 不要通过降低w.r.t Y值和.First()来排序列表,因为myDataList的顺序在我的下一个后续步骤中起作用。

1 个答案:

答案 0 :(得分:2)

由于您已经拥有maxY,因此您可以使用该值查找最大Voxel,如下所示

var maxVoxel = myDataList.FirstOrDefault(x=>x.p.Y ==maxY);