Noktaların Ağırlık Merkezi

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:

  • Nesne 1: 20 kg., (2.0, 3.0)
  • Nesne 2: 10 kg., (-1.0, 2.2)
  • Nesne 3: 35 kg., (4.2, -1.8) Bu üç nesnenin ağırlık merkezinin koordinatları, $(x, y)$ şu şekilde hesaplanabilir:
$$ x = \frac{(20)(2.0) + (10)(-1.0) + (35)(4.2)}{20 + 10 + 35} = \\ y = \frac{(20)(3.0) + (10)(2.2) + (35)(-1.28)}{20 + 10 + 35} = $$

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:

  1. Her nesneyi ve ağırlık merkezini iki boyutlu uzayda göstermek.
  2. Nesnelerin boyutlarını ağırlıkları ile doğru orantılı belirlemek. Yani daha ağır kütlelerin büyüklükleri daha fazla olacak.

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


[ 0.10712303  0.16747912  0.02302747  0.2191433   0.58925208]
[ 0.35025793  0.52069013  0.35190416  0.33383322  0.7308677 ]
[ 24.86601742   6.26281183  15.68587469  25.83170638  13.4952168 ]

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


0.205321748356 0.41765090612

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)