시뮬레이션의 준비 과정

먼저 시뮬레이션 코드를 짜기 위해서는 C,C++,Visual C 에 익숙해야 한다.

당연한 말이 아닐수는 없다.

또한 색상으로 장의 분포를 표기하기 위해서 HSI 표기에 익숙해야 한다.

상용 프로그램을 보라 촌스럽게 RGB 쓰는 경우 없다.

HSI 는 색상, 채도, 명도를 의미하며, 보통 색상과 채도를 고정시키고 명도만을 변화시키나,

채도와 명도를 고정시키고, 색상만을 변화시키는 방법이 주로 쓰인다.

하지만 윈도우에서 색상을 표시하기 위해서는 RGB 로 변환을 해야한다.

HSI -> RGB 코드는 인터넷에서 쉽게 찾을 수 있을 것이다.

프로그램의 초기 단계에서  HSI 의 색상에 따른 컬러 테이블을 만들자.

이 경우 녹색이 0 이 되며, 숫자가 커질수록 빨간색, 숫자가 작아질수록 파란색이 된다.


------------------------------------------------------------------------
 double I,S,H;
 double R,G,B;
 double domainOffset = 0.0;
 
 I = 0.9f;
 S = 1.0f;

 for(int i = 0; i < 512;i++) {
  H= (i*4.0)/511;

 if (I==0.0) {    // black image
  R = G = B = 0;

    } else {
  if (S==0.0) {
   // grayscale image
   R = G = B = I;
  } else {
   if (H<1.0) { // red domain; green acending
    domainOffset = H;
    R = I;
    B = I * (1.0-S);
    G = B + (I-B)*domainOffset;
   } else if (H<2.0) { // yellow domain; red acending
    domainOffset = H - 1.0;
    G = I;
    B = I * (1.0-S);
    R = G - (I-B)*domainOffset;
   } else if (H<3.0) { // green domain; blue descending
    domainOffset = H-2.0;
    G = I;
    R = I * (1.0-S);
    B = R + (I-R)*domainOffset;
   } else if (H<4.0) { // cyan domain, green acsending
    domainOffset = H - 3.0;
    B = I;
    R = I * (1.0-S);
    G = B - (I-R) * domainOffset;
   } else if (H<5.0) { // blue domain, red ascending
    domainOffset = H - 4.0;
    B = I;
    G = I * (1.0-S);
    R = G + (I-G) * domainOffset;
   } else {  // magenta domain, blue descending
    domainOffset = H - 5.0;
    R = I;
    G = I * (1.0-S);
    B = R - (I-G) * domainOffset;
   }
  }
 }
 color_table[i] = RGB((long)255*R,(long)255*G,(long)255*B);
 }
---------------------------------------------------------------------

본좌 또한 인터넷에 돌아다니는 코드를 고쳐서 사용했다.

수치를 대략 이정도로 하면 예쁜 컬러가 된다.

다들 예쁜 칼라를 직접 골라보시라