Archived posting to the Leica Users Group, 1999/08/20

[Author Prev] [Author Next] [Thread Prev] [Thread Next] [Author Index] [Topic Index] [Home] [Search]

Subject: [Leica] Lens coverage
From: Tom Bryant <tbryant@pars5.gsfc.nasa.gov>
Date: Fri, 20 Aug 1999 23:00:01 -0400 (EDT)

Hi Chris,

> Can somebody please explain to me in simple language why the horizontal
> coverge is not 50% greater than the vertical coverage when the horizontal
> side is 50% larger than the vertical side (36mm vs 24 mm).

> When I wrote the above I was just looking at the figures for 21 mm (where
> horizontal coverage is 136.5% of vertical coverage), and now I see that the
> longer the focal length, the closer the ratio gets to 150%. So now the
> second question: why does the ratio of horizontal coverage to vertical
> coverage increase as focal length increases?


    Here is the algorithm used to generate the lens coverage table:

    #include <stdio.h>

    float r2d = 57.29589;

    int fl[] = {14, 15, 17, 20, 21, 24, 28, 35, 50, 55, 75, 90, 135, 180, 200,
                300, 400, 1000},
        fst;

    for (fst = 0 ; fst < 9; fst++)
    {
        printf("%-2dmm: %-6.3f x %-6.3f, %-6.3fd   %-4dmm: %-6.3f x %-6.3f, "
               "%-6.3fd\n", fl[fst],
               (atan(18.0 / (float) fl[fst]) * r2d),
               (atan(12.0 / (float) fl[fst]) * r2d),
               (atan(21.63333 / (float) fl[fst]) * r2d),
               fl[fst + 9],
               (atan(18.0 / (float) fl[fst + 9]) * r2d),
               (atan(12.0 / (float) fl[fst + 9]) * r2d),
               (atan(21.63333 / (float) fl[fst + 9]) * r2d));
    }

    I'll bet *that* made lots of sense!

    Try this:

    Angular coverage = arctan(half of film format dimension / focal length)

    It gets wierd because you're trying to map a spherical surface (that's the
angle; like the celestial sphere, to a flat surface (the film).  Thus, the
shorter the focal length, the less close the horizantal / vertical ration is
to 1.5, the ratio of the film format's dimensions.

    If you've got a C/C++ compiler, you can actually compile and run this code.
    
    Hope this helped.

    Tom