Ne yazık ki, Süpürme Hattı Algoritmasını anlamada hala çok güçlü değilim . Konuyla ilgili tüm makaleler ve ders kitapları zaten okundu, ancak anlayış hala çok uzak. Daha açık hale getirmek için elimden geldiğince çok alıştırma yapmaya çalışıyorum. Ancak, gerçekten ilginç ve önemli görevler benim için hala zor.
Aşağıdaki alıştırmada her şeye kadir Jeff Erickson'un Çizgi Segmenti Kesişiminin ders notlarında buldum .
Alıştırma 2. zamanında düzlemde tane kesişip kesişmediğini belirlemek için bir tarama çizgisi algoritmasını tanımlayın ve analiz edin . Her daire merkezi ve yarıçapı ile belirtilir, bu nedenle girdi ve dizilerinden oluşur . Düşük seviyeli ilkelleri doğru bir şekilde uygulamaya dikkat edin.
Karmaşık bir şeyi daha kolay hale getirmeye çalışalım. Çevrelerin kesişimi hakkında ne biliyoruz? Çizgilerin kesiştiği yerde hangi analog bulunabilir. Bitişik olmaları durumunda iki çizgi kesişebilir, kesişmek için hangi dairenin sahip olması gerekir? dairelerin merkezi, ve çevreleri arasındaki mesafe olsun . Birkaç vakayı düşünün:
Durum 1: ise çözüm yoksa, daireler ayrıdır.
Durum 2: Eğero zaman çözüm yoktur çünkü bir daire diğerinin içinde bulunur.
Durum 3: ve ise daireler çakışıyor ve sonsuz sayıda çözüm var.
Yani, kavşak koşulları hazır gibi görünüyor, elbette yanlış koşullar olabilir. Öyleyse lütfen düzeltin.
Algoritma. Şimdi kesişen iki daire arasında ortak bir şey bulmamız gerekiyor. Analogdan satıra kesişme ile olay kuyruğuna ekleme koşulu ve silme koşulu olması gerekir. Olay noktasının, dikey tarama çizgisinin temas ettiği ilk ve son noktaların x koordinatı olduğunu varsayalım. İçin dairenin insert ilk noktaya biz On durumuna kavşak ve çek son noktadan biz çevreyi sil üzerine, en yakın çevrelerle (kontrolü için 3 vaka yukarıda belirtilmiştir) durumu .
Süpürme hattı algoritması için yeterli gibi görünüyor. Yanlış bir şey varsa veya farklı yapılması gereken bir şey varsa, düşüncelerinizi bizimle paylaşmaktan çekinmeyin.
Zeyilname :
Dikey tarama çizgisi daireye ilk kez dokunduğunda bir daire eklerim ve tarama çizgisine son kez dokunduğunda bir daireyi durumdan kaldırırım. Kavşak kontrolü, en yakın önceki daire için yapılmalıdır. Biz bir çevre ekledi Eğer statü ve daha önce eklenen başka daire zaten vardı ve bu nedenle geçirgen daire öylesine bir kavşak olabilir, "kapalı" değildi, hâlâ oradaydı.
status
Süpürme çizgisiyle kesişen daireleri koruduğunu varsayıyorum. Şu anda 100 daireniz olduğunu status
ve bir ekleme etkinliğini işlediğinizi ve 101. daireyi eklediğinizi varsayalım . Kavşağı kontrol etmek için kaç daireyi karşılaştırıyorsunuz? Karşılaştırılacak çevreleri nasıl seçersiniz?