C# GDI+ Projesi

Hedef:
-Form' a noktalar eklenmesini ve bu noktalar üzerinde silme ve yer değiştirme işlemleri yapılmasını sağlayan bir arayüz oluşturmak.
-Eklenen noktalar üzerinde K-Means ve Nearest Neighbor Algoritmalarının uygulanması.

Download .exe : www.bit.ly/GSiJSx

K-Means Algoritması

P -> Nokta Sayısı
C -> Cluster Sayısı
CP-> O kümeye ait nokta sayısı

if (olusturuldu == 1)
{
   do
   {
      for i = 0 -> P
      {
          for j = 0 -> C
         {
             distance = uzaklıkBul(point[i], cluster[j])
             if (distance < min)
             {
             min = distance;
             minIndex = j;
             }
        }
        noktaBoya(p[i], cluster.color)
        min = 1000;
        clusters[minIndex].Add(p[i]);
      }
      degismedi = 0;
      for i = 0 -> C
      {
         for j = 0 -> CP
         {
         koordinatEkle(p[j])
      }
      merkezeCiz(c[i]);
      if (konumEsit(cluster.eskiKonum, cluster.yeniKonum)
      {
          degismedi++;
      }
   }
} while (degismedi < C);
}

Öncelikle cluster noktaları oluşturuldu mu diye kontrol ediyoruz, oluşturulduysa tüm küme
başları yer değiştirmeyene kadar devam edecek olan do…while döngüsünü başlatıyoruz. Tüm cluster başları yer değiştirmemişse kümeler son halini almış diyoruz ve döngüden çıkıyoruz. Daha sonra tüm noktaların en yakın olduğu küme başlarını buluyoruz ve o noktayı o küme başının sahip olduğu renge boyuyoruz. Son olarak kümeye en yakın olarak bulduğumuz noktaların ağırlık merkezini buluyoruz ve o küme başını ağırlık merkezine alıyoruz. Noktaların küme başlarına olan uzaklıklarını tekrar hesaplıyoruz ve tüm küme başları son konumuna gelene kadar aynı işlemleri tekrarlıyoruz.


Nearest Neighbor Algoritması

Point p1 = pList[ilk];
double distance, min = 1000;
int minIndex = 0;
int[] dizi = new int[pList.Count];
dizi[ilk] = 1;
for j = 0 -> P
{
   for i = 0 -> P
   {
       if (i != ilk && dizi[i] != 1)
       {
       distance = uzaklıkBul(p[i], p[j]);
       if (distance < min)
       {
           min = distance;
           minIndex = i;
       }
    }
}
p1 = pList[minIndex];
dizi[minIndex] = 1;
min = 1000;
enYakınCiz(p[j],p[minIndex]);
}


Kullanıcıdan ilk nokta konumunu alıyoruz ve bu noktayı işaretliyoruz. Bu noktaya en yakın noktayı buluyoruz ve bulunan nokta ile arasına çizgi çekiyoruz. Yeni noktamız en son bulunan nokta oluyor ve bu noktanın ziyaret edildiğini göstermek için işaretliyoruz. Tüm noktalar işaretlenene kadar aynı işlemleri tekrarlıyoruz.

Yorumlar

  1. exe'nin kaynak kodlarını paylaşma şansın yok mu acaba ? :)

    YanıtlaSil

Yorum Gönder

Bu blogdaki popüler yayınlar

String Matching - Boyer-Moore Algorithm

String Matching - Brute Force

String Matching - Horspool's Algorithm