※ 요약
이전에는 C언어로 두 점 사이의 거리를 구했는데, 같은 예제를 이번엔 C++로 작성해보았다.
사실 매일 하나의 글을 포스팅하기 위해 C언어와 C++을 나눠서 하느라 가끔 억지스러운 면이 없지 않아 있는거 같다.

※ 특징
C++을 이용해 피타고라스 정리를 구현하여 두 점 사이의 거리를 구한다.
좀 더 자세한 설명은 이전 글에 있으니 필요하다면 참고하기 바란다.

큰 틀은 C언어로 작성한 것과 같다. template 클래스와 template 함수로 작성하여 타입에 상관없이 거리를 구할 수 있게 하였다.
이렇게 template으로 만든 이유는, 윈도우 클라이언트 영역은 정수 타입이고, OpenGL이나 DirectX는 보통 실수 타입이기 때문이다.
또 필자는 아직 template 문법에 약하기 때문에 조금씩이나마 연습을 하고자 아래와 같이 작성하였다.


아래 화면은 상기 코드에 대한 디버깅 화면이다.

p1은 실수 타입으로, p2는 정수 타입으로 찍힌걸 보니 마음에 든다.

위 소스코드는 2010 기준으로 만들었다, 2013 이상이라면 GetDistance에서 double형으로 형변환을 안해줘도 에러가 발생하지 않는다.




#include <cmath>

template<typename T>
class CPoint
{
public:
	T x;
	T y;

public:
	CPoint( ) : x(0), y(0) { }
	CPoint( T _x, T _y ) : x(_x), y(_y) { }
};

template<typename T1, typename T2>
double GetDistance( const T1& p1, const T2& p2 )
{
	return std::sqrt( double( (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y) ) );
}

int main( )
{
	CPoint<double> p1( 432, 189 );
	CPoint<int> p2( 38, 392 );

	double dDistance = GetDistance( p1, p2 );

	return 0;
}


+ Recent posts