Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 렌즈의 초점 거리를 구하는 프로그램

렌즈로부터의 상거리(image distance)와 물거리(object distance), 이 두 개의 실수 값이 주어졌을 때 렌즈의 초점 거리를 계산하여 출력하는 것이 이번 글의 목표입니다.

초점 거리란 무엇인가?

광학 시스템에서 초점 거리(focal length)란 렌즈 또는 곡면 거울의 중심과 그 초점 사이의 거리를 의미합니다.

아래 그림을 통해 좀 더 쉽게 이해해 보겠습니다.

C 언어로 렌즈의 초점 거리를 구하는 프로그램

위 그림에서 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)을 사용했기 때문에 소수점 이하의 정확한 결과를 얻을 수 있습니다.