「テスト01」の編集履歴(バックアップ)一覧に戻る

テスト01 - (2013/02/06 (水) 18:06:49) のソース

#include_js(http://code.jquery.com/jquery-1.9.1.min.js)
&topicpath()&aname(top)
#divclass(pageTitle){センサーサイズ別被写界深度計算表}
**初めに
#divclass(h5){初めに}
 センサーサイズによって被写界深度が変わる(ボケやすいボケにくい)などという話をよくしますが、実際にセンサーサイズによってどの程度の変化があるのかを計算してみるページです。
 各レンズのF値とレンズの焦点距離別の被写界深度の深さ、実際に焦点が合う範囲のカメラからの距離を計算することができます。
 ※あくまで理論上の計算値であり、実際はカメラ、レンズ、その他条件により異なります
 ※計算違い等ありましたら教えてください
#divclass(h5){使い方}
-被写体までの距離を入力します。入力し直したら「再計算」ボタンを押してください
-センサーサイズを選択します
-レンズの焦点距離別の被写界深度と、カメラからの焦点が合う範囲の距離が表示されます
-ブラウザを横に長くすると見やすいです
#right(){&link_anchor(top){▲}&link_anchor(bottom){▼}}
**被写界深度と焦点範囲の計算
#divclass(h5){各種データ設定}
#divclass(h6){被写体までの距離入力}
#html2(){
<table border="0">
 <tr>
  <td class="in">被写体までの距離<input type="text" id="tbDist" size="6" value="3.00">m(メートル)</td>
  <td><input type="button" id="btnReculc" value="再計算 " onclick="recalcData()"></td>
 </tr>
</table>
<font color="red"><span id="lblError"></span></font>
}
#divclass(h6){センサーサイズの選択}
#html2(){
<table border="1" id="tblSensorList">
<tr><td>選択</td></tr>
<tr><td>センサーサイズ</td></tr>
<tr><td>機種例</td></tr>
<tr><td>幅(mm)</td></tr>
<tr><td>高さ(mm)</td></tr>
</table>
<span id="lblCaption"></span>
}
#divclass(h5){計算結果}
#html2(){
<table border="1" id="tblMain">
 <tr><td>レンズ</td></tr>
 <tr><td>35mm換算</td></tr>
 <tr><td>絞り</td></tr>
</table>
}
**コメント
- 投稿のテスト  -- 管理人  (2013-02-05 23:04:15)
#comment()
#right(){&link_anchor(top){▲}&link_anchor(bottom){▼}}
----
#right(){&lastmod()&aname(bottom)}
#right(){&trackback()}
#javascript(){{
//**********定数宣言
//*****絞り定数 レンズ定数 フィルム定数
var arrFInfo = [1.4, 1.8, 2.0, 2.8, 4.0, 5.6, 8.0, 11.0, 16.0, 22.0, 32.0];
var arrMMInfo = [18,27,34, 50,81,300];
var arrSensorInfo = {
	0: {name: '35mm', width: 36, height: 24, memo:'フルサイズ機'},
	1: {name: 'APS-C', width: 23.4, height: 16.7, memo:'NEXなど'},
	2: {name: '4/3"', width: 17.3, height: 13.0, memo:'マイクロフォーサーズ'},
	3: {name: '1"', width: 13.2, height: 8.8, memo:'Nikon1など'},
	4: {name: '2/3"', width: 8.8, height: 6.6, memo:'FUJIFILM X20など'},
	5: {name: '1/1.7"', width: 7.6, height: 5.7, memo:'PowerShot S110など'},
	6: {name: '1/2.3"', width: 6.2, height: 4.6, memo:'コンデジの多く'}
 };
