Question: How to calculate the focusing dial of lens

> restart;
> with(plots); with(StringTools); with(plottools);
> INF := 999999999999999999999;
                     999999999999999999999
> NULL;
> MinoxAngle := 200; MikromaAngle := 350; MinicordAngle := 290; GamiAngle := 280; GamiFocal := 0.25e-1; SummitarDial := [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2, 2.2, 3, 4, 5, 6, 7, 10, 20, INF]; Minox35MLDial := [3, 4, 6, 10, 20, INF]; Minox35Angle := 100; MinicordDial := [.35, .4, .5, .6, .7, .8, .9, 1, 1.2, 1.5, 2, 3, 4, 8, INF]; Mini := nops(MinicordDial); MikromaDial := [.5, .6, .7, .8, .9, 1, 1.2, 1.5, 2, 2.5, 3.5, 6, INF]; MinoxLXDial := [.2, .24, .3, .4, .6, 1, 2, 30]; MinoxLXAngle := 270; GamiDial := [.5, .6, .7, .8, 1, 1.2, 1.5, 2, 3, 5, 99990000000000]; MinoxBDial := [8*(1/12), 10*(1/12), 1, 1.5, 2, 3, 6, INF]; MinoxBAngle := 270;
                              200
                              350
                              290
                              280
                             0.025
[1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2, 2.2, 3, 4, 5, 6, 7, 10, 

  20, 999999999999999999999]
            [3, 4, 6, 10, 20, 999999999999999999999]
                              100
 [0.35, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.5, 2, 3, 4, 8, 

   999999999999999999999]
                               15
    [0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.5, 2, 2.5, 3.5, 6, 

      999999999999999999999]
              [0.2, 0.24, 0.3, 0.4, 0.6, 1, 2, 30]
                              270
   [0.5, 0.6, 0.7, 0.8, 1, 1.2, 1.5, 2, 3, 5, 99990000000000]
         [2  5                                        ]
         [-, -, 1, 1.5, 2, 3, 6, 999999999999999999999]
         [3  6                                        ]
                              270

> NULL;
> dd := GamiDial; N := nops(dd); dstx := [seq(convert(dd[i], string), i = 1 .. N)];
   [0.5, 0.6, 0.7, 0.8, 1, 1.2, 1.5, 2, 3, 5, 99990000000000]
                               11
  [".5", ".6", ".7", ".8", "1", "1.2", "1.5", "2", "3", "5", 

    "99990000000000"]
> NULL;
> MinicordAngle := 290;
                              290
> NULL;

> LensDial := proc (LensName, focal, Angle, scale, dr) local p1, p2, p3, p8, pk, pt, rk, R, R2, R3, Rc, c1, ds2; R := 1600; R2 := 1400; R3 := 1200; Rc := 1500; CaptionTail1 := "EXTENSION ANGLE"; CaptionTail2 := "LENS FOCUSING DIAL"; Caption1 := Join([LensName, CaptionTail1]); Caption2 := Join([LensName, CaptionTail2]); q := 180/Pi; rotation := 90; dir := dr; ds := scale; N := nops(ds); dstx := [seq(convert(ds[i], string), i = 1 .. N)]; ds2 := subs(dstx[N] = infinity, dstx); MaxAngle := Angle; f := focal; degr := -(-ds[1]+f)*Angle/(D-f)+rotation; g1 := degr/q; for j to N do deg[j] := subs(D = ds[j], degr) end do; for i to N do rdn[i] := evalf(deg[i]/q); xv[i] := R2*cos(rdn[i]); yv[i] := R2*sin(rdn[i]); wx[i] := R3*cos(rdn[i]); wy[i] := R3*sin(rdn[i]) end do; pk := {seq([ds[i], deg[i]], i = 1 .. N)}; rk := {seq([dir*xv[i], yv[i]], i = 1 .. N)}; txt := {seq([dir*wx[i], wy[i], ds2[i]], i = 1 .. N)}; p3 := pointplot(rk, caption = Caption2, captionfont = ["ROMAN", bold, 22], symbol = solidcircle, symbolsize = 15, color = red, axes = none); c1 := circle([0, 0], Rc, thickness = 8); p8 := textplot(txt, 'font' = ["times", "bold", 14]); display(p3, c1, p8, scaling = constrained) end proc;
Warning, `CaptionTail1` is implicitly declared local to procedure `LensDial`
Warning, `CaptionTail2` is implicitly declared local to procedure `LensDial`
Warning, `Caption1` is implicitly declared local to procedure `LensDial`
Warning, `Caption2` is implicitly declared local to procedure `LensDial`
Warning, `q` is implicitly declared local to procedure `LensDial`
Warning, `rotation` is implicitly declared local to procedure `LensDial`
Warning, `dir` is implicitly declared local to procedure `LensDial`
Warning, `ds` is implicitly declared local to procedure `LensDial`
Warning, `N` is implicitly declared local to procedure `LensDial`
Warning, `dstx` is implicitly declared local to procedure `LensDial`
Warning, `MaxAngle` is implicitly declared local to procedure `LensDial`
Warning, `f` is implicitly declared local to procedure `LensDial`
Warning, `degr` is implicitly declared local to procedure `LensDial`
Warning, `g1` is implicitly declared local to procedure `LensDial`
Warning, `j` is implicitly declared local to procedure `LensDial`
Warning, `deg` is implicitly declared local to procedure `LensDial`
Warning, `i` is implicitly declared local to procedure `LensDial`
Warning, `rdn` is implicitly declared local to procedure `LensDial`
Warning, `xv` is implicitly declared local to procedure `LensDial`
Warning, `yv` is implicitly declared local to procedure `LensDial`
Warning, `wx` is implicitly declared local to procedure `LensDial`
Warning, `wy` is implicitly declared local to procedure `LensDial`
Warning, `txt` is implicitly declared local to procedure `LensDial`
> ;
> NULL;
> LensDial("MEOPTA MICROMA  HELGOR 25mm", 0.25e-1, 350, MikromaDial, 1);

> LensDial("GOERZ MINICORD  25mm", 0.25e-1, 335, MinicordDial, 1);


> ;
> LensDial("MINOX LX MINOX 15mm", 0.15e-1, 270, MinoxLXDial, 1);

> LensDial("GAMI ESAMITAR 25mm", 0.25e-1, 290, GamiDial, 1);

Please Wait...