수학에서 기하 문제는 대부분 증명 문제입니다. 보통 각 $A$가 각 $B$와 같다는 것이나, 어떤 선분이 다른 선분보다 몇 배 더 길다는 것을 보여야 합니다. 학교에서는 기하학을 논리의 기본 원리를 익히고 “자명하다"라는 말을 쓰지 않는 습관을 들이는 데 사용합니다.
프로그래밍에서는 (실생활에서와 마찬가지로) 문제의 성격이 완전히 다릅니다. 기하학은 질적이라기보다 양적이며, 무언가를 최적화하거나, 정확한 값을 계산하거나, 구체적인 수치에 따라 달라지는 검사를 수행하는 데 쓰입니다.
이러한 문제를 해결하는 데에는 대수적 접근과 구성적 접근이라는 두 가지 방법이 있습니다. 수학자가 “두 직선을 교차시킵시다"라고 말할 때, 그는 나중에 다루게 될 복잡한 방정식을 떠올립니다. 반면 프로그래머는 추상화하여 intersect(a, b) 함수를 작성하고자 합니다. 그는 이 함수가 올바르다고 확신하며, 대수식에 신경 쓰지 않고 필요할 때마다 이 함수를 호출할 것입니다. 이렇게 하면 수식과 씨름하는 대신 문제를 각각 따로 풀 수 있는 여러 개의 작은 조각으로 나눌 수 있습니다.

이 장에서는 바로 이러한 계산 기하학에 대한 구성적 접근 방식을 살펴보고, C++의 OOP를 이용해 다양한 기하학적 객체를 다루는 방법을 배우겠습니다.