Python

2010-12-04 17 views
9

kullanarak noktaların kümesinin ortasını nasıl alırım Bir nokta kümesi tarafından oluşturulan bir şeklin merkez noktasını (x, y) almak istiyorum.Python

Bunu nasıl yaparım?

+5

"Merkez" i tanımlayın. Ağırlık merkezi? Geometrik Merkez? Başka bir şey? –

+0

Bu, matematikle ilgili bir soruya benzer. Bence bu exellent kitabında: http://www.openbookproject.net/thinkcs/ Python veya C++ 'da eğer hatırlamaya çalıştığınız şeylerin bazı örnekleri vardır. – mRt

cevap

14

Eğer centroid anlamına gelirseniz, sadece tüm noktaların ortalamasını alırsınız.

x = [p[0] for p in points] 
y = [p[1] for p in points] 
centroid = (sum(x)/len(points), sum(y)/len(points)) 
+4

Python 2.x'de tamsayı bölüştürme konusunda dikkatli olun: her noktanın bir tamsayı x değeri varsa, merkezinizin x değeri bir tamsayıya yuvarlanır. '__future__ import division' öğesini kullanın, bölmeden önce bir float'a dönüştürün veya Python 3'ü kullanın. –

+5

Eğer 'points' iki boyutlu bir Numpy dizisiyse, muhtemelen 'points.mean (0)' kullanabilirsiniz. – Philipp

+0

Teşekkür ederim istediğim bu. –

5

Bir noktanın bir tuple (x, y) olduğunu varsayalım.

x,y=zip(*points) 
center=(max(x)+min(x))/2., (max(y)+min(y))/2. 
+0

'da olduğu gibi ayrı segmentler için Green'in teoremini kullanmalısınız, maksimum + min değil, maks - min mi? –

+0

@Thomas K: Kesinlikle haklısınız. – Kabie

+0

bunun ne yaptığını anlamaya çalışıyor ... neden min'i maks'e ekliyoruz? @colin'in cevabı bana mantıklı geliyor, ancak bunun neden işe yaradığını da bilmiyordum. – Futile32