2014年9月17日 (水)

Sunrise 開発メモ

■Sunrise 開発メモ
追加メモ
・計算精度向上(時刻1分以内,角度1度以内)
・閏年対応(精度向上に伴い年変化が無視できない) 
・日付設定に"西暦"を追加
・”都市設定モード”を追加
 ノーマルフォントでファンクションガイドに都市名表示
 
年設定
Sr50lp1
閏年 
Sr50lp2
 
太陽方位の時間変化
Sr50b24h  
  
ファンクションガイド風の都市名表示
Sr51bmn
  
[HP200LX/LXDIC]

|

2014年9月13日 (土)

Sunrise 開発メモ

■Sunrise 開発メモ
Ver 4.6c
 
現在の仕様 
 
●ウィンドウ構成
・メイン画面(1)
  数値表+グラフ1,又は,グラフ2
・設定ダイアログ(3)
  位置設定
  日付設定
  時刻設定
・データ一覧画面(1)
  7週分の日出日入等の数値表
・メニュー
  &Location, &Date, &Time, &Help, &Quit
  
  
●詳細内容
・グラフの種類
 グラフ1:太陽高度の時間変化+太陽方位の簡易表示
 グラフ2:太陽高度と方位の関係図
 (グラフ1)太陽高度の時間変化
  Sn46c02
 (グラフ2)太陽高度と方位の関係
  Sn46c01
 
・メイン画面のファンクションキー割当て
 F1  Help         'h'
 F2  再描画       '/'
 F3  Cities       '\'
 F4  夏時間       Del
 F5  現時刻       space
 F6  グラフ       right, left
 F7  一覧表       up,down
 F8   位置        'l'
 F9   時刻        't'
 F10  日付        'd'
 
 
・データ一覧画面のファンクションキー割当て
 F2  再描画        '/'
 F3  Cities        '\'
 F10 Cancel        ESC
(データ一覧画面)                           ※方位表示の不具合修正
 Sr46cerr
  
 
・登録できる都市数:10
 都市選択は,メイン画面と一覧表画面で数字キーにより行う.
 
・ヘルプ表示(F1キー)
・都市名一覧表示(F3キー)
 メイン画面への単なる上書表示で,簡易的なもの.
 消去するときは,F2で再描画
 (ヘルプ画面)表示中もすべての操作が有効
 Sn46c05
 (都市名表示)表示中もすべての操作が有効
 Sn46c03 
 
・データキャッシュによる高速化
 浮動小数点演算の負荷が大きく,計算に時間がかかるため,
 表示の遅延を回避する目的で以下のデータに実施する.
  日出日入一覧表用計算データ(50日分)
  グラフ用計算データ(10日分)
 
・設定ファイル
#(設定順序)
#   東経,北緯,時差,地名
#(設定項目)
#   東経:実数または整数  -180°<= lo <= 180°(20バイト以内)
#   北緯:実数または整数   -90°<= la <= 90°(20バイト以内)
#   時差:整数で指定  -12 <= h <= +12  (日本JST=UTC+9)
#         夏時間を考慮しない場合の時差を設定する.
#   地名:8 バイト以内.それ以上は無視される.
#(規則)
#   ・各項目は半角コンマ [,] で区切る.
#   ・各項目の間には,半角スペースを挿入して整形できる.
#   ・最大で10地点を設定できる.
#   ・11個目以降の設定は無視される.
#   ・#で始まる行は,コメント行
#   
139.7414, 35.6581,  +9, 東京
136.9167, 35.1667,  +9, 名古屋
135.0000, 35.0000,   9, 明石
127.6667, 26.2167,  +9, 那覇
141.3500, 43.0667,  +9, 札幌
-0.12806, 51.50778,  0, London
-73.54,   40.46,    -5, NewYork
 
・エラー表示
 設定ファイルエラーの表示(位置情報が全く取得できない場合)
 Sn46c06
 
[HP200LX/LXDIC]

|

2014年9月 7日 (日)

Sunrise Ver 3.8c