//**********html生成
//*****センサーサイズhtml生成
var i = 0;
for (var data in arrSensorInfo) {
	var tdData0 = jQuery("<td width='100pix'><input type='radio' name='rbSensorSize' id='film" + i + "' onclick='recalcData()'></td>");
	var tdData1 = jQuery("<td>" + arrSensorInfo[data].name + "</td>");
	var tdData4 = jQuery("<td>" + arrSensorInfo[data].memo + "</td>");
	var tdData2 = jQuery("<td>" + arrSensorInfo[data].width + "</td>");
	var tdData3 = jQuery("<td>" + arrSensorInfo[data].height + "</td>");
	$("#tblSensorList").find("tr").eq(0).append(tdData0);
	$("#tblSensorList").find("tr").eq(1).append(tdData1);
	$("#tblSensorList").find("tr").eq(2).append(tdData4);
	$("#tblSensorList").find("tr").eq(3).append(tdData2);
	$("#tblSensorList").find("tr").eq(4).append(tdData3);
	i++;
}
//*****F値設定
for (var i=0; i < arrFInfo.length; i++) {
	var tdData0 = jQuery("<tr><td>" + arrFInfo[i] + "</td></tr>");
	$("#tblMain").append(tdData0);
}
//*****表示場所
for (var j=0; j < arrMMInfo.length; j++) {
	var tblData0 = jQuery("<td colspan='2'><span id='lensMM" + j + "'></span>mm</td>");
	var tblData1 = jQuery("<td colspan='2'><span id='lens35MM'>" + arrMMInfo[j] + "mm</span></td>");
	var tblData2 = jQuery("<td>焦点範囲(m)</td>");
	var tblData3 = jQuery("<td>被写界深度(m)</td>");
	$("#tblMain").find("tr").eq(0).append(tblData0);
	$("#tblMain").find("tr").eq(1).append(tblData1);
	$("#tblMain").find("tr").eq(2).append(tblData2);
	$("#tblMain").find("tr").eq(2).append(tblData3);
	for (var i=0; i<arrFInfo.length; i++) {
		var tblData4 = jQuery("<td><span id='fRange" + j + i + "'></span></td>");
		var tblData5 = jQuery("<td><span id='fDepth" + j + i + "'></span></td>");
		$("#tblMain").find("tr").eq(i+3).append(tblData4);
		$("#tblMain").find("tr").eq(i+3).append(tblData5);
	}
}
//*****初期設定
$("#film3")[0].checked = true;
this.recalcData();

//**********関数
//*****焦点距離の算出
function calcFocusLength(width, height, length) {
	var diag35 = calcDiag(arrSensorInfo[0].width, arrSensorInfo[0].height);
	var diag = calcDiag(width, height);
	return (diag / diag35 * length);
}
//*****対角線の長さの算出
function calcDiag(width, height) {
	return Math.sqrt(width*width + height*height);
}
//被写界深度
function calcRearDepth(index, f, depth) {
	var confusion = calcDiag(arrSensorInfo[index].width, arrSensorInfo[index].height) / 1300;
	return confusion * f * Math.pow(($("#tbDist").val() * 1000.0), 2) / (Math.pow(depth, 2) - confusion * f * $("#tbDist").val() * 1000.0)
}
function calcFrontDepth(index, f, depth) {
	var confusion = calcDiag(arrSensorInfo[index].width, arrSensorInfo[index].height) / 1300;
	return confusion * f * Math.pow(($("#tbDist").val() * 1000.0), 2) / (Math.pow(depth, 2) + confusion * f * $("#tbDist").val() * 1000.0)
}
//被写界深度
function calcDepth(index, f, depth) {
	if (calcRearDepth(index, f, depth) >= 0) {
		return (calcFrontDepth(index, f, depth) / 1000.0 + calcRearDepth(index, f, depth) / 1000.0).toFixed(3);
	}
	return "";
}
//焦点範囲
function calcDepthLength(index, f, depth) {
	if (calcRearDepth(index, f, depth) >= 0) {
		return (Number($("#tbDist").val()) - calcFrontDepth(index, f, depth) / 1000.0).toFixed(3) + "~" + (Number($("#tbDist").val()) + calcRearDepth(index, f, depth) / 1000.0).toFixed(3);
	}
	return (Number($("#tbDist").val()) - calcFrontDepth(index, f, depth) / 1000.0).toFixed(3) + "~∞";
}
//**********メインルーチン
//*****選択されているの取得
function getChekedRadioButton()	{
	for (var i=0; i <= $("input[name='rbSensorSize']").length; i++) {
		if ($("input[name='rbSensorSize']")[i].checked) {
			return i;
		}
	}
	return 0;
}
//*****入力エラー処理
function errorCheck() {
	var errorText = "";
	if (jQuery.isNumeric($("#tbDist").val()) ==false ) { errorText="数値を入力してくださいでござる"; }
	$("#lblError").text(errorText);
}
//*****再計算処理
function recalcData(index) {
	//入力エラー処理
	errorCheck();
	//選択されているRadioの取得
	index = getChekedRadioButton();
	//焦点距離の計算
	for (var i=0; i < arrMMInfo.length; i++) {
		var calcLength = Math.ceil(calcFocusLength(arrSensorInfo[index].width, arrSensorInfo[index].height, arrMMInfo[i]));
		$("#lensMM" + i).text(calcLength);
	}

	//被写界深度と焦点の合う距離の計算
	for (var i=0; i < arrMMInfo.length; i++) {
		for (var j=0; j < arrFInfo.length; j++) {
			var result0 = calcDepth(index, arrFInfo[j], calcFocusLength(arrSensorInfo[index].width, arrSensorInfo[index].height, arrMMInfo[i]));
			$("#fDepth"+i+j).text(result0);
			var result1 = calcDepthLength(index, arrFInfo[j], calcFocusLength(arrSensorInfo[index].width, arrSensorInfo[index].height, arrMMInfo[i]));
			$("#fRange"+i+j).text(result1);
		}
	}
}
//**********終わり
}}
目安箱バナー