2010년 10월 8일 금요일

포텐셜(Potential) 기반 파동 방정식(Wave Equation)

[경고] 아래 글을 읽지 않고 "포텐셜 기반 파동 방정식"을 보면 바보로 느껴질 수 있습니다.
1. 맥스웰 방정식
2. 전자기장 파동 방정식


1864년맥스웰 33세, 조선 고종 시절에 이미 전자기장에 대한 파동 방정식을 제안했던 맥스웰James Clerk Maxwell(1831–1879)이 왜 다시 포텐셜 기반 파동 방정식을 유도했을까?[맥스웰 방정식과 관계된 정확한 날짜[2]: 논문 투고 1864년 10월 27일, 논문 공개 1864년 12월 8일, 논문 출판 1865년 1월] 전자기장 파동 방정식의 최종 표현식을 보면 이 질문에 대한 답을 할 수 있다.

                         (1)

                         (2)

전자기장 파동 방정식의 원천 항(source term: 식 (1)과 (2)의 우변 항)이 단순하게 표현되어 있지 않다. 이를 더 아름답게 표현하려면 전기 스칼라 포텐셜(electric scalar potential) $\phi$와 자기 벡터 포텐셜(magnetic vector potential) $\bar A$를 이용해야 한다[1]. 전기장(electric field)과 스칼라 및 벡터 포텐셜 관계를 얻기 위해 아래의 맥스웰 방정식(Maxwell's equations)을 보자.

                       (3)

                                (4)

식 (4)와 발산(divergence) 연산자의 영인자(nullity)로부터 벡터 포텐 $\bar A$를 아래처럼 정의할 수 있다.

                                (5)

식 (5)를 식 (3)에 대입해서 정리하면 다음과 같다.

                                (6)

식 (6)에서는 회전(curl) 연산자의 영인자를 이용한다. 식 (6)을 이용하면 전기장을 스칼라 및 벡터 포텐셜로 표현할 수 있다.

                                (7)

DC[$\partial / \partial t = 0$]인 경우, 전기장($\bar E$)은 스칼라 포텐셜 혹은 전압($\phi$)으로만 표현된다. AC[$\partial / \partial t \ne 0$]에서는 스칼라 및 벡터 포텐셜이 다 있어야 전기장을 표현할 수 있다. 또한 맥스웰 방정식을 헛되이 중복해서 쓰지 않도록, 식 (7)은 내부적으로 맥스웰 방정식 (3)과 (4)를 포함하고 있음을 꼭 기억해야 한다.
식 (7)을 쿨롱의 법칙인 식 (8)에 대입하고 로렌츠 게이지(Lorenz gauge)인 식 (9)를 적용하면 식 (10)을 얻을 수 있다.

                                (8)

                                (9)

                                (10)

식 (10)을 정리하면 스칼라 포텐셜에 대한 파동 방정식을 얻는다.

                                (11)

DC[$\partial / \partial t = 0$]인 경우 식 (11)은 푸아송 방정식(Poisson's equation)이 된다. 마지막으로 남은 맥스웰 방정식인 변위 전류(displacement current) 포함 암페어의 법칙 (12)에 식 (5)와 (7)을 대입하자.

                  (12)

그러면 다음이 얻어진다.

                  (13)

식 (13)에 로렌츠 게이지인 식 (9)를 다시 적용하면 벡터 포텐셜에 대한 파동 방정식을 얻는다.

                  (14)

최종적으로 식 (11)과 (14)의 우변을 보면 원천 항이 매우 간략해짐을 알 수 있다. 또한, 전하 밀도(electric charge density) $\rho$가 스칼라 포텐셜을 생성하고 전류 밀도(electric current density) $\bar J$가 벡터 포텐셜을 생성함이 확연히 드러난다.

[참고문헌]
[2] G. Pelosi, "A tribute to James Clerk Maxwell on the 150th anniversary of his equations (1864–2014)," IEEE Antennas Propagat. Mag., vol. 56, no. 6, pp. 295–298, Dec. 2014.

[다음 읽을거리]
1. 페이저를 이용한 맥스웰 방정식
2. 대칭적인 맥스웰 방정식
3. 헤르츠 벡터 포텐셜

2010년 10월 6일 수요일

CFormView에서 컨트롤에 초점주기

CFormView에 만든 특정한 컨트롤(control)에 초점(focus)을 주려면 아래 방법을 이용하면 된다. 아래 code에서 초점을 주려는 컨트롤은 CWnd을 부모로 하는 class라고 생각한다.

1. CWnd::Focus 함수 이용

그냥 원하는 위치에서 wnd.Focus()를 호출하면 된다. 여기서 wnd는 컨트롤의 이름이다.

2. CFormView::Focus 함수 이용

CWnd::Focus 함수를 이용해도 초점 설정이 안되면 CFormView의 멤버 함수(member function) 안에 아래 code를 삽입해야 한다.
CWnd wnd;
m_hWndFocus = wnd.GetSafeHwnd();
SetFocus();

2010년 10월 5일 화요일

화면갱신시 깜박임 줄이기

1. double buffering

위의 첨부링크를 참고하면 된다. 쉽게 설명하면 먼저 Memory DC(Device Context)에 화면을 사용할 내용을 먼저 그리고 다 그린 후에 Screen DC에 복사하면 깜박임이 줄어든다.

2. Clip Children, Clip Siblings

Dialog 기반이면 간단히 dialog 속성에서 위의 항목들을 "True"로 설정하면 깜박임이 줄어든다. 대화상자를 만들 때 자식창과 형제창은 잘리도록 대화상자를 구성하기 때문이다.