본문 바로가기

Library

ATL/WTL의 메세지 핸들러 매크로 MFC와 ATL/WTL에서 메세지 핸들러를 작성할 때 가장 피부로 느껴지는 차이점은 미리 정의된 메세지 매크로의 존재이다. MFC에서는 이미 잘 포장되어 있는 각각의 컨트롤들의 메세지 핸들러들이 있고, 용도에 맞게 잘 분류되어 있다. 예를 들어, 버튼 메세지에 관한 것이라면 ON_BN_CLICKED과 같은 매크로를 사용하여 메세지 맵에 추가하면 된다. 그러나, ATL/WTL에서는 그러한 지원이 좋은 편이 아니다. ATL 자체가 그러한 것을 위한 고안된 것이 아니니 어쩔 수 없고, WTL의 atlcrack.h에서 이런 용도를 위해 미리 정의해 둔 메세지 매크로를 제공하지만, MFC의 그것처럼 세세하게 구분되어 있지 않다. 예를 들어, 어떤 컨트롤을 클릭했을 때 발동되는 함수를 정의하기 위해서 COMMAND.. 더보기
Basis Vector 평면해석 기하학에서는 평면의 한 점을 한 쌍의 수직 좌표축 위로 사영시킴으로서 어떤 좌표를 점 P에 대응시킬 수 있다. 여기서, 평면의 각 점은 유일한 좌표 집합으로 대응되고, 이것의 역도 성립한다. 즉, 이들은 one to one 관계(1 : 1 대응 관계)가 성립한다. 좌표축으로는 수직 좌표축(카르테시안 좌표계)이 가장 일반적인 경우지만, 점차 좌표축이 반드시 수직일 필요가 없다는 점을 깨닫기 시작했다. 즉, 어떤 조건을 만족한다면 수직 관계가 아닌, 임의의 나란한 두 직선도 평면의 좌표계를 결정하는데 쓰일 수 있으며, 이들 직선은 벡터를 사용하여 나타낼 수도 있다. 즉, 궁극적으로는 좌표계를 벡터공간을 사용하여 표시할 수 있다. 예를 들어, 평면 상에서 어떤 좌표가 주어졌을 때, 이것은 좌표축의 단.. 더보기
벡터 부분공간(vector subspace) 벡터공간 V에서 정의된 벡터덧셈과 스칼라곱의 연산에 관하여 그 자체로서 벡터공간을 이루는 V의 부분집합에는 특별한 명칭이 주어진다. 즉, def. 벡터공간 V의 부분집합 W가 V에서 정의된 덧셈과 스칼라곱에 관하여 그 자체로서 벡터공간을 이룰 때 W를 V의 부분공간(subspace)이라 한다. 일반적으로, 덧셈과 스칼라곱을 만족하는 집합 W가 벡터공간을 이룬다는 것을 확인하기 증명하기 위해서는 벡터공간의 열 가지 공리가 만족됨을 밝혀야 한다. 그러나, 만약 W가 이미 벡터공간이라고 알려진 집합 V의 부분집합이면 몇 가지 공리는 V에서 상속되기 떄문에 W에 대해서 이를 증명할 필요가 없다. 예를 들어, u + v = v + u는 V의 모든 벡터에 대해서 성립함으로, 당연히 W의 모든 벡터에 대해서 성립하는.. 더보기
일반 벡터공간 .... 앞에서의 벡터 개념을 일반적인 공리로 다시 정의해보자. 어떤 공리계를 지정하고, 만일 어떤 대상이 이것을 만족하면 이것을 벡터라고 하는 것이다. 일반화된 이들 벡터는 그 중에서도 특히 여러 가지 종류의 행렬과 함수들도 포함된다. 새로운 종류의 벡터를 정리하기 위해 주어진 공리는 R^2, R^3의 벡터가 지니고 있는 여러 가지 성질에 근거를 두고 있는 까닭에, 이들 새로운 벡터는 R^2와 R^3의 벡터에 관한 여러 가지 익숙한 성질을 만족한다. 따라서 새로운 종류의 벡터, 말하자면 행렬 또는 함수를 수반하는 문제를 풀고자 하는 경우, 대응하는 문제가 R^2과 R^3의 무엇과 같은가를 구체화함으로써 그 문제에 대한 발판을 얻을 수 있다. .... 새로운 벡터공간의 공리는 다음과 같다. 공리는 증명할.. 더보기
R^n에서 R^m으로의 선형변환 R^n에서 R^m으로의 선형 변환에서, w = F(x)인 함수를 생각해보자. 여기서 x는 R^n의 벡터이며, w는 R^m의 벡터이다. 선형변환(linear transformation)은, 이와 같은 함수의 특수한 종류를 뜻하는 것이다. 선형변환은 선형대수의 연구에 있어서 기본이고, 물리, 공학, 사회과학과 수학 등 여러 분야에 중요하게 응용된다. 먼저, 함수(function)란 집합 A의 각 원소에 집합 B의 오직 하나의 원소를 대응하는 규칙 f이다. f가 원소 a에 원소 b를 대응시킬 때 b = f(a)로 표기하고, b를 f에 의한 이미지(image, 상), 또는 a에 있어서 f의 값(value)이라 한다. 집합 A를 f의 도메인(domain, 정의역)이라 하고, 집합 B를 f의 코-도메인(codoma.. 더보기
유클리드 벡터공간 .... 평면상의 점의 위치를 2개의 수의 순서쌍으로 나타내고, 3차원 공간의 점의 원치를 3개의 수의 순서쌍으로 나타내려는 발상은 17세기 중엽에 이르러 비로소 형성된 것이다. 18세기 후반에 접어들어, 수학자나 물리학자들은 3개의 수의 순서쌍에서 멈출 필요가 없음을 깨닫기 시작했다. 4개의 수의 순서쌍 (a1, a2, a3, a4)이 '4차원' 공간의 점으로, 5개의 수의 순서쌍 (a1, a2, a3, a4, a5)이 '5차원' 공간의 점으로 생각할 수 있음이 인식되었다. .... 고차원 공간 벡터의 몇 가지 예는 다음과 같다. 1. 실험 데이터 : 과학자는 실험을 수행하고 실험이 수행되는 각 시간에 n개의 수치 측정을 작성한다. 각 실험의 경과는 R^n의 하나의 벡터 y = (y1, y2, y3, .. 더보기
Projection : Vector 여러 가지 응용에 있어서 벡터 u를 지정된 0이 아닌 벡터 a에 나란한 부분과 a에 수직인 두 벡터의 합으로 분할하는 것은 흥미 있는 일이다. 만일, u와 a가 시초점이 어떤 Q에서 일치하도록 위치하고 있다면 벡터 u를 해당 성분 w1, w2를 사용하여 다음과 같이 나타낼 수 있다. (w1은 수평 성분, w2는 수직 성분) u = w1 + w2 ∴ w2 = u - w1 여기서 벡터 w1은 수평으로 나란한 직선인 a와 나란하며, 벡터 w2는 a에 수직이다. 이때, 벡터 w1을 u에서 a로의 정사영(orthogonal projection of u on a), 또는 a를 따르는 u의 벡터 성분이라 하고 이것을 proj(sub(a))u 로 표시한다. 벡터 w2를 a에 직교하는 벡터 성분으로 표시하며, w2 = .. 더보기
벡터곱(cross product)의 좌표계 독립성 벡터에 대한 이해를 쉽게 하기 위해서, 지금까지 벡터라는 것은 2차원 또는 3차원 공간 내의 방향성을 가진 성분으로 정의했다. 그리고 좌표계와 성분은 벡터끼리의 계산을 간단히 하기 위해 도입한 것이다. 따라서, 벡터는 좌표계에 상관없이 수학적인 형식을 만족하는 것이다. 더구나, 벡터의 성분은 벡터 그 자체로서 고유한 것이라 할 수 없고, 어디까지나 선택된 좌표계에 의존한다. 예를 들어, 어떤 벡터 하나가 주어졌을 때 특정 좌표계에서 이 벡터의 성분은 (1, 1)이 될 수도 있지만, 다른 좌표계에서는 (2, 1)이 될 수도 있다. 여기에서, 벡터곱의 정의에 대해 중대한 의문이 발생하게 된다. 그것은, 벡터 u × v를 u와 v의 성분에 의해 정의했고, 이 성분들이 좌표계의 선택에 따라 달라진다면 u, v가.. 더보기
Matrix Determinant Function .... 실변수 x에 실수 f(x)를 대응시키는 f(x) = sn(x)와 f(x) = x^2과 같은 함수는 익숙할 것이다. x와 f(x)는 모두 실수값만 취하는 까닭에 이와 같은 함수를 실변수의 실수값 함수라 한다. 행렬식 함수(determinant function)란, 행렬변수의 실수값 함수이며, 정사각행렬 X에 실수 f(X)를 대응시킨다는 뜻이다. 행렬식 함수에 관한 연구는 연립 1차 방정식에 중요한 응용을 지닌다. .... 행렬식(determinant)이란, 정사각행렬에 어떤 실수를 대응시키는 어떤 종류의 함수이다. 예를 들어 다음 2 × 2 행렬 a b c d 의 경우, ad - bc ≠ 0이라면 역행렬이 존재한다. 여기서 ad - bc는 매우 빈번하게 나타나므로 그 자체로 하나의 명칭이 부여되어.. 더보기
gcc와 Visual C++에서의 템플릿 인자의 가시성 문제 널리 쓰이는 C/C++ 컴파일러 구현에서 가장 중요한 것을 꼽으라면 단연 gcc(g++)와 Visual C++ 컴파일러이다. 이들은 각각 가장 많은 플랫폼과, 가장 널리 쓰이는 크로스 컴파일러 구현이라는 장점을 가지고 있다. 하지만 두 컴파일러 모두 복잡하기 이를데 없는 C++ 표준을 완벽하게 구현하고 있지는 않다. 물론, 이것은 표준이 제대로 안정화되어 있지 않았기 때문이다. 보다 현실적인 문제는, 두 컴파일러가 '소리 없이' 다르게 동작하는 것인데, gcc에서 잘 컴파일되는 코드가 Visual C++에서 제대로 컴파일되지 않거나, 그 반대의 경우가 종종 생긴다. 그 중에서 가장 대표적인 문제를 꼽으라면 템플릿 인자의 가시성 문제를 꼽을 수 있다. 특히, typedef을 사용하여 파생 클래스가 기반 클.. 더보기