렌즈로부터의 상거리(image distance)와 물거리(object distance), 이 두 개의 실수 값이 주어졌을 때 렌즈의 초점 거리를 계산하여 출력하는 것이 이번 글의 목표입니다.
초점 거리란 무엇인가?
광학 시스템에서 초점 거리(focal length)란 렌즈 또는 곡면 거울의 중심과 그 초점 사이의 거리를 의미합니다.
아래 그림을 통해 좀 더 쉽게 이해해 보겠습니다.

위 그림에서 i는 물체(object)를 나타내고, F는 형성된 물체의 상(image)이며, f는 렌즈의 초점 거리입니다.
초점 거리 계산 공식
렌즈로부터 상의 초점 거리를 구하는 공식은 다음과 같습니다.
1/F = 1/O + 1/I
- F : 렌즈의 초점 거리
- O : 렌즈와 물체 사이의 전체 거리
- I : 렌즈와 형성된 상 사이의 전체 거리
예시
입력: image_distance=5, object_distance=10
출력: 렌즈의 초점 거리는: 3.333333
설명: 1/5 + 1/10 = 3/10 → F = 10/3 = 3.33333333
입력: image_distance = 7, object_distance = 10
출력: 렌즈의 초점 거리는: 4.1176470
문제 해결 접근 방법
- image_distance와 object_distance 값을 입력받습니다.
- 1/image_distance와 1/object_distance의 합을 구한 뒤, 그 값으로 1을 나누어 결과를 반환합니다.
- 계산된 결과를 출력합니다.
알고리즘
Start
Step 1-> 함수 float focal_length(float image_distance, float object_distance)
Return 1 / ((1 / image_distance) + (1 / object_distance))
Step 2-> 함수 int main()
첫 번째 입력값 image_distance = 5 선언 및 초기화
두 번째 입력값 object_distance = 10 선언 및 초기화
focal_length(image_distance, object_distance) 호출 결과를 출력
Stop
C 언어 구현 예제
#include <stdio.h>
// 렌즈의 초점 거리를 구하는 함수
float focal_length(float image_distance, float object_distance) {
return 1 / ((1 / image_distance) + (1 / object_distance));
}
// main 함수
int main() {
// 렌즈와 상 사이의 거리
float image_distance = 5;
// 렌즈와 물체 사이의 거리
float object_distance = 10;
printf("Focal length of a lens is: %f\n", focal_length(image_distance, object_distance));
return 0;
}
실행 결과
Focal length of a lens is: 3.333333
위 코드에서는 초점 거리를 구하는 로직을 별도의 함수로 분리하여 가독성을 높였습니다. 1/image_distance와 1/object_distance를 더한 값의 역수를 반환하는 방식으로, 얇은 렌즈 공식(thin lens formula)을 그대로 코드로 옮긴 것입니다. 실수형(float)을 사용했기 때문에 소수점 이하의 정확한 결과를 얻을 수 있습니다.