Bu örnekte bir grup kütlenin iki boyutlu uzayda ağırlık merkezini bulacağız. Önce hızlıca bir hatırlatma. Diyelim ki elimizde üç nesne var. Bu nesnelerin kütleleri ve koordinatları şu şekilde verilmiş olsun:
Yani kısaca söylemek gerekirse noktaların koordinatları kütleleri ile ağırlıklandırılarak merkez koordinatları elde ediliyor. Bu hesaba göre daha ağırlık merkezi, daha ağır olan noktalara daha yakın oluyor.
Gelelim bizim yapmak istediklerimize:
Grafik ve nümerik işlemler yapacağımız için gerekli paketleri en baştan tanımlayalım.
In [1]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
İlk işimiz nesnelerin ağırlıklarını ve koordinatlarını rassal olarak üretmek olsun.
In [2]:
n = 5 # Toplam nesne sayısı
ust_ag = 30 # Olabilecek en yüksek ağırlık
x_degerleri = np.random.rand(n)
y_degerleri = np.random.rand(n)
agirliklar = ust_ag*np.random.rand(n) #
print x_degerleri
print y_degerleri
print agirliklar
Her noktanın koordinatlarını rassal olarak ürettik. Şimdi ağırlık merkezini bulabiliriz.
In [3]:
x = 0
y = 0
toplam_agirlik = sum(agirliklar)
for i in range(0, n):
x += (agirliklar[i]*x_degerleri[i])/toplam_agirlik
y += (agirliklar[i]*y_degerleri[i])/toplam_agirlik
print x, y
Grafiği çizmeye hazırız.
In [4]:
plt.plot(x_degerleri, y_degerleri, 'ro') # Nesneler kırmızı yuvarlaklar
plt.plot(x, y, 'b*', ms=15.0) # Ağırlık merkezi büyük mavi bir yıldız
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.grid(True)
Ayrıca her nesneyi ağırlığına bağlı olarak farklı boyutlarda çizebiliriz. Tek yapmamız gereken ağırlıklarını en yüksek ağırlığa (ust_ag) göre oranlamak. Yani yarıçaplarını belirlemek.
In [5]:
for i in range(0, n):
oran = agirliklar[i] / ust_ag
plt.plot(x_degerleri[i], y_degerleri[i], 'ro', ms=50*oran)
plt.plot(x, y, 'b*', ms=15.0)
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.grid(True)