Monday, April 30, 2007
Perl 펄] 디카용 렌즈, 35mm 필카 렌즈, 초점 거리 환산, 변환; DSLR Focal Length Convert
디카(DSLR) 전용 렌즈와, 옛날식 필카 렌즈의 초점 거리를 상호 환산하는 방법입니다. 물론 디카용 렌즈 초점 거리에 약 1.5배를 하면, 필카용 렌즈 초점 거리로 환산되지만, 더 정밀하게 구하기 위해서 이 프로그램을 만들었습니다. 줌 렌즈의 경우, 양 극단의 값과 함께, 초점 눈금들의 값도 포함했습니다.
우선 디카의 필름에 해당하는 CCD나 CMOS의 대각선 길이를 구해야 하는데, 이것은 제품마다 약간의 차이가 있습니다.
Nikon D40X 의 CCD 의 면적은 "23.6 x 15.8mm" 이고 대각선 길이는 28.4mm 인데, 이것을 기준으로 했습니다.
캐논 등 다른 제품이라면 그 제품의 CCD/CMOS 면적을
sqrt(23.6**2 + 15.8**2)
이런 공식에서 변경해 주면 됩니다.
디카용 렌즈와 필카용 렌즈 초점거리 환산
소스 파일명: example.pl
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
위의 소스의 출력 결과는 여기에 도표로 만들어져 있습니다: ▶▶ 디카 전용 렌즈 / 35mm필카 렌즈, 초점 거리 환산표/변환표; Nikon DX Format
우선 디카의 필름에 해당하는 CCD나 CMOS의 대각선 길이를 구해야 하는데, 이것은 제품마다 약간의 차이가 있습니다.
Nikon D40X 의 CCD 의 면적은 "23.6 x 15.8mm" 이고 대각선 길이는 28.4mm 인데, 이것을 기준으로 했습니다.
캐논 등 다른 제품이라면 그 제품의 CCD/CMOS 면적을
sqrt(23.6**2 + 15.8**2)
이런 공식에서 변경해 주면 됩니다.
디카용 렌즈와 필카용 렌즈 초점거리 환산
소스 파일명: example.pl
(※ 스크롤 박스 사용법: 박스 안을 마우스로 클릭한 후, 키보드의 좌우 화살표키를 누르면 양옆으로 움직일 수 있습니다. 박스에서 다시 나오려면, 박스 바깥의 아무곳이나 클릭하면 됩니다.)
#!/usr/bin/perl
use strict; use warnings;
my $diagonalLength_35mm = sqrt(36**2 + 24**2);
my $diagonalLength_dc = sqrt(23.6**2 + 15.8**2);
my $ratio = $diagonalLength_35mm / $diagonalLength_dc;
print "* 35mm 필카 필름의 대각선 길이 : ", $diagonalLength_35mm, " mm\n";
# 43.2666153055679
print "* 디카 CCD/CMOS의 대각선 길이 : ", $diagonalLength_dc, " mm\n";
# 28.4007042166211
print "* 위의 두 값들의 비율 : ", $ratio, "\n";
# 1.52343459428188
# 디카 전용 니콜(Nikkor) 렌즈의, 초점 거리와 줌 렌즈의 초점 눈금들:
# 현재 "30mm / 10-20mm / 18-125mm / 50-150mm" 는 시그마 렌즈
my @focalLength_dc = ( 10, 12, 15, 17, 18, 20, 24, 28, 30, 35, 45, 50, 55, 70, 85, 105, 125, 135, 200 );
print "\n\n\n디카 렌즈를 필카 렌즈로 환산하면?\n";
print "=================================\n";
foreach ( @focalLength_dc ) {
printf("%3d mm => %7.2f mm\n", $_, $_ * $ratio);
}
# 필카용 니콜(Nikkor) 렌즈의 초점 거리와 줌 렌즈의 초점 눈금들:
# "25mm" 는, 니콘용 칼 짜이스 렌즈
my @focalLength_35mm =
( 14, 17, 18, 20, 24, 25, 28, 35, 50, 55, 58, 60, 70, 80, 85, 100, 105, 120, 135, 180, 200, 300, 400, 500, 600, 800, 1000 );
print "\n\n\n필카 렌즈를 디카에 붙이면?\n";
print "==========================\n";
foreach ( @focalLength_35mm ) {
printf("%4d mm => %8.2f mm\n", $_, $_ * $ratio);
}
use strict; use warnings;
my $diagonalLength_35mm = sqrt(36**2 + 24**2);
my $diagonalLength_dc = sqrt(23.6**2 + 15.8**2);
my $ratio = $diagonalLength_35mm / $diagonalLength_dc;
print "* 35mm 필카 필름의 대각선 길이 : ", $diagonalLength_35mm, " mm\n";
# 43.2666153055679
print "* 디카 CCD/CMOS의 대각선 길이 : ", $diagonalLength_dc, " mm\n";
# 28.4007042166211
print "* 위의 두 값들의 비율 : ", $ratio, "\n";
# 1.52343459428188
# 디카 전용 니콜(Nikkor) 렌즈의, 초점 거리와 줌 렌즈의 초점 눈금들:
# 현재 "30mm / 10-20mm / 18-125mm / 50-150mm" 는 시그마 렌즈
my @focalLength_dc = ( 10, 12, 15, 17, 18, 20, 24, 28, 30, 35, 45, 50, 55, 70, 85, 105, 125, 135, 200 );
print "\n\n\n디카 렌즈를 필카 렌즈로 환산하면?\n";
print "=================================\n";
foreach ( @focalLength_dc ) {
printf("%3d mm => %7.2f mm\n", $_, $_ * $ratio);
}
# 필카용 니콜(Nikkor) 렌즈의 초점 거리와 줌 렌즈의 초점 눈금들:
# "25mm" 는, 니콘용 칼 짜이스 렌즈
my @focalLength_35mm =
( 14, 17, 18, 20, 24, 25, 28, 35, 50, 55, 58, 60, 70, 80, 85, 100, 105, 120, 135, 180, 200, 300, 400, 500, 600, 800, 1000 );
print "\n\n\n필카 렌즈를 디카에 붙이면?\n";
print "==========================\n";
foreach ( @focalLength_35mm ) {
printf("%4d mm => %8.2f mm\n", $_, $_ * $ratio);
}
위의 소스의 출력 결과는 여기에 도표로 만들어져 있습니다: ▶▶ 디카 전용 렌즈 / 35mm필카 렌즈, 초점 거리 환산표/변환표; Nikon DX Format
tag: perl
Perl | 펄
<< Home