n = 100 ki; Nasıl 100 görsel olarak ayrı renkler elde edebilirim? Bu matematiksel olarak mümkün mü?
Nasıl herhangi bir doğal sayı n için n farklı renkler üretmek için?
Sen sürekli diğer 2 değerlerini tutarken HSL dönüştürmek ve daha sonra renk (H) değerleri arasında yineleme istiyorum.
Her değer için, geri RGB'ye HSL dönüştürmek .
Benim cevapları Bkz burada ve burada .
senin N çok büyük olduğunu ve bu nedenle renkler görsel olarak ayrı DEĞİLDİR Eğer o noktada aynı tonlar tümü üzerinde yeniden yineleme ve doygunluk ya da parlaklık değişir diğer bileşenleri değiştirebilir. Yani temelde kullanmak tonu değerlerinin maksimum sayıda olabilir ve bu isabet kez farklı bir doygunluk veya parlaklığa sahip yeniden başlayabilirsiniz.
100 renkten çok, ama sıra seyrek HSB veya HSL boşlukta olabildiğince bunları dağıtarak bunu yapmak mümkün olabilir; RGB yapıyor muhtemelen zordur.
Örneğin, 10 farklı tonları, 4 farklı doygunluk düzeyleri ve 3 farklı parlaklık ayarlarını kullanmaya karar olabilir, yani 120 renge seni verecekti. Dikkatli doygunluk ve parlaklık değerlerini almak gerekir; İnsan gözü karmaşık ve kafa karıştırıcı sensörler bulunmaktadır. Eğer bir koni olarak renk alanını tedavi, muhtemelen her hafiflik / doygunluk seviyesinde tonlar farklı sayıda isteyeceklerdir.
İşte wikipedia bir bağlantı var HSB üzerinde girişin .
Düzenle:
Bu alanda herhangi bir uzmanlığa sahip olmayan ve benim matematik becerileri oldukça ortalama. Ama birçok cevaplar burada önermek daha Geçenlerde benzer bir şey yapmaya çalıştık ve bir çözüm bulamadık çünkü bu sorunun çözümü, daha karmaşık ve ilginç görüş var.
Renk farkı
Rengin algılanması ders öznel ait olmakla birlikte, insanlar arasında önemli bir mutabakat vardır. Örneğin, tüm kırmızı, yeşil ve mavi çok farklı renkler olduğunu kabul edebilir ve hatta renk körü insanlar siyah ve beyaz çok farklı olduğunu kabul edersiniz.
RGB
Bilgisayar sistemlerinde renk en yaygın gösterimi vektörü (R, G, B) gibi basit bir mesafe fonksiyon önermektedir ki

Aralığını ayarlamak Sağlar R , g ve b için [0, 1] ve görmek nasıl çalıştığını:
- Kırmızı (1, 0, 0) ve kırmızı (1, 0, 0) uzaklığını sahiptir 0 , açık olmalı
- Kırmızı (1, 0, 0) ve sarı (1, 1, 0) arasında bir mesafe vardır , 1 , bir mesafeden daha kısadır
- Kırmızı (1, 0, 0) ve mavi (0, 0, 1) olan (2) sqrt , burada akla yakındır
Çok uzak çok iyi. Sorun ancak mavi ve kırmızı aynı mesafeyi olması 1 siyahtan (0, 0, 0) görüntüye bakarken, ancak bu doğru tutun görünmüyor:

Ayrıca sarı (1, 1, 0) ve eflatun (1, 0, 1) her ikisi de aynı mesafeye sahip olan 1 beyazdan (1, 1, 1) , hangi mantıklı görünmüyor ya:

HSV renk uzayı
Bunun için o analog ölçümlerini varsaymak güvenli olduğunu düşünüyorum HSV renk uzayı renk düzenleri aynı sorunlar var. Bu renk şemaları rengi karşılaştırmak için tasarlanmamıştır.
CIEDE2000
Neyse ki, bilim adamları zaten renkleri karşılaştırmak için iyi bir yol bulmaya çalışırken vardır. Bazı ayrıntılı yöntemler ile geldi, son bir varlık CIEDE2000

