[algorithm] 미적으로 유쾌한 색상 팔레트를 임의로 생성하는 알고리즘 [닫기]

나는 많은 수의 임의의 미적으로 유쾌한 색상을 생성하는 간단한 알고리즘을 찾고 있습니다. 따라서 미친 네온 색, 대변을 연상시키는 색 등이 없습니다.

이 문제에 대한 해결책을 찾았지만 RGB보다 대체 색상 팔레트에 의존합니다. 오히려 앞뒤로 매핑하는 것보다 직선 RGB를 사용하고 싶습니다. 이러한 다른 솔루션은 최대 32 개 정도의 임의 색상 만 생성 할 수 있습니다.

어떤 아이디어라도 좋을 것입니다.



답변

임의 색상의 RGB 값을 일정한 색상의 RGB 값으로 평균화 할 수 있습니다.

(자바의 예)

public Color generateRandomColor(Color mix) {
    Random random = new Random();
    int red = random.nextInt(256);
    int green = random.nextInt(256);
    int blue = random.nextInt(256);

    // mix the color
    if (mix != null) {
        red = (red + mix.getRed()) / 2;
        green = (green + mix.getGreen()) / 2;
        blue = (blue + mix.getBlue()) / 2;
    }

    Color color = new Color(red, green, blue);
    return color;
}

임의의 색상을 흰색 (255, 255, 255)과 혼합하면 원래 색상의 색조를 유지하면서 명도를 높여서 중립 파스텔을 만듭니다. 이 무작위로 생성 된 파스텔은 일반적으로 특히 많은 수에서 잘 어울립니다.

위의 방법을 사용하여 생성 된 일부 파스텔 색상은 다음과 같습니다.

먼저

임의의 색상을 일정한 파스텔과 혼합하여 색조가 중간색으로 설정 될 수 있습니다. 예를 들어 하늘색을 사용하면 다음과 같은 색상이 생성됩니다.

둘째

또한 보완적인 색상이나 음영 수준을 고려하여 생성기에 휴리스틱을 추가 할 수 있지만, 모든 색상은 임의의 색상으로 달성하려는 인상에 따라 달라집니다.

몇 가지 추가 자료 :


답변

나는 컬러 휠을 사용하고 임의의 위치에 황금 각도 (137,5도)를 추가 할 수 있습니다

http://en.wikipedia.org/wiki/Golden_angle

겹치지 않을 때마다 다른 색상을 얻기 위해.

컬러 휠의 밝기를 조정하면 다른 밝고 어두운 색상 조합을 얻을 수 있습니다.

황금 비율을 사용하는 문제와 해결책을 잘 설명하는이 블로그 게시물을 찾았습니다.

http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/

업데이트 : 방금이 다른 접근법을 찾았습니다.

RYB (빨강, 노랑, 파랑) 방법이라고하며이 백서에 설명되어 있습니다.

http://threekings.tk/mirror/ryb_TR.pdf

“페인트 영감 색상 합성”으로.

알고리즘은 색상을 생성하고 각각의 새로운 색상은 이전에 선택한 색상과의 유클리드 거리를 최대화하도록 선택됩니다.

다음은 자바 스크립트에서 좋은 구현을 찾을 수 있습니다.

http://afriggeri.github.com/RYB/

업데이트 2 :

Sciences Po Medialb는 데이터 과학자를위한 컬러 팔레트를 생성하는 “I want Hue”라는 도구를 출시했습니다. k- 평균 군집화 또는 힘 벡터 (반발 그래프)를 사용하여 다른 색상 공간 사용 및 팔레트 생성 이러한 방법의 결과는 매우 좋으며 웹 페이지에 이론과 구현을 보여줍니다.

http://tools.medialab.sciences-po.fr/iwanthue/index.php


답변

자바 스크립트에서 :

function pastelColors(){
    var r = (Math.round(Math.random()* 127) + 127).toString(16);
    var g = (Math.round(Math.random()* 127) + 127).toString(16);
    var b = (Math.round(Math.random()* 127) + 127).toString(16);
    return '#' + r + g + b;
}

여기에서 아이디어를 보았습니다 : http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html


답변

다른 팔레트로 변환하는 것이 훨씬 뛰어난 방법입니다. 그 이유는 다음과 같습니다. 다른 팔레트는 ‘지각 적’입니다. 즉, 비슷한 모양의 색상을 가깝게 배치하고 하나의 변수를 조정하면 예측 가능한 방식으로 색상이 변경됩니다. RGB에는 “모두 잘 어울리는”색상 사이에 명확한 관계가없는 것은 사실이 아닙니다.


답변

비슷한 색상을 피하기 위해 TriadMixingCIE94 를 사용하여 성공했습니다 . 다음 이미지는 빨강, 노랑, 흰색의 입력 색상을 사용합니다. 여기를 참조 하십시오 .

TriadMixing + CIE94


답변

간과해서는 안되는 대답은 간단하고 장점이 있기 때문에 실제 사진과 그림을 샘플링하는 것입니다. 현대 미술 사진, cezanne, van gogh, monnet, 사진의 썸네일에서 임의의 색상을 원하는만큼 임의의 픽셀을 샘플링하십시오. 장점은 테마별로 색상을 얻을 수 있고 유기 색상이라는 것입니다. 폴더에 20-30 장의 사진을 넣고 매번 임의의 그림을 무작위로 샘플링하십시오.

HSV 값으로의 변환은 심리적 기반 팔레트를위한 광범위한 코드 알고리즘입니다. hsv는 무작위 화하기가 더 쉽습니다.


답변

PHP에서 :

function pastelColors() {
    $r = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);
    $g = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);
    $b = dechex(round(((float) rand() / (float) getrandmax()) * 127) + 127);

    return "#" . $r . $g . $b;
}

출처 : https://stackoverflow.com/a/12266311/2875783