Bu diğerini takip eden bir soru .
Dünya temsilimi (şu anda 160Kmx160Km) çizim alanına (şu anda 800x600 piksel) sığdırmak için ortak / tipik / en iyi desen olup olmadığını bilmek istiyorum .
En az dört farklı yaklaşım düşünebilirim:
Saf biri (şimdiye kadar yaptığım gibi). Ben sc(vector)
sadece aktarılan vektörün küçültülmüş bir kopyasını döndürecek küresel bir işlev uyguladı . Bu tabii ki işe yarıyor, ama gibi bir kod yazmak zorunda bana:
drawCircle(sc(radius), sc(position))
Sarma fonksiyonları . Her biri orijinal ara katman yazılımını saran birkaç işlev tanımlayabilirim. Örneğin myDrawCircle
, önce ölçeklendirme gerektiren argümanları ölçeklendirebilir ve sonra drawCircle
ikincisiyle çağırabilirim . Bu benim kod belki daha okunabilir ve bakımı daha kolay hale getirecek, ama aptalca geliyor sarma fonksiyonları bir sürü yazmalıyım.
İşlev dekoratörü . Sınıfın bir örneği olan tüm parametreler için otomatik ölçeklendirme sağlayarak varolan ara katman yazılımı işlevlerini dekore edebilirim Vector3D
, ancak sorun, bu işlevlerin aynı parametrelerle list
veya aynı şekilde çalışması Vector2D
ve dekoratörün bilmenin hiçbir yolu olmamasıdır. hangi listelerin ölçeklendirilmesi gerekir (örneğin yarıçap) ve hangilerinin değil (RGB değerleri).
Yüzey başlatma . Üzerine çizeceğim yüzeyi tanımlarken ölçeklendirme faktörünü tanımlayabilirim (böylece piksel olarak değil, metreyi parametre olarak kullanırım). Bu benim için şeffaf bir şekilde işe yarayacaktı ve benim seçim çözümüm olacaktı, ancak elbette ara katman yazılımında uygulanmalı, bu yüzden gerçek bir seçenek değil.
... her neyse: bu çok yaygın bir sorun olduğundan, bulamadığım bu sorunu zarif bir şekilde çözen yerleşik bir kalıp olup olmadığını merak ediyorum.
Not: Bu proje için python kullanıyorum ( pygame ile ), ancak - python / pygame'e özgü bir cevap çok takdir edilse de, modelin somut uygulaması yerine genel / yüksek düzeyli tanımıyla daha fazla ilgileniyorum.
Zamanınız ve uzmanlığınız için şimdiden teşekkür ederiz.