2011-03-21 3 views
2

원본 색상과 정규 분포를 기반으로 임의의 색상을 생성하고 싶습니다. 따라서 스크립트를 말하는 임의의 질감을 만들 수 있습니다. "그래,이 색상은 꼭해야 할 일반적인 색상입니다. 사용하지만, 당신이 크게 달라진다면 지금은 괜찮습니다. "랜덤 색상 편차 정규 분포

Box-Muller 변환을 사용하여 JavaScript로 작성했습니다. 그러나 모든 R, G 및 B 값에 대해 독립적으로 정규 분포를 사용하면 원치 않는 스파이크가 발생합니다. 예를 들어, 기본 색상이 밝은 회색 인 경우, 매우 빨간색, 매우 녹색 또는 매우 파란색 픽셀을 얻습니다. 이것은 지금까지 ("0, 255"인 최소 및 최대) 내 스크립트입니다

function randomHex(hex, deviation){ 
    R = HexToR(hex); 
    G = HexToG(hex); 
    B = HexToB(hex); 
    R = randomNormal(R, deviation, 0, 255); 
    G = randomNormal(G, deviation, 0, 255); 
    B = randomNormal(B, deviation, 0, 255); 
    return RGBtoHex(R,G,B); 
} 

은 어떻게 든 선택한 다음 RGB 색상의 3D 공간에서 점을 정의하는 것입니다 위해 내가 찾고있는 무슨 생각 (균일하게 분포 된) 임의의 점은 정의 된 점이고 반지름은 정규 분포로 무작위로 생성됩니다.

어쨌든 이론입니다. JavaScript에서 그 작업을 수행하는 방법에 대한 단서가 없습니다.

나는 모든 조언에 감사 할 것입니다!

답변

1

RGB 대신 HSV (또는 아마도 HSL)를 사용하려고합니다. 다시 RGB로 변환하는 함수가 필요합니다 (예를 들어 here 참조). 이 경우, H는 색조이고, 당신의 가치는 색채의 원점입니다. S 및 V는 각각 채도 및 값/밝기를 제어합니다. 나는 이것이 당신에게 배포본을 얻는 데 더 많은 통제권을 줄 것이라고 생각한다. 위키 백과에 관한 더 많은 정보 here.

+0

흥미 롭습니다. 나는 그것을 조사해야한다. 저는 Photoshop 스크립팅에이 도구를 사용하고 있습니다. HSB 색상 모델은 거기에서 액세스 할 수 있습니다 (이는 HSV와 같을 것입니다). 그러나 나는 어떻게 무작위화할 것인가? 각 값에 자체 정규 분포 난수가 제공됩니까? 그것은 색조 또는 채도 OR 밝기 (그리고 드문 경우 3 가지 중 하나 이상)에서 급증 할 것입니다. 그것을 시도 해봐야 해. 감사! (upvote에 대한 충분한 평판이 아직 없다. 미안. – Squis

+0

내 생각에 색조에 대한 정규 분포를 원할 수도 있지만 saturation과 value/brightness에 대한 분포가 다를 수 있습니다. 각 표준 편차를 조정할 수 있습니다 (세 가지 값 모두 동일해야 함) – afranz409