■Sunrise Ver 3.8c
開発メモ
 
追加
・緯度経度の制限を外す(全地域をカバー)
 東経: -180°~ +180°, 北緯: -90°~ +90°
・日出・日入時刻が存在しない場合が発生する.(高緯度の場合)
・日出日入で計算エラーが出ても,計算を中断せず高度と方位を計算
 1日中昼の場合は,日出00:00,日入24:00,昼長24:00 と表示
 1日中夜の場合は,日出--:--,日入--:--,昼長 0:00 と表示
・グラフ枠を3ドット下へ拡大
 高度0度の線が見えるようにする.
・グラフの現在時刻(又は指定時刻)の位置に縦線を入れる.
 
 
浮動小数点使用の影響(Borland C++ 3.1)
・三角関数を自由に使えるので,自在に計算できる.
・数学ライブラリをリンクするため,プログラムサイズが大きい.
・関数計算処理の負担が大きく,グラフ表示と一覧表示が遅くなる.
 
 
今後の課題
・場所選択方式の変更
 各都市を常時ファンクションキーに割当てると他の多くの機能の割当てができない.
 必要な時に選択可能な場所を表示し,選択する方式にする必要がある.
・計算速度の改善
 浮動小数点ではなく,整数による計算が可能かどうか検討する.
 計算が高速化すれば,純粋に表示に起因する部分の速度向上も必要になる.
 
 
実行例
高緯度の場合(北緯85度)
Sn38c1  
 
北極(北緯90度)
Sn38c6  
 
南半球(北緯 -35度)
Sn38c5  
 
[HP200LX/LXDIC]

|

2014年9月 5日 (金)

Sunrise Ver 3.7

■Sunrise Ver 3.7
 
変更点
・夏時間のON/OFFをできるようにする.
 ON :時差を+1時間にする.
 OFF:時差はそのまま.
・夏時間は一時的な設定で,保存されない.
・設定ファイルでの時差の設定は,夏時間を考慮しない.
 139.7414, 35.6581,  +9, 東京
 135.0000, 35.0000,  +9, 明石
 -0.12806, 51.50778,  0, London
 -73.54,   40.46,    -5, NewYork
・簡単なヘルプ表示機能を追加
 ヘルプファイル使用
 
表示例
通常の場合 時差-5時間
Snsmt01  
 
夏時間表示(UTC-4が反転表示)時差-4時間 [DELキーでON/OFF]
Snsmt02
 
ヘルプ表示(キー割当ては確定していない)
Snhelp
 
[HP200LX/LXDIC]

|

2014年9月 2日 (火)

太陽高度方位計算プログラム

■太陽高度方位計算プログラム
 Sunrise Ver 3.5
 
追加メモ 
・時差の設定を可能にする.
・夏時間への対応は,時差の設定により,手動で行う.
・設定ファイルの例
#   東経,北緯,時差,地名
139.7414, 35.6581,  +9, 東京
136.9167, 35.1667,  +9, 名古屋
135.0000, 35.0000,  +9, 明石
127.6667, 26.2167,  +9, 那覇
141.3500, 43.0667,  +9, 札幌
-0.12806, 51.50778, +1, London
-73.54,   40.46,    -4, NewYork
 
表示例
Sn_lndn2
 
Sn_tky
 
Sn_ny4
 
[HP200LX/LXDIC]

|

2014年8月31日 (日)

太陽高度方位計算プログラム

■太陽高度方位計算プログラム
 Sunrise Ver 3.2b
 
追加メモ 
・任意の緯度経度,日付,時刻の設定を可能にする.
・緯度経度を浮動少数点表示に変更
・テスト版では緯度経度の制限を小さくしている.日出日入が存在しない場合は,
 計算エラーがでる.(0除算,acos定義域エラー等)
・エラー処理により,計算を中断しハングアップを防ぐ.
 計算可能な場所&日付に切替えれば回復可能.
 
 
(表示例)
日付の設定画面 8/31 ==> 6/20 (最上部左側の1行が入力域)
Sun32b1
 
