Biorąc pod uwagę tę funkcję, chcę zastąpić kolor losowym generatorem kolorów.
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
Jak mogę to zrobić?
javascript
random
colors
n00ki3
źródło
źródło
0.001
to wynik jest"#4189"
(nieprawidłowy kolor - 4 cyfry)'#'+Math.random().toString(16).substr(2,6)
(źródło: CodeGolf )Odpowiedzi:
Użyj
getRandomColor()
zamiast"#0000FF"
:źródło
Math.round(Math.random()*15)
wynoszą tylko 1:30, podczas gdy szanse innych liczb to 1:15.Wątpię, aby cokolwiek było szybsze lub krótsze niż ten:
Wyzwanie!
źródło
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
zawsze zwróci długość 6. chociaż ta metoda nadal (rzadko) zwraca małe liczby, które dają wyniki takie jak000cf4
lub,0000a7
co myślę, jest nieco hacky. w tych przypadkach czerwony składnik nie przyczynia się do losowego koloru.Oto kolejne spojrzenie na ten problem.
Moim celem było stworzenie żywych i wyrazistych kolorów. Aby upewnić się, że kolory są wyraźne, unikam używania losowego generatora i wybieram kolory „równomiernie rozmieszczone” z tęczy.
Jest to idealne do tworzenia wyskakujących znaczników w Mapach Google, które mają optymalną „unikalność” (to znaczy, że żadne dwa znaczniki nie będą miały podobnych kolorów).
Jeśli chcesz zobaczyć, jak to wygląda w akcji, zobacz http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
źródło
Kto może to pokonać?
Gwarantujemy pracę przez cały czas: http://jsbin.com/OjELIfo/2/edit
Na podstawie komentarza @eterps powyższy kod może nadal generować krótsze ciągi, jeśli szesnastkowa reprezentacja losowego koloru jest bardzo krótka (
0.730224609375
=>0.baf
)Ten kod powinien działać we wszystkich przypadkach:
źródło
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. Rzadko używana jest mantysa! To tylko uwielbione frakcje. Właściwa '12 cyfra”wyjście przyniosą rezultatów, takich jak:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
( dla których muszę założyć, że odpowiada za wyniki @ etertp) na lepsze, więc te losowe liczby niskiej jakości powinny być przeszłością teraz.Nie ma potrzeby mieszania liter szesnastkowych. JavaScript może to zrobić sam:
źródło
Możesz także korzystać z HSL dostępnego w każdej dobrej przeglądarce ( http://caniuse.com/#feat=css3-colours )
Daje to tylko jasne kolory, możesz bawić się jasnością, nasyceniem i alfa.
źródło
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Podoba mi się ten:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
źródło
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. Jest to niebezpieczne, ponieważ prawdopodobieństwo jest niskie (chyba 1 na 4096), więc błąd prawdopodobnie przejdzie przez testy. Zalecana ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Losowe generowanie kolorów z kontrolą jasności:
źródło
źródło
Math.random()
powrót,0.125
to wynik będzie#0.2
(niepoprawny kolor) (trzeba dodać dopełnienie zamiast plasterka)Artykuł napisany przez Paula Irlanda na temat generatora losowych kodów kolorów heksadecymalnych w JavaScript jest absolutnie niesamowity. Posługiwać się:
Oto link źródłowy:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
źródło
0.00001
to wynik jest#a7
(nieprawidłowy kolor)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Oto zwrot rozwiązania dostarczonego przez @Anatoliy.
Musiałem wygenerować tylko jasne kolory (dla tła), więc wybrałem format trzyliterowy (#AAA):
źródło
Jeśli jesteś noobem takim jak ja, nieświadomym o liczbach szesnastkowych itp., Może to być bardziej intuicyjne.
Musisz skończyć z ciągiem takim jak
'rgb(255, 123, 220)'
źródło
Można to bardzo łatwo znaleźć za pomocą wyszukiwarki Google:
Zaktualizowana wersja:
źródło
Krótka odpowiedź z podkładką do dokładnego rozmiaru
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
źródło
Podział tego, jak to działa:
Math.random()*256
pobiera liczbę losową (zmiennoprzecinkową) od 0 do 256 (od 0 do 255 włącznie)Przykładowy wynik: 116.15200161933899
Dodanie
|0
pasków wszystkiego po przecinku.Np .: 116,15200161933899 -> 116
Użycie
.toString(16)
przekształca tę liczbę na szesnastkową (podstawa 16).Przykład: 116 -> 74
Kolejny przykład: 228 -> e4
Dodanie
"0"
powoduje wstawienie go do zera. Będzie to ważne, gdy otrzymamy podłańcuch, ponieważ nasz końcowy wynik musi mieć po dwie znaki dla każdego koloru.Przykład: 74 -> 074
Kolejny przykład: 8 -> 08
.substr(-2)
dostaje tylko dwie ostatnie postacie.Przykład: 074 -> 74
Kolejny przykład: 08 -> 08 (gdybyśmy go nie dodali
"0"
, to dałoby to „8” zamiast „08”)for
Pętla działa ta pętla trzykrotnie, dodając każdy wynik do ciągu barw, tworząc coś takiego:#7408e4
źródło
Tak więc, chociaż wszystkie odpowiedzi tutaj są dobre, chciałem nieco więcej kontroli nad wyjściem. Na przykład chciałbym zapobiec prawie białym odcieniom, zapewniając jednocześnie jasne, żywe kolory, a nie odcienie.
Teraz mogę określić 3 dowolne zakresy, z których można wybierać wartości rgb. Możesz to nazwać bez argumentów i uzyskać mój domyślny zestaw, który zwykle generuje dość żywy kolor z oczywistym dominującym odcieniem, lub możesz podać własną tablicę zakresów.
źródło
Najwyżej głosowany komentarz najwyższej odpowiedzi sugeruje, że podejście Martina Ankerla jest lepsze niż losowe liczby szesnastkowe i chociaż nie ulepszyłem metodologii Ankerla, z powodzeniem przetłumaczyłem ją na JavaScript. Pomyślałem, że opublikuję dodatkową odpowiedź na ten już gigantyczny wątek SO, ponieważ pierwsza odpowiedź zawiera inny komentarz prowadzący do Gist z implementacją JS logiki Ankerla i ten link jest zepsuty (404). Gdybym miał reputację, po prostu skomentowałbym utworzony link jsbin.
https://jsbin.com/qeyevoj/edit?js,console
źródło
Za przyzwoitą losowość.
Losowy kolor
Losowy alfa, losowy kolor.
źródło
Jest tak wiele sposobów na osiągnięcie tego. Oto niektóre zrobiłem:
Generuje sześć losowych cyfr szesnastkowych (0-F)
Niezwykle krótki jednowarstwowy
Generuje poszczególne komponenty HEX (00-FF)
Przepracowany ciąg szesnastkowy (XOR 3 razem tworzy kolor)
źródło
0.125
wynik jest#0.2
(nieprawidłowy kolor)0.125
=3FC0000000000000
in hex IEEE. 3 cyfry szesnastkowe oznaczają wykładnik, 13 to mantysa. Istnieje szansa 1 na 4,5 biliarda, że mantysa jest zupełnie pusta. Testowałem 100 milionów razy w obu przeglądarkach Firefox / Chrome. Po prostu próbujesz to złamać;). nigdy nieMath.random
powinien dać ci 0,125. A jeśli tak, to jest problem z PRNG, który nie jest moim problemem. Frakcje takie jak 0,5, 0,25, 0,0625 itd. Są bezużyteczne, nie zawierają losowości. Może masz rozwiązanie tej ekstremalnej skrzynki, hm? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
ale wolę toKolejny generator losowych kolorów:
źródło
Array.prototype.reduce
sprawia, że jest bardzo czysty.Potrzebuje podkładki dla starych przeglądarek.
źródło
Możesz użyć tej prostej funkcji
źródło
0.001
wynik jest"#4189"
(niepoprawny kolor 4 cyfry)http://jsfiddle.net/XmqDz/1/
źródło
Używaj wyraźnych kolorów .
Generuje paletę wizualnie wyraźnych kolorów.
wyraźne kolory są wysoce konfigurowalne:
źródło
Oto moje dwie wersje losowego generatora kodu szesnastkowego.
źródło
Ta funkcja wykracza poza inne odpowiedzi na dwa sposoby:
Próbuje generować kolory tak wyraźne, jak to możliwe, znajdując, który z 20 prób ma największą odległość euklidesową od innych w stożku HSV
Pozwala ograniczyć odcień, nasycenie lub zakres wartości, ale nadal próbuje wybrać kolory tak wyraźne, jak to możliwe w tym zakresie.
Nie jest super wydajny, ale dla rozsądnych wartości (kto mógłby nawet łatwo rozdzielić 100 kolorów?) Jest wystarczająco szybki.
Zobacz JSFiddle
źródło
Prawie wszystkie poprzednie metody krótkiej ręki generują nieprawidłowe kody szesnastkowe (pięć cyfr). Natrafiłem na podobną technikę tylko bez tego problemu tutaj :
Test
Wypróbuj to w konsoli:
źródło
0.00001
wynik jest"#000a7"
(nieprawidłowy kolor - 5 cyfr)Moja wersja:
źródło
0
sprawia, że kolor nierandom
wystarcza XD0
doffffff
. Co jest idealnym równomiernym rozkładem . To zero służy jedynie do uzupełnienia ciągu, ze względu na względy użytkowania przeglądarki. Sugeruję, abyś bardziej uważał na to rozwiązanie.mapa (zwraca zawsze prawidłowy kolor rgb)
Pokaż fragment kodu
źródło
Za pomocą colorchain.js można wygenerować sekwencję kolorów o różnych odcieniach.
źródło