Bir küp içindeki nesneleri birbirleri arasında maksimum mesafe olacak şekilde dağıtın


11

Uzayda birden çok nesneyi izlemek için renkli bir kamera kullanmaya çalışıyorum. Her nesne farklı bir renge sahip olacak ve bir nesneye atanan her rengin mümkün olan diğer nesnelerdeki herhangi bir renkten olabildiğince farklı olduğundan emin olmak için çalıştığım her nesne arasındaki farkı ayırt edebilmek için çalışıyorum.

RGB uzayında, hepsi 0 ile 255 arasında değerlere sahip üç . Bu küpte , rengini kendi aralarında çok fazla mesafe olacak şekilde dağıtmak istiyorum. diğerleri. Ek bir kısıtlama, ve (veya olabildiğince yakın) renklerine dahil edilmesidir , çünkü hiçbirimin nesneler her iki rengi de alır çünkü arka plan muhtemelen bu renklerden biri olacaktır.(0,0,0)/(255,255,255)n(0,0,0)(255,255,255)n(n2)

Muhtemelen, (siyah ve süre dahil) 14'ten fazla olmayacaktır.n

Bu renkleri nasıl alacağınıza dair herhangi bir işaretçi için şimdiden teşekkür ederiz.


2
Bence sadece iki boyutlu bir alan düşünmelisiniz, çünkü kameranız muhtemelen aynı renge ancak farklı yoğunluklara sahip nesneleri ayırt edemeyecektir. Sorun yine de ilginç.
Stéphane Gimenez

Üç boyut üç renk düzleminden gelir: kırmızı, yeşil ve mavi, her biri bağımsız olarak 0-255 arasında değer alabilirler. RGB alanında, yoğunluk olduğunu düşünmüyorum. Bunun için daha uygun olabilecek başka renk uzayları da var, çünkü onlar hakkında çok fazla şey bilmememe rağmen sadece 2B olabilirler.
Matt

Nesnelere dökülen ışık miktarını tam olarak kontrol edebiliyorsanız, Tamam'ı tıklatın. RGB alanında (100, 100, 100) ve (200, 200, 200) farklı yoğunluklarda aynı renk (gri) dediğim şey.
Stéphane Gimenez

@Matt, Stephane, RGB küp yerine bir HSL veya HSV küpü kullanmanızı önerir. Renkler aşağı yukarı eşleştirilir, ancak daha sonra 2B harita için S bileşenini yoksayabilirsiniz. Ayrıca, renklerinizi benzer bir estetik "tonda" tutacak seçilmiş bir SV veya SL'de yalnızca H üzerinde 1D'lik bir ölçek önermek için daha ileri gideceğim. 1D üzerindeki eşit dağılım algoritması da daha basit!
Jason Kleban

1
Evet, maksimum ikili mesafe. HSV aslında RGB'den daha iyi sonuçlar veriyor gibi görünüyordu. Her üç HSV düzlemini de kullanarak, her ideal renge olan mesafeye bağlı olarak ayrı renkleri daha iyi seçebilirim.
Matt

Yanıtlar:


4

Tüm renkler RGB küpünün yüzeyinde olacaktır, eğer yanılmıyorsam, tüm elektrik yükünün elektrik iletkenlerinin yüzeyinde göründüğü gibi. Bu, renkleri belirlemek için aşağıdaki yöntemi önerir:

  • RGB renk uzayını XYZ Kartezyen alanı olarak yorumlar;
  • aday renkleri yüklü parçacıklar, örneğin elektronlar olarak yorumlamak;
  • benzetilmiş tavlama yoluyla sistemin düşük enerji durumunu bulmak;

İçin , son derece doğru bir simülasyon oldukça hızlı olmalıdır; bir Runge Kutta tekniğini kullanabilirsiniz, hatta Euler yöntemini küçük bir adımla bile muhtemelen yapabilir (uygulamak / anlamak çok daha kolay). İlgilenilen sayısal entegrasyon / kareleme teknikleri için "Sayısal Tarifler" serisini önerebilirim.n15