時刻設定画面 18:40 ==> 12:40
Sun32b2
 
経度緯度設定画面 139.7333==>135.0, 35.65==>25.502   
Sun32b3 
 
1項目の設定ごとに情報更新
Sun32b4
 
テスト版では経度に制限はない(ロンドンの計算値)
Sn32b24
 
●計算結果の比較
 
高精度計算サイト"keisan"
日の出日の入り(世界地名選択)
http://keisan.casio.jp/exec/system/1253955558
 
ロンドン -0.12806  51.50778(夏時間)海抜0m
--------------------------------------------------------------------------
西暦    日出   方位角  南中   高度   日入  方位角  時差
2014/08/31 06:11:12 74.9136 13:00:51 47.0532 19:49:25 284.7493 1
 
sunrise 3.2b の計算結果
日本時間  14:12   75   21:01   47   03:50   285
JST-8    6:12   75   13:01   47   19:50   285
 
概ね良好な結果
・時刻の誤差1~2分
・角度の誤差1度以内
  
(参考)
・タイムゾーンの名称:BST  イギリス夏時間
・協定世界時との時差:UTC+1
・日本時間との時差:JST-8
 
[HP200LX/LXDIC]

|

2014年8月27日 (水)

太陽高度計算プログラムの開発

■太陽高度計算プログラムの開発
 名称:Sunrize
 
●現在の状況 Sunrize Ver 2.7
・浮動小数点を用いた三角関数による計算
 誤差:日出日入:1~2分程度
    方位,高度:1度以内
・表示項目
  場所(緯度,経度)        
  日付
  日出時刻,日出方位
  南中時刻,南中高度
  日入時刻,日入方位
  太陽高度,太陽方位(現在時刻の値)
  グラフ表示(高度の時間変化,高度・方位関係)
  一覧表の表示
 
●実行画面例
 Sunr41
 
 Sunr42
 
 Sunr43
 
 
●特異な例(秋分点近傍の赤道上の値)
 太陽は,真東-真上-真西と動き,高度と時刻の関係はほぼ線型になる
 Sun031
  
 太陽の方位は,南中時刻の前後1時間で,ほぼ180度変化する
 Sun032
 
 赤道上では 8/27現在,太陽は北方向にある.(南中でなく北中)
 北(0度)を中心にグラフ上反時計回りに動く.西(280)<=北(0)<=東(90)
 Sun0add
 
 ※いずれも妥当な計算結果になっている.
 
[HP200LX/LXDIC]

|

2014年8月20日 (水)

memo::太陽高度と方位の計算

■太陽高度と方位の計算
予備的なテストでは,以下の近似式で必要な精度が得られた.
  時刻の誤差:1分程度
  角度の誤差:1度以内
 
●近似計算式
 定数および変数
  ω = 2π/365
  J = 元日からの通算日数 + 0.5(元日J=0)
  Ts:時刻(日本標準時)
  θ:東経
  φ:北緯
 
・補正用定数:D [単位:度] ==> [rad]
  R:地平大気差[35′= 0.583°]
  Rs:太陽の視半径[16′= 0.266°]
   D = R + Rs  [51′= 0.850°]
   D *= π/180  [度==>rad]
  
・太陽赤緯:δ[単位:度] ==> [rad]
  δ = 0.33281 - 22.984cos(ωJ) - 0.34990cos(2ωJ) - 0.13980cos(3ωJ)
         + 3.7872sin(ωJ) + 0.03250sin(2ωJ) + 0.07187sin(3ωJ)
  δ*= π/180 [度==>rad]
  
・均時差:e [単位:時間] ==> [rad]
  e = 0.0072cos(ωJ) - 0.0528cos(2ωJ) - 0.0012cos(3ωJ)
    - 0.1229sin(ωJ) - 0.1565sin(2ωJ) - 0.0041 sin(3ωJ)
  e *= π/180 [度==>rad]
 
・時角:t [単位:度] ==> [rad]
  t = 15( Ts + (θ - 135)/15 + e ) - 180
  t *= π/180 [度==>rad]
