2012-01-18 24 views
7

İki 3 D noktam var.
Örnek:2 3 boyutlu noktalar arasındaki mesafeyi hesaplamak için algoritma?

float[] point1 = new float[3] {1.3919023, 6.12837912, 10.391283}; 
float[] point2 = new float[3] {48.3818, 38.38182, 318.381823}; 

Herkes noktaları arasındaki flottede mesafeyi hesaplamak için bir algoritma için bir fikir?

+14

En kısa Wikipedia'nın karartma biter olarak bildireceğiz. – Nathan

+2

Topluluk, googling olmadan buna cevap veremezse, dünya mahkum olur. Hangi hatırlatıyor: Neden bunu Google'a vermedin? – Jon

cevap

21

iki 3D nokta arasındaki Öklid mesafedir: (denenmemiş ve taşmasına karşı zayıf)

float deltaX = x1 - x0; 
float deltaY = y1 - y0; 
float deltaZ = z1 - z0; 

float distance = (float) Math.Sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ); 

Ve N boyutlarında

:

float DistanceN(float[] first, float[] second) { 
    var sum = first.Select((x, i) => (x - second[i]) * (x - second[i])).Sum(); 
    return Math.Sqrt(sum); 
} 

Düzenleme: ben çok yayınlanmıştır Zip çözümü tercih Aşağıda dasblinkenlight tarafından! Eğer iki nokta varsa

+0

delta x kare doğru mu demek istiyorsun? –

+0

Teşekkürler, bayım. – Headpuster

+0

@JohnBoker: Sabit, teşekkürler. Ayrıca bu soru SO burada çok kez sorulmuştur .... –

4

gibi 2D ama bir kez daha koordine:

P1(x1, y1, z1); P2(x2, y2, z2) 

d = SquareRootOf((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) + (z1-z2)*(z1-z2)); 

Açıkçası C# yazılmamış ama fikir olsun.

2

:
P1 = (x1, y1, z1)
P2 = (x2, y2, z2)
mesafedir SQRT((x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2)

Yani kullanabilirsiniz

float deltax = point2[0] - point1[0]; 
float deltay = point2[1] - point1[1]; 
float deltaz = point2[2] - point1[2]; 
float distance = (float) Math.Sqrt(
    (deltax * deltax) + 
    (deltay * deltay) + 
    (deltaz * deltaz)); 
LINQ ile C#
16

bunu yapabilirsiniz:

var dist = Math.Sqrt(point1.Zip(point2, (a, b) => (a - b)*(a - b)).Sum()); 

Pe tek tek koordinatlar arasındaki kare çift farkları toplar ve toplamın aritmetik karekökünü döndürür.

DÜZENLEME: Bu çözüm, bir veya daha büyük olan herhangi bir sayıda boyut için çalışır (bunu göstermek için Austin Salonen'e teşekkürler).

+0

Çok güzel n-boyutlu bir çözüm –

+0

bu harika tek satır görünüyor: D çalışıp çalışmadığını doğrulamak için test yaptınız mı? – MonsterMMORPG

+0

@MonsterMMORPG "point1" ve "point2" nin boyutları eşleştiğinde, kare çift yönlü farklılıkların toplamının karekökünün üretilmesi dışında başka seçeneği yoktur. – dasblinkenlight

10

enter image description here

float distance=(float) Math.Sqrt(Math.Pow(point1[0]-point2[0],2) + Math.Pow(point1[1]-point2[1],2) + Math.Pow(point1[2]-point2[2],2))

İlgili konular