Focal length equivalents between formats
Contents
Introduction
The table below lists the focal length equivalents between formats, keeping track of aspect ratios, such that every format can fit into any target format. In other words the equivalent format is strictly wider.
Focal lens equivalents
APS-C
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
10mm | 102.9 | 79.7 | 10 | 14 | 17 | 48 | 36 | 101 |
14mm | 83.7 | 61.6 | 14 | 20 | 24 | 67 | 50 | 142 |
16mm | 76.2 | 55.1 | 16 | 23 | 28 | 77 | 57 | 162 |
18mm | 69.8 | 49.8 | 18 | 26 | 31 | 87 | 65 | 182 |
35mm | 39.5 | 26.8 | 35 | 50 | 61 | 169 | 126 | 354 |
50mm | 28.2 | 19.0 | 50 | 72 | 87 | 241 | 180 | 506 |
55mm | 25.7 | 17.3 | 55 | 79 | 96 | 265 | 198 | 557 |
56mm | 25.3 | 17.0 | 56 | 80 | 98 | 270 | 201 | 567 |
60mm | 23.6 | 15.8 | 60 | 86 | 105 | 289 | 216 | 607 |
80mm | 17.8 | 11.9 | 80 | 115 | 140 | 386 | 287 | 810 |
90mm | 15.9 | 10.6 | 90 | 129 | 157 | 434 | 323 | 911 |
200mm | 7.2 | 4.8 | 200 | 287 | 349 | 964 | 719 | 2024 |
35mm full frame
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
14mm | 104.3 | 81.2 | 10 | 14 | 17 | 47 | 35 | 99 |
16mm | 96.7 | 73.7 | 11 | 16 | 19 | 54 | 40 | 113 |
17mm | 93.3 | 70.4 | 12 | 17 | 21 | 57 | 42 | 120 |
19mm | 86.9 | 64.6 | 13 | 19 | 23 | 64 | 48 | 134 |
20mm | 84.0 | 61.9 | 14 | 20 | 24 | 67 | 50 | 141 |
24mm | 73.7 | 53.1 | 17 | 24 | 29 | 81 | 60 | 169 |
28mm | 65.5 | 46.4 | 19 | 28 | 34 | 94 | 70 | 198 |
35mm | 54.4 | 37.8 | 24 | 35 | 43 | 118 | 88 | 247 |
45mm | 43.6 | 29.9 | 31 | 45 | 55 | 151 | 112 | 318 |
50mm | 39.6 | 27.0 | 35 | 50 | 61 | 168 | 125 | 353 |
85mm | 23.9 | 16.1 | 59 | 85 | 103 | 286 | 212 | 600 |
105mm | 19.5 | 13.0 | 73 | 105 | 128 | 353 | 262 | 741 |
120mm | 17.1 | 11.4 | 84 | 120 | 146 | 403 | 300 | 847 |
200mm | 10.3 | 6.9 | 139 | 200 | 243 | 672 | 500 | 1411 |
Fuji GFX
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
23mm | 87.2 | 71.0 | 12 | 17 | 23 | 64 | 42 | 133 |
32mm | 68.8 | 54.3 | 16 | 23 | 32 | 88 | 59 | 186 |
45mm | 51.9 | 40.0 | 23 | 33 | 45 | 124 | 82 | 261 |
50mm | 47.3 | 36.3 | 25 | 37 | 50 | 138 | 91 | 290 |
63mm | 38.3 | 29.2 | 32 | 46 | 63 | 174 | 115 | 365 |
100mm | 24.7 | 18.6 | 51 | 73 | 100 | 276 | 183 | 580 |
110mm | 22.5 | 17.0 | 56 | 80 | 110 | 304 | 201 | 638 |
200mm | 12.5 | 9.4 | 102 | 146 | 200 | 553 | 366 | 1160 |
250mm | 10.0 | 7.5 | 127 | 183 | 250 | 691 | 457 | 1450 |
Hasselblad 24mm | 84.8 | 68.7 | 12 | 18 | 24 | 66 | 44 | 139 |
Hasselblad 28mm | 76.1 | 60.7 | 14 | 20 | 28 | 77 | 51 | 162 |
Hasselblad 35mm | 64.1 | 50.2 | 18 | 26 | 35 | 97 | 64 | 203 |
Hasselblad 50mm | 47.3 | 36.3 | 25 | 37 | 50 | 138 | 91 | 290 |
Hasselblad 80mm | 30.6 | 23.2 | 41 | 59 | 80 | 221 | 146 | 464 |
Hasselblad 90mm | 27.4 | 20.7 | 46 | 66 | 90 | 249 | 165 | 522 |
Hasselblad 110mm | 22.5 | 17.0 | 56 | 80 | 110 | 304 | 201 | 638 |
Hasselblad 150mm | 16.6 | 12.5 | 76 | 110 | 150 | 414 | 274 | 870 |
Hasselblad 210mm | 11.9 | 8.9 | 107 | 154 | 210 | 580 | 384 | 1218 |
Hasselblad 300mm | 8.4 | 6.3 | 153 | 220 | 300 | 829 | 549 | 1740 |
Hasselblad 24mm (1.5) | 62.6 | 49.0 | 18 | 26 | 36 | 99 | 66 | 209 |
Hasselblad 28mm (1.5) | 55.1 | 42.7 | 21 | 31 | 42 | 116 | 77 | 244 |
Hasselblad 35mm (1.5) | 45.3 | 34.7 | 27 | 38 | 52 | 145 | 96 | 304 |
Hasselblad 50mm (1.5) | 32.6 | 24.7 | 38 | 55 | 75 | 207 | 137 | 435 |
Hasselblad 80mm (1.5) | 20.7 | 15.6 | 61 | 88 | 120 | 332 | 220 | 696 |
Hasselblad 90mm (1.5) | 18.4 | 13.9 | 69 | 99 | 135 | 373 | 247 | 783 |
Hasselblad 110mm (1.5) | 15.1 | 11.4 | 84 | 121 | 165 | 456 | 302 | 957 |
Hasselblad 150mm (1.5) | 11.1 | 8.3 | 115 | 165 | 225 | 622 | 412 | 1305 |
Hasselblad 210mm (1.5) | 8.0 | 6.0 | 160 | 230 | 315 | 870 | 576 | 1827 |
Hasselblad 300mm (1.5) | 5.6 | 4.2 | 229 | 329 | 450 | 1243 | 823 | 2610 |
Pentax 645
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
25mm | 82.4 | 66.5 | 13 | 18 | 25 | 69 | 46 | 145 |
28mm | 76.1 | 60.7 | 14 | 20 | 28 | 77 | 51 | 162 |
33mm | 67.1 | 52.9 | 17 | 24 | 33 | 91 | 60 | 191 |
45mm | 51.9 | 40.0 | 23 | 33 | 45 | 124 | 82 | 261 |
55mm | 43.4 | 33.2 | 28 | 40 | 55 | 152 | 101 | 319 |
80mm | 30.6 | 23.2 | 41 | 59 | 80 | 221 | 146 | 464 |
85mm | 28.9 | 21.8 | 43 | 62 | 85 | 235 | 155 | 493 |
110mm | 22.5 | 17.0 | 56 | 80 | 110 | 304 | 201 | 638 |
150mm | 16.6 | 12.5 | 76 | 110 | 150 | 414 | 274 | 870 |
160mm | 15.6 | 11.7 | 81 | 117 | 160 | 442 | 293 | 928 |
300mm | 8.4 | 6.3 | 153 | 220 | 300 | 829 | 549 | 1740 |
Hasselblad H5D-60
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
24mm | 96.4 | 79.9 | 10 | 14 | 20 | 54 | 36 | 114 |
28mm | 87.6 | 71.3 | 12 | 17 | 23 | 63 | 42 | 132 |
35mm | 75.0 | 59.7 | 15 | 21 | 29 | 79 | 52 | 166 |
50mm | 56.5 | 43.8 | 21 | 30 | 41 | 113 | 75 | 236 |
80mm | 37.1 | 28.2 | 33 | 48 | 65 | 180 | 119 | 378 |
90mm | 33.2 | 25.2 | 37 | 54 | 73 | 203 | 134 | 426 |
110mm | 27.4 | 20.7 | 46 | 66 | 90 | 248 | 164 | 520 |
150mm | 20.3 | 15.3 | 62 | 90 | 122 | 338 | 224 | 709 |
210mm | 14.6 | 10.9 | 87 | 125 | 171 | 473 | 313 | 993 |
300mm | 10.2 | 7.7 | 125 | 179 | 245 | 676 | 448 | 1419 |
24mm (1.5) | 73.4 | 58.4 | 15 | 21 | 29 | 81 | 54 | 170 |
28mm (1.5) | 65.2 | 51.1 | 17 | 25 | 34 | 95 | 63 | 199 |
35mm (1.5) | 54.2 | 41.9 | 22 | 31 | 43 | 118 | 78 | 248 |
50mm (1.5) | 39.4 | 30.0 | 31 | 45 | 61 | 169 | 112 | 355 |
80mm (1.5) | 25.2 | 19.0 | 50 | 72 | 98 | 270 | 179 | 568 |
90mm (1.5) | 22.5 | 16.9 | 56 | 81 | 110 | 304 | 201 | 639 |
110mm (1.5) | 18.5 | 13.9 | 69 | 99 | 135 | 372 | 246 | 780 |
150mm (1.5) | 13.6 | 10.2 | 93 | 134 | 184 | 507 | 336 | 1064 |
210mm (1.5) | 9.7 | 7.3 | 131 | 188 | 257 | 710 | 470 | 1490 |
300mm (1.5) | 6.8 | 5.1 | 187 | 269 | 367 | 1014 | 672 | 2128 |
LF (4x5)
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
72mm | 80.1 | 67.9 | 12 | 18 | 24 | 72 | 45 | 151 |
90mm | 67.8 | 56.6 | 15 | 22 | 30 | 90 | 56 | 188 |
150mm | 43.9 | 35.8 | 26 | 37 | 51 | 150 | 93 | 314 |
240mm | 28.3 | 22.8 | 41 | 59 | 81 | 240 | 148 | 502 |
300mm | 22.8 | 18.4 | 52 | 74 | 101 | 300 | 186 | 628 |
LF (6x17)
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
72mm | 99.5 | 45.2 | 11 | 15 | 19 | 51 | 72 | 108 |
90mm | 86.7 | 36.9 | 13 | 19 | 23 | 64 | 90 | 134 |
150mm | 59.1 | 22.6 | 22 | 32 | 39 | 107 | 150 | 224 |
240mm | 39.0 | 14.3 | 35 | 51 | 62 | 171 | 240 | 359 |
300mm | 31.6 | 11.4 | 44 | 64 | 77 | 214 | 300 | 448 |
LF (8x10)
Focal length | Horizontal FOV | Vertical FOV | APS-C | 35mm | GFX | 4x5 | 6x17 | 8x10 |
150mm | 80.5 | 68.2 | 12 | 18 | 24 | 71 | 44 | 150 |
240mm | 55.8 | 45.8 | 20 | 28 | 39 | 114 | 71 | 240 |
300mm | 45.9 | 37.4 | 25 | 35 | 48 | 143 | 89 | 300 |
450mm | 31.5 | 25.4 | 37 | 53 | 73 | 214 | 133 | 450 |
600mm | 23.9 | 19.2 | 49 | 71 | 97 | 286 | 177 | 600 |
Code
The table above was generated by the program below.
package main import ( "fmt" "math" ) type Medium struct { h, v float64 name string } func (m Medium) AspectRatio() float64 { return m.h/m.v } var ( MediumAPSC = Medium{25.1, 16.7, "APS-C"} MediumFF = Medium{36, 24, "35mm"} MediumMFF = Medium{43.8, 32.8, "GFX"} MediumMFH = Medium{53.7, 40.2, "H5D"} MediumLF45 = Medium{121, 97, "4x5"} MediumLF617 = Medium{170, 60, "6x17"} MediumLF810 = Medium{254, 203, "8x10"} ) var Mediums = []Medium { MediumAPSC, MediumFF, MediumMFF, MediumLF45, MediumLF617, MediumLF810, } type Lens struct { focal float64 tc float64 mfg string } func (l Lens) String() string { var s string if l.mfg != "" { s = l.mfg + " " } s += fmt.Sprintf("%.0fmm", l.focal) if l.tc == 1.0 { return s } return s + fmt.Sprintf(" (%.1f)", l.tc) } func (l Lens) Focal() float64 { return l.focal * l.tc } var LensesAPSC = []Lens { {10, 1.0, ""}, {14, 1.0, ""}, {16, 1.0, ""}, {18, 1.0, ""}, {35, 1.0, ""}, {50, 1.0, ""}, {55, 1.0, ""}, {56, 1.0, ""}, {60, 1.0, ""}, {80, 1.0, ""}, {90, 1.0, ""}, {200, 1.0, ""}, } var LensesFF = []Lens{ {14, 1.0, ""}, {16, 1.0, ""}, {17, 1.0, ""}, {19, 1.0, ""}, {20, 1.0, ""}, {24, 1.0, ""}, {28, 1.0, ""}, {35, 1.0, ""}, {45, 1.0, ""}, {50, 1.0, ""}, {85, 1.0, ""}, {105, 1.0, ""}, {120, 1.0, ""}, {200, 1.0, ""}, } var LensesGFX = []Lens{ {23, 1.0, ""}, {32, 1.0, ""}, {45, 1.0, ""}, {50, 1.0, ""}, {63, 1.0, ""}, {100, 1.0, ""}, {110, 1.0, ""}, {200, 1.0, ""}, {250, 1.0, ""}, } var LensesPentax = []Lens { {25, 1.0, ""}, {28, 1.0, ""}, {33, 1.0, ""}, {45, 1.0, ""}, {55, 1.0, ""}, {80, 1.0, ""}, {85, 1.0, ""}, {110, 1.0, ""}, {150, 1.0, ""}, {160, 1.0, ""}, {300, 1.0, ""}, } var LensesHasselblad = []Lens { {24, 1.0, ""}, {28, 1.0, ""}, {35, 1.0, ""}, {50, 1.0, ""}, {80, 1.0, ""}, {90, 1.0, ""}, {110, 1.0, ""}, {150, 1.0, ""}, {210, 1.0, ""}, {300, 1.0, ""}, } func init() { for _, v := range LensesHasselblad { v1 := v v1.tc = 1.5 LensesHasselblad = append(LensesHasselblad, v1) } } func init() { for _, v := range LensesHasselblad { v1 := v v1.mfg = "Hasselblad" LensesGFX = append(LensesGFX, v1) } } var LensesLF = []Lens { {72, 1.0, ""}, {90, 1.0, ""}, {150, 1.0, ""}, {240, 1.0, ""}, {300, 1.0, ""}, } var LensesLF810 = []Lens { {150, 1.0, ""}, {240, 1.0, ""}, {300, 1.0, ""}, {450, 1.0, ""}, {600, 1.0, ""}, } type System struct { Medium Lenses *[]Lens Name string } var ( SystemAPSC = System{MediumAPSC, &LensesAPSC, "APS-C"} SystemFF = System{MediumFF, &LensesFF, "35mm full frame"} SystemGFX = System{MediumMFF, &LensesGFX, "Fuji GFX"} SystemPentax = System{MediumMFF, &LensesPentax, "Pentax 645"} SystemHasselblad = System{MediumMFH, &LensesHasselblad, "Hasselblad H5D-60"} SystemLF45 = System{MediumLF45, &LensesLF, "LF (4x5)"} SystemLF617 = System{MediumLF617, &LensesLF, "LF (6x17)"} SystemLF810 = System{MediumLF810, &LensesLF810, "LF (8x10)"} ) var Systems = []System { SystemAPSC, SystemFF, SystemGFX, SystemPentax, SystemHasselblad, SystemLF45, SystemLF617, SystemLF810, } func fov(ssize, focal float64) float64 { return 2 * math.Atan(ssize/(2*focal)) * 180 / math.Pi } type LensAll struct { Lens HFoV float64 VFoV float64 Eq map[Medium]float64 } func (la LensAll) String() string { var s string s = fmt.Sprintf("|%v\n|%.1f\n|%.1f", la.Lens, la.HFoV, la.VFoV) for _, m := range Mediums { s += fmt.Sprintf("\n|%.0f", la.Eq[m]) } return s } func Equivalent(l Lens, m Medium, mtarg Medium) float64 { if m.AspectRatio() <= mtarg.AspectRatio() { return l.Focal() * mtarg.v/m.v } return l.Focal() * mtarg.h/m.h } type SystemEquiv struct { System Lenses []LensAll } func (se SystemEquiv) String() string { s := fmt.Sprintf("=== %s ===\n", se.Name) s += `{| class="wikitable"` + "\n" s += "|+"+se.Name + "\n" s += fmt.Sprintf("|-\n") s += fmt.Sprintf("|Focal length\n") s += fmt.Sprintf("|Horizontal FOV\n") s += fmt.Sprintf("|Vertical FOV\n") for _, m := range Mediums { s += fmt.Sprintf("|%s\n", m.name) } for _, l := range se.Lenses { s += fmt.Sprintf("|-\n%s\n", l) } s += "|}" return s } func main() { for _, system := range Systems { se := SystemEquiv{system, nil} lenses := []LensAll{} for _, lens := range *system.Lenses { la := LensAll{Lens: lens} la.HFoV = fov(system.Medium.h, lens.Focal()) la.VFoV = fov(system.Medium.v, lens.Focal()) la.Eq = make(map [Medium]float64) for _, m := range Mediums { la.Eq[m] = Equivalent(lens, system.Medium, m) } lenses = append(lenses, la) } se.Lenses = lenses fmt.Println(se) } }