| Online Skärpedjupsberäknare |
Cam Jams Online SkärpedjupsberäknareBeräkna skärpedjupet online med vårt skärpedjupsverktyg. Det är riktigt enkelt, du matar in de olika värdena tryck sedan på "beräkna" så får du fram det korrekta skärpedjupet. Mycket användbart! // Note: internally, all computations are done in feet. Converted to meters // as needed for display. var mm_2_feet = 1/304.8; var feet_2_mm = 304.8; function compute_dof() { var f = document.dof_calculator; var dist = f.dist.value; if (f.units.value.search(/meters/i) != -1) dist = dist * 1000 * mm_2_feet; var coc_mm = f.coc.value; var coc = coc_mm * mm_2_feet; var flen_mm = f.flen.value; var flen = flen_mm * mm_2_feet; var aperture = f.aperture.value; if (isNaN(flen_mm) || isNaN(coc_mm) || isNaN(dist) || isNaN(aperture)) { alert("Error: At least one of the input fields contains non-numeric characters"); return; } // Depth of field formula from: // "Focal Encylopedia of Photography", Macmillan Company, New York, 1960 var tmp = (aperture*coc*(dist-flen))/(flen*flen); var dist_far = (tmp>=1) ? "inf" : dist / (1 - tmp); var dist_near = dist / (1 + tmp); var depth_of_field = (tmp<1) ? (dist_far - dist_near) : "inf"; var hyper_focal = (flen*flen)/(aperture*coc); var depth_of_focus = (flen*flen*dist)/(hyper_focal*(dist-flen)); //airy_disk_diam = 2.43932 x light_wave_length x fnum var airy_disk_diam = 2.43932 * (550 * .000001) * aperture; if (f.units.value.search(/feet/i) != -1) { f.near_dist.value = feet_inches(dist_near); f.far_dist.value = feet_inches(dist_far); f.depth_of_field.value = feet_inches(depth_of_field); f.depth_of_focus.value = dec4(depth_of_focus*12) + "\""; f.hyper_dist.value = feet_inches(hyper_focal); } else { f.near_dist.value = meters(dist_near); f.far_dist.value = meters(dist_far); f.depth_of_field.value = meters(depth_of_field); f.depth_of_focus.value = dec4((feet_2_mm * depth_of_focus)/10) + "cm"; f.hyper_dist.value = meters(hyper_focal); } f.airy_disk_diameter.value = dec3(airy_disk_diam); } //Takes a distance in feet and converts to string representation in meters/cm function meters(aNumber) { if (isNaN(aNumber)) return aNumber; var mm = aNumber * feet_2_mm; var m = Math.floor(mm/1000); var cm = dec2((mm/10) % 100); return m + "m " + cm + "cm"; } //Takes a distance in feet and converts to string representation in feet/inches function feet_inches(aNumber) { if (isNaN(aNumber)) return aNumber; var feet = Math.floor(aNumber); var inches = dec1((aNumber%1) * 12) return (feet + "' " + inches + "\""); } function dec1(aNumber) {return (rnd(aNumber,1));} function dec2(aNumber) {return (rnd(aNumber,2));} function dec3(aNumber) {return (rnd(aNumber,3));} function dec4(aNumber) {return (rnd(aNumber,4));} function dec5(aNumber) {return (rnd(aNumber,5));} function rnd(aNumber,decimal_places) { if (isNaN(aNumber)) { return aNumber; } var mult = Math.pow(10,decimal_places); return (Math.round(aNumber*mult))/mult; } function compute_parallax() { var f = document.parallax_calculator; var pixels_per_degree = f.image_width_pixels.value/f.image_fov.value; var nodal_point_shift = f.nodal_point_offset.value * Math.sin((Math.PI/180) * f.rotate_angle.value); //convert offset to either meters or feet if (f.units.value.search(/meters/i) != -1) { nodal_point_shift = nodal_point_shift / 1000; } else { nodal_point_shift = nodal_point_shift / (25.4 * 12); } var theta1 = Math.atan(f.dist_to_near.value/nodal_point_shift); var theta2 = Math.atan(f.dist_to_far.value/nodal_point_shift); var angular_dist = (180/Math.PI) * Math.abs(theta2-theta1); //This isn't quite accurate for rectilinear lenses where one degree //gets spread over a varying amount of pixels depending on the //distance from the center...still, good enough for a rough estimate. var pixel_error = angular_dist * pixels_per_degree; f.angular_parallax_error.value = dec5(angular_dist); f.pixel_shift_parallax_error.value = dec1(pixel_error); } function compute_fov() { var film_width = 36; var film_height = 24; var film_diag; var f = document.fov_calculator; var flen = f.flen.value; var flen_mult = f.flen_mult.value; if (isNaN(flen_mult) || flen_mult<=0) { f.flen_mult = 1; flen_mult = 1; } //Account for focal length multiplier (actually, a film/sensor size multiplier) film_width = film_width/flen_mult; film_height = film_height/flen_mult; film_diag = (Math.sqrt((film_width * film_width) + (film_height * film_height))); var fov_h = (2 * Math.atan(film_width / (2 * flen)) * 180 / Math.PI); var fov_v = (2 * Math.atan(film_height / (2 * flen)) * 180 / Math.PI); var fov_d = (2 * Math.atan(film_diag / (2 * flen)) * 180 / Math.PI); f.fov_h.value = dec1(fov_h); f.fov_v.value = dec1(fov_v); f.fov_d.value = dec1(fov_d); } function compute_fov2() { var film_width = 36; var film_height = 24; var film_diag; var f = document.fov_calculator2; var flen = f.flen.value; var flen_mult = f.flen_mult.value; var subj_dist = f.subj_dist.value; if (isNaN(flen_mult) || flen_mult<=0) { f.flen_mult = 1; flen_mult = 1; } // convert distance to mm if (f.units.value.search(/feet/i) != -1) { //user input in feet subj_dist = subj_dist * feet_2_mm; } else { //user input in m subj_dist = subj_dist * 1000; } //Account for focal length multiplier (actually, a film/sensor size multiplier) film_width = film_width/flen_mult; film_height = film_height/flen_mult; film_diag = (Math.sqrt((film_width * film_width) + (film_height * film_height))); var half_fov_h = (Math.atan(film_width / (2 * flen))); var fov_h = 2 * (subj_dist * Math.tan(half_fov_h)); var half_fov_v = (Math.atan(film_height / (2 * flen))); var fov_v = 2 * (subj_dist * Math.tan(half_fov_v)); var half_fov_d = (Math.atan(film_diag / (2 * flen))); var fov_d = 2 * (subj_dist * Math.tan(half_fov_d)); //convert answer (currently in mm) back to feet fov_h = fov_h * mm_2_feet; fov_v = fov_v * mm_2_feet; fov_d = fov_d * mm_2_feet; if (f.units.value.search(/feet/i) != -1) { f.fov_h.value = feet_inches(fov_h); f.fov_v.value = feet_inches(fov_v); f.fov_d.value = feet_inches(fov_d); } else { f.fov_h.value = meters(fov_h); f.fov_v.value = meters(fov_v); f.fov_d.value = meters(fov_d); } } function compute_mosaic() { var f = document.mosaic_calculator; var fov_total = f.fov.value; var overlap = f.overlap.value; var flen_mult = f.flen_mult.value; var overlap_pct = overlap/100; // num_images * fov - (num_images - 1) * overlap% * fov = fov_total // (num_images - (num_images-1) * overlap%) * fov = fov_total // fov = fov_total / (num_images - (num_images-1) * overlap%) f.flen_1x1.value = dec1(compute_flen_for_fov(fov_total, flen_mult)); f.flen_2x2.value = dec1(compute_flen_for_fov(fov_total / (2-1*overlap_pct), flen_mult)); f.flen_3x3.value = dec1(compute_flen_for_fov(fov_total / (3-2*overlap_pct), flen_mult)); f.flen_4x4.value = dec1(compute_flen_for_fov(fov_total / (4-3*overlap_pct), flen_mult)); f.flen_5x5.value = dec1(compute_flen_for_fov(fov_total / (5-4*overlap_pct), flen_mult)); f.flen_6x6.value = dec1(compute_flen_for_fov(fov_total / (6-5*overlap_pct), flen_mult)); } function compute_flen_for_fov(fov, flen_mult) { var film_width=36; film_width = film_width / flen_mult; flen = (film_width / (2 * Math.tan(Math.PI * fov / 360))); return flen; } function compute_lens_equivalent() { var f = document.lens_equivalence_calculator; var w1 = f.sensor1_width.value; var h1 = f.sensor1_height.value; var w2 = f.sensor2_width.value; var h2 = f.sensor2_height.value; var diag1 = Math.sqrt((w1*w1) + (h1*h1)); var diag2 = Math.sqrt((w2*w2) + (h2*h2)); var flen1 = f.sensor1_flen.value; var fnum1 = f.sensor1_fnum.value; var flen2 = flen1 * (diag2/diag1); //if we were computing FOV we'd care about the values for CoC. But for //our purposes we only carea about the ratio of coc1 to coc2 var coc1 = 1; var coc2 = coc1 * (diag2/diag1); //Assume apertures are "equivalent" (in terms of their impact on DOF) //when hyperfocal distances are the same // Note: hyper_focal = (flen*flen)/(aperture*coc) var fnum2 = fnum1 * (coc1/coc2) * ((flen2*flen2) / (flen1*flen1)); f.sensor2_flen.value = dec1(flen2); f.sensor2_fnum.value = dec1(fnum2); } Skärpedjups Beräknaren |
||||||||||||||||||||||||||||||||||||||||||
Här hittar du en mycket bra lista på Circle of confusion för olika kameramodeller. Vill du ha en Skärpedjupberäknare direkt i mobilen? Ladda ner den härifrån | ||||||||||||||||||||||||||||||||||||||||
