'시뮬레이션'에 해당되는 글 2건

  1. 2008.10.02 시뮬레이션의 준비 과정
  2. 2008.10.02 FDTD로 전자장을 시뮬레이션 해보자.

시뮬레이션의 준비 과정

먼저 시뮬레이션 코드를 짜기 위해서는 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);
 }
---------------------------------------------------------------------

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

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

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

FDTD로 전자장을 시뮬레이션 해보자.

전자파가 다양한 매질에서 어떻게 전파될까?

복잡한 식을 보기 보다는 그림으로 본다면 이해도 빨라진다.

전자파가 공간으로 전파되는 것을 보기 위해서는 맥스웰 방정식을 풀어야 한다.

이러한 맥스웰 방정식을 컴퓨터를 이용해서 푸는 방법으로 여러가지가 있다.

FEM, FDTD, RCWA 등이 그러하다.

이 중에서 이번에 소개하는 알고리즘은 FDTD 이다.

아마 소개 정도에 그치지 않을까 싶다.

다만, 다음과 같은 프로그램을 짜보는 것이 목표가 되겠다.

시간의 흐름에 따라서 위 그림이 밑의 그림처럼 변한다.

사용자 삽입 이미지


사용자 삽입 이미지
prev 1 next