(makalede açıklanan tam formül büyük )
Bu metrik çok iyi mavi tonları ayırt etmek mümkün görünmektedir Aslında gibi, dikkate insan algısını alır. Bu yüzden bizim renk farkı fonksiyonu olarak kullanmak söyleyebilirim.
Renk Toplama Algoritma
naif çözüm
Bazı yanıtlar aşağıdaki algoritmayı önerdi
colors = []
for n in range(n):
success=False
while not success:
new_color = random_color()
for color in colors:
if distance(color, new_color)>far_enough:
colors.append(new_color)
success = True
break
Bu algoritma bazı sorunları var:
renk aralığı optimal değildir. Biz on line sayılar gibi olmak renkleri hayal ederse, üç sayı optimal böyle aralıklı olacaktır:
| Bir ----- b ----- c |
a, b ve c hareket etmeden orada bir ek bir numara Paketleme tüm renkleri realigning açıkça daha kötüdür.
Algoritma sonlandırma garanti edilmez . Yeterince listede mevcut renkleri oluşturacak hiçbir renk nedir yoksa? Döngü sonsuza kadar devam edecek
Uygun çözüm
Eh .. Bir tane yok.
Eğer değil bir Sorunuzun cevabı, ancak, n maksimum değere sahiptir ve uygulama izin veriyorsa, böyle bir renk önceden tanımlanmış listesini kullanabilirsiniz:
http://en.wikipedia.org/wiki/List_of_colors
Bir avantajı renk körlüğü olan kişiler için bir araç ipucu olarak bir insanca okunabilir renk adını gösterilebilir olmasıdır.
Yeni başlayanlar için, RGB alanını kullanmayın; Bu sorun için bir kötü renk alanını bulmak zordur. (Eğer görüntü için veya baskı için ya siyah yakın ya da beyaz yakınında ayırt edilemez renklerin büyük numaralarına sahip renkleri kullanıyor olmanıza bağlı.)
Eğer Lab alanı kullanırsanız, renklerin görsel yakınlığını (baskı ve görüntüleme için sırasıyla) ölçmek için algısal renk modelleri (CIE 1996? 2000 CIE) vardır.
Sen bir kere renkleri hesaplamak için gidiyoruz demek ve sonucu depolamak ya da anında recomputed gerekiyorsa (ve bu durumda o deterministik ya da olmamak varsa) yoktur. Açıkçası iyi bir set oluşturmak için nasıl herhangi bir tartışma olduğunu bağlı olacaktır.
Ben eşit renk alanı eksenlerini bölünmesi tavsiye ediyor olsa da (8 içine söylemek) ve başlangıç noktaları olarak bu kullanarak çok daha etkili herhangi bir rasgele işlemi daha olacaktır. Kesinlikle sadece komşularıyla herhangi bir noktanın karşılaştırmak gerekir (ve onlar sette zaten görünür olmaları gerekir) size karşılaştırmaların çok sayıda kazandıracak.
Evet. ayrı tanımlama biz söylemek istediğini maksimum ayrı renkler mümkün olduğunca diğer tüm renklerden olan renkler derken sonra bir renk alana erteleyerek bir ürünüdür. Ama cevabı değişmez renk alanı değiştirmek için gitmiyor beri. Ve insan gözü ve nasıl insan gözü ile daha iyi uyan CIE-lab dE2000 renk mesafesi gibi renk sert tüm hesaplamaları yineleme yapar bkz şey uygulayan, ancak statik bir liste kolaylaştırır. İşte 128 girdileri var.
private static final String[] indexcolors = new String[]{
"#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
"#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
"#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
"#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
"#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
"#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
"#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
"#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",
"#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
"#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
"#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
"#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
"#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
"#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
"#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
"#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58"
};
İşte bir görüntü olarak 256 ilk.

(Soldan sağa) (yukarıdan alt). her bir renk ColorSpace içinde mümkün olduğunca eşit uzaklıkta olmasını sağlamış eğer birkaç farklı renkleri elde etmek mümkün olabilir. Bu arama tablosu yerine başlangıcında N oluşturulması ve daha sonra renk aralığını haritalama daha önceki tüm renk itibaren maksimum tat her ek renk alır. Yani evet, kaba kuvvet ve yüksek düzeyde renk dsitance algoritması ve hazırsınız renkleri kendiniz bu aynı seti yapmak. Bir iki gün boyunca.