・高度:h [rad]
  sin(h) = sin(φ)sin(δ) + cos(φ)cos(δ)cos(t)
   h = asin(sin(φ)sin(δ) + cos(φ)cos(δ)cos(t))
  
・方位角:A [rad](北 = 0)
  sinA = cos(δ)sin(t)/cos(h)
  cosA = (sin(h)sin(φ) - sin(δ))/(cos(h)cos(φ))
  A = atan2(sinA, cosA) + π [rad]
  
・日出時刻:t1 [単位:時]
・日入時刻:t2 [単位:時]
・南中時刻:tm [単位:時]
 太陽の視半径分の補正および大気差による補正あり
  t = acos( -(sin(D)+sin(φ)sin(δ)) / (cos(φ)cos(δ)) ) [rad]
  t *= 180/π [rad ==>度]
  t1 = (-t + 180)/15 -(θ-135)/15 - e  [h]
  t2 = ( t + 180)/15 -(θ-135)/15 - e  [h]
  tm = (t1 + t2)/2  [h]
  
・日出方位:h1 [rad] = 時刻t1 における方位角
・日入方位:h2 [rad] = 時刻t2 における方位角
・南中高度:hm [rad] = 時刻tm における高度
  
[HP200LX/LXDIC]

|

2014年8月18日 (月)

日出・日入時刻/南中高度の表示

■日出・日入時刻/南中高度の表示
オリジナル版:『日の出、日の入り時刻計算 Tropic.exm Ver1.01』
の改良を試みる.
 
●改良試作版:tropic Ver2.2(非公開)
 
(改良点)
・誤差を小さくする.
  時刻:1分程度
  角度:1度以内
・南中高度[単位:度]の表示を追加
・一覧表示でスクロールを可能にする.
  上下矢印キー:1週(1行)分スクロール
  左右矢印キー:4週(4行)分スクロール
  SHIFT+上下 :1日分の増減
 
(今後の予定)
・独立のプログラムとして開発
・計算方式を変更
・日出・日入の方位を追加
・任意の時刻の太陽高度と方位と追加
 
 最終表示予定項目
 (メイン画面:システム日付における値)
  場所(緯度,経度)
  現在時刻
  太陽高度,太陽方位(現在時刻における値)
  日出時刻,日出方位
  南中時刻,南中高度
  日入時刻,日入方位
  指定時刻
  太陽高度,太陽方位(指定時刻における値)
 
 (子画面1:7週分一覧表示:スクロールで1年分表示)
  日出時刻,日出方位,南中時刻,南中高度,日入時刻,日入方位
 
 (子画面2:時間変化:一覧表示またはグラフ表示)
  太陽高度,太陽方位(各時刻の一覧,または,グラフ)
 
●試作版表示例
Tropic1   
  
Tropic2
 
Tropic3   
[HP200LX/LXDIC]

|

2014年8月 6日 (水)

LXDIC Ver 16.0c の不具合

■LXDIC Ver 16.0c の不具合
 
・不具合
 LXDICを起動したままで他のアプリケーションへのタスク切替を行うと,タイミングに
 よっては,LXDICに戻るまでの間,ライトスリープが無効状態になることがある.
 (オートパワーオフも動作しない)
 
・原因
 タスク切替の際は,ライトスリープ制御を行っていなかったため,LXDICから切替わる
 時のライトスリープ状態がそのまま維持された.
 (LXDICは状況に応じて,ライトスリープの有効化/無効化を行っている)
 
・修正 Ver 16.0d
 タスク切替時のライトスリープ制御を追加する.
 
(修正前のライトスリープ状態の変化)
   LXDIC  ===>  他のタスク
   有効  ===>   有効
   無効  ===>   無効
(修正版のライトスリープ状態の変化)
   LXDIC  ===>  他のタスク
   有効  ===>   有効
   無効  ===>   有効
 
※修正版 Ver 16.0d
 http://hp200lx.cocolog-nifty.com/blog/download.html
[HP200LX/LXDIC]

|

«SKEY