시뮬레이션의 준비 과정
먼저 시뮬레이션 코드를 짜기 위해서는 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);
}
---------------------------------------------------------------------
본좌 또한 인터넷에 돌아다니는 코드를 고쳐서 사용했다.
수치를 대략 이정도로 하면 예쁜 컬러가 된다.
다들 예쁜 칼라를 직접 골라보시라