function doResCalc() {
  var f = document.forms.rescalc;
  
  var va = f.va.value;
  if (va < 0.04) va = 0.04; // worst visual acuity
  if (va > 2   ) va = 2   ; // best possible visual acuity
  f.va.value = va;
  var camfactor = f.camfact.value;
  if (camfactor < 1) camfactor = 1;
  if (camfactor > 5) camfactor = 5;
  f.camfact.value = camfactor;
  var width = f.width.value;
  var height = f.height.value;
  var view = f.view.value;
  
  var theta = Math.PI / (f.va.value * 60.0 * 180.0); // in radians
  var k = 2.0 * Math.tan(theta / 2.0);
  var ppuk = 1.0 / k;
  var mpk = camfactor * ((1.0 / (k * k)) / 1000000.0);
  f.ppuk.value = Math.round(ppuk);
  f.mpk.value = Math.round(mpk * 10.0) / 10.0;
  f.ppu.value = (view == 0) ? "" : ppuk / view;
  f.mp.value = (width == 0 || height == 0 || view == 0) ? "" : width * height * mpk / (view * view);
}
