AppleWatch和時計 日の出と日の入を計算

今日はここまで作ってみた

日の出と日の入はどう計算する?

  • 「日の出 JavaScript」でググってみた。k-ichikawaさんありがとございます。参考にさせていただきます

k-ichikawa.blog.enjoy.jp

  • safariで「ページのソースを標示」して
  • 関連JavaScriptを捜索しました

    • 引き数jdは、1月1日からの通算日数
    • tstaは日の出時間
    • tendは日の入時間
  • Swiftに書き換える

    • 引き数は2つで月と日にする
    • 戻り値は2つで「日の出」と「日の入」にする
    func calcB( m: Int, d1: Int) -> (Double, Double) {
        let del:Double
        let phi:Double

  中略

        t = acos(-tan(del)*tan(phi))*180/Double.pi
        //日の出
        T = (-t + 180)/15;
        tsta = T - (lon - 135)/15.0 - ee
        //日の暮れ
        T = (t + 180)/15
        tend = T - (lon - 135)/15.0 - ee
        return (tsta, tend)
      }

実装

  • Viewに記載
    • 月と日を取得
    • calcB(m: month , d1: day)で日の出と日の入を取得
    • 内周文字盤に「o」を表示
struct ContentView: View {
中略
   var body: some** View {
    ZStack {
        ここに記載
        //月日を取得
        let calendar = Calendar(identifier: .gregorian)
        let date = Date()
        let month : Int = Int(calendar.component(.month, from: date))
        let day: Int = Int(calendar.component(.day, from: date) )
        //日の出、日の入時刻を求める
        let re = calcB(m: month , d1: day)
        edo_mojiban(angle: .degrees(dosu(v: re.0)), jikan: "o")
        edo_mojiban(angle: .degrees(dosu(v: re.1)), jikan: "o")
  • 内周インデックス作成
    • 前回は、外周にアラビア インデックスで24時間標示を作成しました。
    • 今回は、内周に日の出と日の入を「o」で表示します
   func edo_mojiban(angle: Angle, jikan : String ) -> some View{
        edo_mojiban_sen(width: 4, height: 60)
            .fill(Color(red: 0.7, green: 0.8, blue: 0.9))
            .frame(width: 12, height: 40)
            .offset(x: 6, y: 20)
            .overlay(
                 Text(jikan)
                    .rotationEffect(  .degrees(0) - angle - .degrees(6) )
                     .font(.system(size: 20))
                     .foregroundColor(.red)
                     .offset(x: -0, y: -46)
                 )
            .rotationEffect(angle + .degrees( 1.2))
    }
    func edo_mojiban_sen(width: CGFloat, height: CGFloat) -> some Shape {
        Path { path in
            path.move(to: CGPoint(x: 0, y: -height*0.9))
            path.addLine(to: CGPoint(x: -width/2, y: -height*0.9))
            path.addLine(to: CGPoint(x: -2, y: -height))
            path.addLine(to: CGPoint(x: 2, y: -height))
            path.addLine(to: CGPoint(x: width/2, y: -height*0.9))
            path.closeSubpath()
        }
    }

この後は(つづく)

  • 今回は、内周に日の出と日の入を「o」で表示しました
  • 次回は、内周にアラビア インデックスで和時計を表示します

  • そろそろ、AppleWatchのViewを調べなくては進まない

  • Swiftも学習しないと進めないのでAmazonでクリックしました。感想は別途報告するね

`