Listedeki 1300 Değeri Sıralama
-
Pozisyon ve bir componentin tutulduğu classım var. Bu classdan 1300 tane üretip listeye ekliyorum. Grid üzerinde bir şekil çiziyorum ve bu şekilin orta noktasını buluyorum. Orta noktadan başlayarak çizilen şekil içerisindeki noktaları bulmam gerekiyor.
Flood fill mantığını kullanmaya çalışıyorum ama 4 taraf (ileri, geri, sağ, sol) için 1300 değeri bulunan listeyi sıralamak performansa ciddi şekilde etki ediyor ve işlem bitene kadar kasma meydana geliyor.Şuan kullandığım kod mantığı ise aşağıdaki şekilde.
Çizilen şekilin orta noktasını bul. Bu noktaya denk gelen componenti al ve listeye ekle.
Liste uzunluğu kadar for döndür {
Seçilen sınıfın x pozisyonu -1'e eşit olanı bulmak için listeyi bu pozisyonu sırala. Sıradaki ilk sınıf şekilin içindeyse listeye ekle.
Seçilen sınıfın x pozisyonu +1'e eşit olanı bulmak için listeyi bu pozisyonu sırala. Sıradaki ilk sınıf şekilin içindeyse listeye ekle.
Seçilen sınıfın y pozisyonu -1'e eşit olanı bulmak için listeyi bu pozisyonu sırala. Sıradaki ilk sınıf şekilin içindeyse listeye ekle.
Seçilen sınıfın y pozisyonu +1'e eşit olanı bulmak için listeyi bu pozisyonu sırala. Sıradaki ilk sınıf şekilin içindeyse listeye ekle.
}
For döngüsü 10'a kadar çalışsa 10*4 = 40 kere 1300 değeri olan listeyi sıralıyor. Buna bir çözüm bulmam lazım ve aklıma bir şey gelmiyor. Önerilerinizi bekliyorum.
Not : Listeyi sıralamak için System.Linq altındaki .OrderBy fonksiyonunu kullanıyorum.
List<Örnek> örnekList = new List<Örnek>();
örnekList = örnekList.OrderBy(x => yakındanuzağasırala(x.position, hedef pozisyon)); -
Points in Polynom (PIP) mevsuzundan bahsediyorsun sanirim computer graphics dersinde bunun icin 1-2 algoritma gormustuk. Incele eger oysa nette efficient algoritmalar bulabilirsin