[JS] μλ°μ€ν¬λ¦½νΈ λλ€ μμ(Random Color) μμ±νκΈ°
HEX μμ μ½λλ RGB μμμ RRGGBB
νμμ 16μ§μλ‘ νννλ€. HEX μ½λμ μ΅μ κ°μ #000000
(κ²μμ, 10μ§μ 0), μ΅λκ°μ #FFFFFF
(ν°μ, 10μ§μ 16777215)μ΄κΈ° λλ¬Έμ 0~16777215 μ¬μ΄μ λλ€ μ«μλ₯Ό 16μ§μλ‘ λ³ννκ³ #
λ₯Ό λΆμ΄λ©΄ λλ€ν HEX μμ μ½λκ° λλ€.
export const getRandomColor = ({
transparent = false,
transProbability = 0.2,
} = {}) => {
// transProbability νλ₯ λ‘(κΈ°λ³Έκ° 20%) ν¬λͺ
κ° λ°ν
if (transparent && Math.random() < transProbability) return "transparent";
// 16μ§μλ‘ 0xFFFFFF (RGBμ μ΅λκ°)
const MAX_COLOR_VALUE = 16777215;
// ν°μλ ν¬ν¨νκΈ° μν΄ + 1
const randomColor = Math.floor(Math.random() * (MAX_COLOR_VALUE + 1));
return `#${randomColor.toString(16).padStart(6, "0")}`;
};
Math.random()
λ©μλλ 0 μ΄μ 1 λ―Έλ§(0 ≤ x < 1)μ λμλ₯Ό λ°ννλ©°, μ΄ λμλ€μ κ±°μ κ· λ±νκ² λΆν¬λλλ‘ μ€κ³λμ΄ μλ€(approximately uniform distribution). μ¦, 0κ³Ό 1 μ¬μ΄μ λͺ¨λ μ«μκ° κ±°μ λμΌν νλ₯ λ‘ μ νλλ€κ³ λ³Ό μ μλ€.
λ°λΌμ 쑰건μ Math.random() < n
μ 0 ≤ x < 1 λμ κ°μ΄ n
λ³΄λ€ μμ κ²½μ°μ νλ₯ μ μλ―Ένλ©°, n
μ νλ₯ λ‘ ν΄μν μ μλ€. μλ₯Ό λ€μ΄ n = 0.2
μΌ λ Math.random()
μ΄ 0.2λ³΄λ€ μμ κ°μ λ°νν νλ₯ μ 20%μ΄λ€.
RGBλ Red(R), Green(G), Blue(B) 3κ°μ§ μμ μ±λλ‘ κ΅¬μ±λλ©° κ° μ±λμ 8λΉνΈλ‘ ννλλ€. 8λΉνΈλ 2^8=256κ°μ μλ‘ λ€λ₯Έ κ°μ κ°μ§ μ μλ€(0-255). RGBλ‘ ννν μ μλ μ΄ μμ μλ 256^3=16777216 μ΄μ§λ§ 0λΆν° μμνλ―λ‘ 0-16777215 λ²μλ₯Ό κ°μ§λ€.
- (16)
#000000
= (10)0
=RGB(0, 0, 0)
- (16)
#FFFFFF
= (10)16777215
=RGB(255, 255, 255)
κΈ μμ μ¬νμ λ Έμ νμ΄μ§μ κ°μ₯ λΉ λ₯΄κ² λ°μλ©λλ€. λ§ν¬λ₯Ό μ°Έκ³ ν΄ μ£ΌμΈμ