이중성 변환(Duality Transformation)이란?
이중성 변환은 사영 기하학(projective geometry)에서 점과 직선을 서로 대응시키는 개념입니다. 평면 위의 한 점을 하나의 직선으로 바꾸거나, 반대로 하나의 직선을 한 점으로 바꿀 수 있으며, 이러한 상호 변환 관계를 통해 기하학적 문제를 새로운 관점에서 분석할 수 있습니다.
이 글에서는 선과 점의 이중성 변환을 구현한 C++ 프로그램을 소개합니다. 변환은 크게 두 가지 경우로 나눌 수 있습니다.
두 가지 변환 경우
경우 1: 점 (a, b)는 직선 y = ax − b로 변환됩니다.
경우 2: 직선 D(y = cx + d)는 점 D′(c, −d)로 변환됩니다.
함수 및 의사 코드
LineTransformation(double c, double d) 함수
직선의 계수 c와 d를 입력받아 대응되는 점의 좌표를 계산하여 출력합니다.
C: (d / c) D: (d * -1)
PointTransformation(double x, double y) 함수
점의 좌표 x와 y를 입력받아 대응되는 직선의 방정식 계수를 계산하여 출력합니다.
a = (-1 * y / x) b = (-1 * y)
C++ 전체 소스 코드
사용자가 메뉴에서 변환 방식을 선택하면, 해당 값들을 입력받아 결과를 출력하는 구조로 되어 있습니다.
#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;
void LineTransformation(double c, double d) {
cout << "C: " << (d / c) << ", D: " << (d * -1);
}
void PointTransformation(double x, double y) {
cout << "y=" << (-1 * y / x) << "x +" << (-1 * y);
}
int main(int argc, char **argv) {
cout << "\n1. Line Transformation\n2. Point Transformation";
int c;
cin >> c;
switch (c) {
case 1:
cout << "Enter the coefficients of line y=ax-b:";
double a, b;
cin >> a >> b;
LineTransformation(a, b);
break;
case 2:
cout << "Enter the coordinate of point <a, b>";
double x, y;
cin >> x >> y;
PointTransformation(x, y);
break;
default:
break;
}
}
실행 결과
프로그램을 실행하면 먼저 메뉴가 표시되고, 선택한 변환에 따라 필요한 값을 입력받은 뒤 결과를 출력합니다.
1. Line Transformation 2. Point Transformation 1 Enter the coefficients of line y=ax-b: 1 2 C: 2, D: -2 1. Line Transformation 2. Point Transformation 2 Enter the coordinate of point <a, b> 1 2 y=-2x +-2
마무리
이 프로그램은 스위치(switch)문을 활용해 두 가지 변환 모드를 선택적으로 실행하도록 설계되었습니다. LineTransformation 함수는 직선의 계수로부터 대응 점의 좌표를, PointTransformation 함수는 점의 좌표로부터 대응 직선의 방정식을 각각 계산합니다. 이처럼 이중성 변환은 점과 선을 동일한 수학적 틀에서 다룰 수 있게 해주는 강력한 도구이며, 계산 기하학(computational geometry) 분야에서도 다양하게 응용됩니다.