在問這個問題之前,我確實做過一些搜索,但是如何確定給定的座標集合,哪些座標位於另一個範圍內?計算多個3d點的距離
,如果我有一組座標
我知道我可以這樣做:
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的值(或其中的一些表示),因爲它們都在彼此之內。 3,4,5的值與其他任何東西都很接近,所以我不想看到它們。我給了7個值,但是我最終擁有的列表可能有數百個我想要比較的x/y/z位置。
這真的取決於 - 你想要什麼,如果你有10個座標,在一行已返回,等間隔,每隔24個單位? –
@ReedCopsey你的意思是相差4個單位,因爲OP正在看距離的平方。 – Teepeemm
@Teepeemm否 - 我的意思是24,因爲OP的「返回所有距離<25」 –