Parçacıklar birleştikten sonra, noktaları renkler olarak yorumlayarak renklerin düzenini elde edersiniz. Başlangıçta, parçacıklar küçük bir aralık ile küpün yüzeyinde rastgele düzenlenebilir (yakınsama ve kararlılık sorunlarına yardımcı olur). Küpün yüzlerine küçük gruplar koymak işe yarayacaktır.

Yerel (küresel yerine) minimumda takılmaktan kaçınmak için, yakınsamadan sonra küçük bir rastgele elektrik alanını "darbeleyebilir" ve sistemin aynı yapılandırmaya mı yoksa farklı bir alana mı geri döndüğünü görebilirsiniz. Rastgele yerleştirilmiş parçacıkların bu senaryoda bunu yapması pek olası değildir, ancak mümkündür.

DÜZENLE:

Yorumlarda belirtildiği gibi, optimal çözümlerin sadece yüzeyde olması gerektiği varsayımı muhtemelen ayrı bir durumdaki tüm geometriler için geçerli değildir.

Neyse ki, bunun yukarıda açıklanan tekniğin geri kalanında çok az etkisi vardır. Parçacıklar başlangıçta herhangi bir yere yerleştirilebilir; stabilite ve kapsama alanı için parçacık çiftleri arasında biraz boşluk bırakın ve sistemi yakınsama için tekrarlayın, ardından sistemi farklı (muhtemelen daha iyi) yapılandırmaya yakınlaştırabileceğinizi görmek için birkaç kez (muhtemelen artan yoğunlukta) darbe yapın. .

Ayrıca bu yöntemin "(harmonik?) Parçacık çiftleri arasındaki ortalama mesafeyi" en üst düzeye çıkaracağına inanıyorum. Partikül çiftleri arasındaki minimum mesafeyi veya partikül çiftleri arasındaki başka bir ortalama (geometrik?) En üst düzeye çıkarmak istiyorsanız, bu size en iyi çözümü vermeyebilir.

Her halükarda, bu tekniğin size yaklaşık olarak en uygun renk setlerini bulmanın kolay bir yolunu vereceğini hissediyorum ... muhtemelen kullanım durumunuz için gerçek "optimum" çözümler elde etmek gerekli değildir. Doğal olarak, kesin ve makul olarak optimal bir çözüm isteniyorsa, sayısal simülasyon muhtemelen en iyi yol değildir.


3
İçin en iyi çözüm küpün merkezinde düğümlerden biri koyuyor ve varsayımlar doğru değil bu yüzden, küpün köşelerinde başkalarını koyarak. n=9

@SaeedAmiri İlginç gözlem ... sorun, yük yoğunluklarının olağan fiziksel tartışmasına kıyasla, bu sorunun ayrık doğasıyla çok iyi olabilir. Bununla birlikte, fiziksel tavlama ile sayısal simülasyonun tarif ettiğiniz çözümü hala bulamamasının bir nedeni olmadığını belirtmek gerekir; yorumunuzu ve bu içgörüyü yeniden düzenlemek için cevabı düzenleme.
Patrick87

Bunu matlab'da (simulannealbnd ile) nasıl yapıp yapamayacağımı anlayacağım. Hayal ettiğim zorluk, problemi matlab'ın en aza indirmeye çalışabileceği bir matematiksel işleve dönüştürmektir.
Matt

ps Benim ilk düşüncem bir polihedron (icosahedron) köşelerini kullanmak oldu, çünkü ben de çözüm muhtemelen yüzeyde onları olacağını düşündüm, ama sonra bunun doğru olup olmadığını emin değildi.
Matt

Matlab'da, bir dizi (x, y, z) nokta veren bir fonksiyon yazdım, setteki her bir nokta çifti arasındaki çift öklid mesafelerinin toplamını hesaplar. Sonra birini sonuca bölerim ve matlab'ın bu fonksiyonun minimumunu bulması beklenir. Ancak matlab doğru bulmaz, örneğin 4 3B nokta için şu x1, x2, x3, x4; y1, y2 .... noktalarını (0-1 aralığı) döndürür: 0.0001, 0.0031, 0.9993, 0.9920 ; 0.9970 0.0004 0.9919 0.0030; 0.0030 0.0003 0.9973 0.5756. Yine de, bunun bir matlab sorunu olduğunu düşünüyorum, bu yüzden kabul edeceğim.
Matt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.