문제

어쩌면 커피를 너무 많이 먹었을 수도 있습니다. 어쩌면 너무 오랫동안 일 해 왔을 수도 있습니다. ? 다음 콜러는 무엇입니까?

public Color nextColor() {
   int max = 0, min = 1000000000, cr = 0, cg = 0, cb = 0;
   for (int r = 0; r < 256; r += 4) {
      for (int g = 0; g < 256; g += 4) {
         for (int b = 0; b < 256; b += 4) {
            if (r + g + b < 256 || r + g + b > 512) {
               continue;
            }
            min = 1000000000;
            for (Color c : colorTable) {
               int dred   = r - c.getRed();
               int dgreen = g - c.getGreen();
               int dblue  = b - c.getBlue();
               int dif = dred * dred + dgreen * dgreen + dblue * dblue;
               if (min > dif) {
                  min = dif;
               }
            }
            if (max < min) {
               max = min;
               cr  = r;
               cg  = g;
               cb  = b;
            }
         }
      }
   }

   return new Color(cr, cg, cb, 0x90);
}

업데이트

모두에게 답변 해 주셔서 감사합니다. 프로그램 내에서 방법의 맥락을 살펴보면 그들의 의도는 실제로 기존 색상 세트에서 "가장 먼"새로운 색상을 반환하는 것이 분명합니다.

포즈를 취한 Sparr에게 감사합니다 후속 조치 이 질문에, 나는 당신의 조언을 염두에두고 위의 내용을 확실히 다시 작성할 것입니다.

나는 RGB 컬러 스케일에 정통하지 않습니다. 위의 방법의 의도를 아는 것은 "무료"를 검색하는 것입니다. 기존 색상 세트에 색상이 제공됩니다. 1 실제로 우리가 색상을 어떻게 인식하는지에 따라 무료입니까? 세트를 칭찬하는 색상을 선택하는 간단한 방법이 있습니까? 아니면 RGB 구성 요소의 숫자 분석이 실제로 적절한 색상을 산출합니까?

도움이 되었습니까?

해결책

Colortable의 지점에 의해 정의 된 의사-고체가 내부에 큰 "중공"을 갖는 경우를 고려하여 NextColor가 그 중앙의 중심에서 다음 콜러로 지점을 선택하도록하십시오. Colortable에 대해 알고있는 것에 따라이 경우는 매우 드문 일 수 있습니다. 그것이 충분히 희귀 할 것으로 예상되고, 최적보다 적은 것을 기꺼이 받아들이려고한다면 (우리는 다음에 NextColor의 출력을 최적의 경우) 솔루션으로 가정하면 중요한 최적화 자체가 나타납니다.

위에서 설명한 것을 제외한 모든 경우에, NextColor가 선택한 색상은 최소 볼록한 선체의 표면 어딘가에 있으며 루프에 의해 정의 된 1/64 밀도가 높은 색상 공간의 모든 지점을 둘러싸고 있습니다. 해당 표면의 점 목록을 생성하는 것은 모든 포인트의 목록을 생성하는 단순 루프보다 약간 더 계산적으로 복잡하지만 검색 공간이 약 25 배 줄어 듭니다.

대부분의 경우, 단순화 된 검색의 결과는 그 볼록한 선체의 모서리 중 하나에 대한 요점이 될 것입니다. 이를 고려하면 검색 공간을 사소한 목록 (24 명의 후보자, 내 정신 지오메트리가 저에게 잘 맞는 경우)으로 단순히 저장할 수 있습니다.

그 중에서 선택한 다음 콜러가 공포증에 "너무 가깝다"라면 위에서 언급 한 일종의 "중공"을 찾기 위해 원래 유형의 검색을 실행하는 데 되돌아 갈 수 있습니다. 그 검색의 밀도는 첫 번째 패스가 얼마나 가까워 졌는지에 따라 적응할 수 있으며 거기에서 좁혀졌습니다. 즉, Super Fast Search가 Colortable의 가장 가까운 이웃에서 NextColor 8 단위를 찾으면 Colortable 내에서 최소 16 개의 유닛을 찾아야하는 것보다 더 잘 수행해야합니다. 8 세의 단계로 원래 검색을 실행하고 4 대 이상의 후보자를 먼 거리에 저장 한 다음 (중공이 검색 그리드와 정렬되지 않을 수 있음) 각 후보자에 대한 고밀도를 반경 12 검색하는 것을 중심으로하십시오.

검색 공간의 1/64 밀도의 특성 (4의 모든 배수)은 아마도 검색 속도를 높이기 위해 원래 저자에 의해 설립되었을 것입니다. 이러한 개선 사항을 감안할 때, 당신은 그 타협을 피합니다.

이 모든 것은 대조적 인 색상을 찾는이 순진한 방법에 대한 개선을 고수하고 싶다고 가정합니다. 동일하거나 더 많은 방법이 주어지면 확실히 더 나은 방법이 있습니다 (Colortable의 색상은 사용에서 가장 널리 퍼져 있습니까? 인간의 눈에 어떤 색상이 더 대비 되는가?) 정보.

다른 팁

색상 목록을 저장하는 공동체가있는 것 같습니다.

그런 다음 이상하게 하드 코드 된 색상 공간이 있습니다

4의 배수이고 "너무 밝지 않은"구성 요소가있는 색상.

이 기능은 후자의 색상을 컬러 테이블과 "대조하는"색상을 제공하는 것 같습니다.

대비를 말할 때, 이것은 2-norm을 사용하여 컬러 테이블에서 가능한 한 색상을 선택하여 정의됩니다.

Colortable이라는 글로벌 컬러 객체 배열이 주어지면이 기능은 다음 색상 공간에서 그 배열에서 가장 가까운 색상의 색상을 찾을 수 있으며 가장 멀리 떨어진 색상 중 하나를 찾을 수 있습니다.

빨간색, 녹색, 파란색 구성 요소 256에서 512 사이의 4 개의 빨간색+녹색+파란색의 배수

*: "가장 가까운"은 각 색상 구성 요소에 대해 가장 낮은 차이 차이 정상으로 정의됩니다.

바울이 결정했듯이, 이것은 미친 듯이 비효율적으로 구현되면 그럴듯한 것처럼 보입니다. Colortable을 통한 약 5 백만 패스 대신에 공동체를 통한 단일 패스와 약간 더 많은 수학으로 동일한 결과를 찾을 수 있으며, 훨씬 더 높은 평균 대비를 제공하는 다른 색상을 찾는 더 좋은 방법이 있습니다.

또 다른 색상을 얻으려고 노력하고 있습니다

a) 잘못된 컬러 데이터 세트를 코딩합니다.

b) 그래프에 다른 줄을 그리십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top