#日当たりシミュレーションを作る:窓の光を床へ投影する幾何モデル
夏の正午は窓際に、冬の正午は部屋の奥に光が入る。その違いを読むだけでなく、窓の向き・高さ・時刻を変えて試せるようにしたのが WindowLight です。
空色の設計図、窓の青、光の黄、赤土のアクセントを使い、同じ縮尺の2日分の床を並べました。主役は太陽軌道図ではなく「この窓から、床のどこへ届くか」です。
#太陽の方向と、窓から床への投影
太陽の方向を東・北・上の3成分で表します。窓の外向き方向への内積が正でなければ、光は窓の正面側から入りません。太陽が地平線以下なら夜、高度1°未満は近似の対象外です。
窓の各隅から太陽と反対の方向に直線を伸ばします。高さを上向き成分で割れば、床に到達するまでの倍率が分かり、床の点が得られます。4点を結ぶ四辺形はそのままでは部屋の外へはみ出すため、部屋の4辺で順に切り取ります。面積は頂点列の靴紐公式で求めます。
窓下端1m・高さ2m、真正面の太陽高度45°なら、光は床の1〜3mに届きます。窓幅2mなら面積4㎡です。この手計算を単体テストの基準にして、絵がそれらしく見えるだけの実装を避けました。
#近似を、精密さのふりで売らない
太陽位置には NOAAの簡易式 を使っています。年内角度から赤緯と均時差を近似し、経度・日本時間から時角を求めます。うるう年は366日で扱い、午前と午後の方位を逆にしないようベクトルのatan2を使います。
NOAAの説明には保守終了・精度保証なしの注意があります。別の高精度計算機の精度説明を、この簡易式の保証に転用してはいけません。
国立天文台「こよみの計算」の東京と同じ座標で、2024年3月20日・2026年6月21日と12月22日の16時刻を照合しました。参照高度9.9°以上の範囲では高度差が最大約0.20°、方位差が約0.38°でした。ただし参照は大気差を含み、こちらは含まないため、計算条件も完全には一致しません。全日時・全都市の誤差上限ではなく、実測検証でもありません。
地平線近くでは影の投影距離が急激に伸びます。巨大な値を黙って制限すると、誤った絵を正常な結果として見せてしまいます。そこで高度1°未満は「対象外」とし、面積差や保存画像にも0㎡とは書きません。
#明るさの診断ではない
このモデルは周辺建物・樹木、天気、庇、壁厚、ガラス、家具、天空光や反射光を扱いません。床の直射範囲が0でも部屋が暗いとは限らず、範囲が大きくても照度が高いとは限りません。実物件の選定・建築採光基準・発電量の判断には使えません。
日当たりという言葉には「実際の家がどれだけ明るいか」という期待もあります。用途説明とFAQでこの違いを明記し、検索向けのタイトルだけを広くして誤解させないようにしました。
#結果と、変更できる条件を残す
SVGには都市・時刻・窓の寸法・日付・部屋の寸法・計算根拠・限界を残します。画像だけで条件が失われないためです。設定JSONも保存でき、入力して再編集できます。
復元はバージョン・日付・都市・数値範囲・窓幅と部屋幅の関係を検査してから反映します。失敗した設定で現在の比較を上書きしません。無効な入力中は最後の有効な条件の表示と明記し、保存を停止します。離脱時には保存用URLとタイマーを解放します。
#次の拡張にも、境界を保つ
今後、庇や窓位置の比較を追加する余地があります。ただし、要素を増やしただけで「現物に近い」と主張することはできません。幾何モデルと実際の採光を区別し、操作・計算・保存画像を同じ条件で検査する方針を維持します。
[ ./next_action ]
読んだら、 WindowLight を実際に動かす。
この開発ログは WindowLight をどう作ったかの記録です。 読み終わったらそのままサービス本体へ戻って、 実物で価値を確かめてください。