annotate lisp/calendar/lunar.el @ 22363:d00f146c3e9d

#include sys/file.h (sys_access): Provide our own implementation which recognizes D_OK. (is_exec): New function. (stat): Use it. (init_environment): Set TMPDIR to an existing directory. Abort if none of the usual places is available. (sys_rename): On Windows 95, choose a temp name that includes the original file's base name and use an explicit loop rather than calling mktemp. Only attempt to unlink the newname if the rename fails, rather than second-guessing whether the old and new names refer to the same file.
author Karl Heuer <kwzh@gnu.org>
date Fri, 05 Jun 1998 16:08:32 +0000
parents d179de7ad92e
children 7a94f1c588c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 ;;; lunar.el --- calendar functions for phases of the moon.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 14272
diff changeset
3 ;; Copyright (C) 1992, 1993, 1995, 1997 Free Software Foundation, Inc.
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
2247
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 957
diff changeset
6 ;; Keywords: calendar
2c7997f249eb Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 957
diff changeset
7 ;; Human-Keywords: moon, lunar phases, calendar, diary
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
14 ;; any later version.
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
19 ;; GNU General Public License for more details.
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
20
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 6334
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13044
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13044
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13044
diff changeset
24 ;; Boston, MA 02111-1307, USA.
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 ;;; Commentary:
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 ;; This collection of functions implements lunar phases for calendar.el and
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;; diary.el.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 ;; Based on ``Astronomical Formulae for Calculators,'' 3rd ed., by Jean Meeus,
13044
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
32 ;; Willmann-Bell, Inc., 1985 and ``Astronomical Algorithms'' by Jean Meeus,
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
33 ;; Willmann-Bell, Inc., 1991.
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 ;;
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;; WARNING: The calculations will be accurate only to within a few minutes.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 ;; The author would be delighted to have an astronomically more sophisticated
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 ;; person rewrite the code for the lunar calculations in this file!
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 14272
diff changeset
40 ;; Technical details of all the calendrical calculations can be found in
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 14272
diff changeset
41 ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 14272
diff changeset
42 ;; Cambridge University Press (1997).
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 14272
diff changeset
43
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 ;; Comments, corrections, and improvements should be sent to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 ;; Edward M. Reingold Department of Computer Science
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;; (217) 333-6733 University of Illinois at Urbana-Champaign
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;; reingold@cs.uiuc.edu 1304 West Springfield Avenue
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 ;; Urbana, Illinois 61801
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 ;;; Code:
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 (if (fboundp 'atan)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 (require 'lisp-float-type)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 (error "Lunar calculations impossible since floating point is unavailable."))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 (require 'solar)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 (defun lunar-phase-list (month year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 "List of lunar phases for three months starting with Gregorian MONTH, YEAR."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 (let ((end-month month)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 (end-year year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 (start-month month)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 (start-year year))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 (increment-calendar-month end-month end-year 3)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 (increment-calendar-month start-month start-year -1)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 (let* ((end-date (list (list end-month 1 end-year)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 (start-date (list (list start-month
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 (calendar-last-day-of-month
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 start-month start-year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 start-year)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 (index (* 4
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 (truncate
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (* 12.3685
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 (+ year
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 ( / (calendar-day-number (list month 1 year))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 366.0)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 -1900)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 (new-moon (lunar-phase index))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 (list))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 (while (calendar-date-compare new-moon end-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 (if (calendar-date-compare start-date new-moon)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 (setq list (append list (list new-moon))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 (setq index (1+ index))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 (setq new-moon (lunar-phase index)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85 list)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 (defun lunar-phase (index)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 "Local date and time of lunar phase INDEX.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 Integer below INDEX/4 gives the lunation number, counting from Jan 1, 1900;
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 remainder mod 4 gives the phase: 0 new moon, 1 first quarter, 2 full moon,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 3 last quarter."
7760
4edcac57a8f2 (calendar-mod): Remove; it was equivalent to `mod'. All callers changed.
Paul Eggert <eggert@twinsun.com>
parents: 6736
diff changeset
92 (let* ((phase (mod index 4))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 (index (/ index 4.0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 (time (/ index 1236.85))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 (date (+ (calendar-absolute-from-gregorian '(1 0.5 1900))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 0.75933
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 (* 29.53058868 index)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 (* 0.0001178 time time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 (* -0.000000155 time time time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 (* 0.00033
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 (solar-sin-degrees (+ 166.56
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 (* 132.87 time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 (* -0.009173 time time))))))
4520
362a75ca07d9 solar-mod -> mod
Paul Eggert <eggert@twinsun.com>
parents: 3871
diff changeset
104 (sun-anomaly (mod
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 (+ 359.2242
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 (* 29.105356 index)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 (* -0.0000333 time time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 (* -0.00000347 time time time))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 360.0))
4520
362a75ca07d9 solar-mod -> mod
Paul Eggert <eggert@twinsun.com>
parents: 3871
diff changeset
110 (moon-anomaly (mod
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 (+ 306.0253
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 (* 385.81691806 index)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 (* 0.0107306 time time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 (* 0.00001236 time time time))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 360.0))
4520
362a75ca07d9 solar-mod -> mod
Paul Eggert <eggert@twinsun.com>
parents: 3871
diff changeset
116 (moon-lat (mod
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 (+ 21.2964
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 (* 390.67050646 index)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 (* -0.0016528 time time)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (* -0.00000239 time time time))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 360.0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (adjustment
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (if (memq phase '(0 2))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (+ (* (- 0.1734 (* 0.000393 time))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 (solar-sin-degrees sun-anomaly))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (* 0.0021 (solar-sin-degrees (* 2 sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (* -0.4068 (solar-sin-degrees moon-anomaly))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 (* 0.0161 (solar-sin-degrees (* 2 moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (* -0.0004 (solar-sin-degrees (* 3 moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (* 0.0104 (solar-sin-degrees (* 2 moon-lat)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 (* -0.0051 (solar-sin-degrees (+ sun-anomaly moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (* -0.0074 (solar-sin-degrees (- sun-anomaly moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (* 0.0004 (solar-sin-degrees (+ (* 2 moon-lat) sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 (* -0.0004 (solar-sin-degrees (- (* 2 moon-lat) sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (* -0.0006 (solar-sin-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 (+ (* 2 moon-lat) moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (* 0.0010 (solar-sin-degrees (- (* 2 moon-lat) moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 (* 0.0005 (solar-sin-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 (+ (* 2 moon-anomaly) sun-anomaly))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 (+ (* (- 0.1721 (* 0.0004 time))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 (solar-sin-degrees sun-anomaly))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 (* 0.0021 (solar-sin-degrees (* 2 sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 (* -0.6280 (solar-sin-degrees moon-anomaly))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 (* 0.0089 (solar-sin-degrees (* 2 moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 (* -0.0004 (solar-sin-degrees (* 3 moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 (* 0.0079 (solar-sin-degrees (* 2 moon-lat)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 (* -0.0119 (solar-sin-degrees (+ sun-anomaly moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 (* -0.0047 (solar-sin-degrees (- sun-anomaly moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 (* 0.0003 (solar-sin-degrees (+ (* 2 moon-lat) sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 (* -0.0004 (solar-sin-degrees (- (* 2 moon-lat) sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 (* -0.0006 (solar-sin-degrees (+ (* 2 moon-lat) moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 (* 0.0021 (solar-sin-degrees (- (* 2 moon-lat) moon-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 (* 0.0003 (solar-sin-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 (+ (* 2 moon-anomaly) sun-anomaly)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 (* 0.0004 (solar-sin-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 (- sun-anomaly (* 2 moon-anomaly))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 (* -0.0003 (solar-sin-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 (+ (* 2 sun-anomaly) moon-anomaly))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 (adj (+ 0.0028
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 (* -0.0004 (solar-cosine-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 sun-anomaly))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 (* 0.0003 (solar-cosine-degrees
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 moon-anomaly))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 (adjustment (cond ((= phase 1) (+ adjustment adj))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 ((= phase 2) (- adjustment adj))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 (t adjustment)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 (date (+ date adjustment))
5213
e080f780f381 (lunar-phase): Add calendar-time-zone to solar ephemeris correction.
Paul Eggert <eggert@twinsun.com>
parents: 4520
diff changeset
168 (date (+ date (/ (- calendar-time-zone
e080f780f381 (lunar-phase): Add calendar-time-zone to solar ephemeris correction.
Paul Eggert <eggert@twinsun.com>
parents: 4520
diff changeset
169 (solar-ephemeris-correction
3871
a9f9a058567f * lunar.el (lunar-phase): Use time conversion from solar.el
Jim Blandy <jimb@redhat.com>
parents: 2247
diff changeset
170 (extract-calendar-year
a9f9a058567f * lunar.el (lunar-phase): Use time conversion from solar.el
Jim Blandy <jimb@redhat.com>
parents: 2247
diff changeset
171 (calendar-gregorian-from-absolute
5213
e080f780f381 (lunar-phase): Add calendar-time-zone to solar ephemeris correction.
Paul Eggert <eggert@twinsun.com>
parents: 4520
diff changeset
172 (truncate date)))))
e080f780f381 (lunar-phase): Add calendar-time-zone to solar ephemeris correction.
Paul Eggert <eggert@twinsun.com>
parents: 4520
diff changeset
173 60.0 24.0)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 (time (* 24 (- date (truncate date))))
7777
c48a233494e1 (lunar-phase): Revised to use the rewritten and new fcns.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7760
diff changeset
175 (date (calendar-gregorian-from-absolute (truncate date)))
13044
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
176 (adj (dst-adjust-time date time)))
7777
c48a233494e1 (lunar-phase): Revised to use the rewritten and new fcns.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7760
diff changeset
177 (list (car adj) (apply 'solar-time-string (cdr adj)) phase)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 (defun lunar-phase-name (phase)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 "Name of lunar PHASE.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 0 = new moon, 1 = first quarter, 2 = full moon, 3 = last quarter."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 (cond ((= 0 phase) "New Moon")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 ((= 1 phase) "First Quarter Moon")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 ((= 2 phase) "Full Moon")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 ((= 3 phase) "Last Quarter Moon")))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 (defun calendar-phases-of-moon ()
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 "Create a buffer with the lunar phases for the current calendar window."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 (interactive)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 (message "Computing phases of the moon...")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 (let ((m1 displayed-month)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 (y1 displayed-year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 (m2 displayed-month)
9713
d62e29b1d7a2 Give lunar phases buffer a symbolic name; use new form of calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7777
diff changeset
194 (y2 displayed-year))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 (increment-calendar-month m1 y1 -1)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 (increment-calendar-month m2 y2 1)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 (set-buffer (get-buffer-create lunar-phases-buffer))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 (setq buffer-read-only nil)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 (calendar-set-mode-line
5697
47563495ca14 (calendar-phases-of-moon): Fix mode line.
Richard M. Stallman <rms@gnu.org>
parents: 5213
diff changeset
200 (if (= y1 y2)
47563495ca14 (calendar-phases-of-moon): Fix mode line.
Richard M. Stallman <rms@gnu.org>
parents: 5213
diff changeset
201 (format "Phases of the Moon from %s to %s, %d%%-"
47563495ca14 (calendar-phases-of-moon): Fix mode line.
Richard M. Stallman <rms@gnu.org>
parents: 5213
diff changeset
202 (calendar-month-name m1) (calendar-month-name m2) y2)
47563495ca14 (calendar-phases-of-moon): Fix mode line.
Richard M. Stallman <rms@gnu.org>
parents: 5213
diff changeset
203 (format "Phases of the Moon from %s, %d to %s, %d%%-"
47563495ca14 (calendar-phases-of-moon): Fix mode line.
Richard M. Stallman <rms@gnu.org>
parents: 5213
diff changeset
204 (calendar-month-name m1) y1 (calendar-month-name m2) y2)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (erase-buffer)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (insert
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 (mapconcat
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 '(lambda (x)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (let ((date (car x))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (time (car (cdr x)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 (phase (car (cdr (cdr x)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 (concat (calendar-date-string date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 ": "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 (lunar-phase-name phase)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 " "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 time)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 (lunar-phase-list m1 y1) "\n"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 (goto-char (point-min))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (set-buffer-modified-p nil)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 (setq buffer-read-only t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 (display-buffer lunar-phases-buffer)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (message "Computing phases of the moon...done")))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 (defun phases-of-moon (&optional arg)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 "Display the quarters of the moon for last month, this month, and next month.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 If called with an optional prefix argument, prompts for month and year.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 This function is suitable for execution in a .emacs file."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 (interactive "P")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (save-excursion
9748
45559582aa9d Fix use of noday option for calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9713
diff changeset
232 (let* ((date (if arg
9713
d62e29b1d7a2 Give lunar phases buffer a symbolic name; use new form of calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7777
diff changeset
233 (calendar-read-date t)
d62e29b1d7a2 Give lunar phases buffer a symbolic name; use new form of calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7777
diff changeset
234 (calendar-current-date)))
d62e29b1d7a2 Give lunar phases buffer a symbolic name; use new form of calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7777
diff changeset
235 (displayed-month (extract-calendar-month date))
d62e29b1d7a2 Give lunar phases buffer a symbolic name; use new form of calendar-read-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7777
diff changeset
236 (displayed-year (extract-calendar-year date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (calendar-phases-of-moon))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (defun diary-phases-of-moon ()
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 "Moon phases diary entry."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 (let* ((index (* 4
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (truncate
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 (* 12.3685
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (+ (extract-calendar-year date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 ( / (calendar-day-number date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 366.0)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247 -1900)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (phase (lunar-phase index)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 (while (calendar-date-compare phase (list date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 (setq index (1+ index))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 (setq phase (lunar-phase index)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 (if (calendar-date-equal (car phase) date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 (concat (lunar-phase-name (car (cdr (cdr phase)))) " "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (car (cdr phase))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255
13044
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
256
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
257 ;; For the Chinese calendar the calculations for the new moon need to be more
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
258 ;; accurate than those above, so we use more terms in the approximation.
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
259
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
260 (defun lunar-new-moon-time (k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
261 "Astronomical (Julian) day number of K th new moon."
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
262 (let* ((T (/ k 1236.85))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
263 (T2 (* T T))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
264 (T3 (* T T T))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
265 (T4 (* T2 T2))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
266 (JDE (+ 2451550.09765
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
267 (* 29.530588853 k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
268 (* 0.0001337 T2)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
269 (* -0.000000150 T3)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
270 (* 0.00000000073 T4)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
271 (E (- 1 (* 0.002516 T) (* 0.0000074 T2)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
272 (sun-anomaly (+ 2.5534
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
273 (* 29.10535669 k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
274 (* -0.0000218 T2)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
275 (* -0.00000011 T3)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
276 (moon-anomaly (+ 201.5643
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
277 (* 385.81693528 k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
278 (* 0.0107438 T2)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
279 (* 0.00001239 T3)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
280 (* -0.000000058 T4)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
281 (moon-argument (+ 160.7108
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
282 (* 390.67050274 k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
283 (* -0.0016341 T2)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
284 (* -0.00000227 T3)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
285 (* 0.000000011 T4)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
286 (omega (+ 124.7746
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
287 (* -1.56375580 k)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
288 (* 0.0020691 T2)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
289 (* 0.00000215 T3)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
290 (A1 (+ 299.77 (* 0.107408 k) (* -0.009173 T2)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
291 (A2 (+ 251.88 (* 0.016321 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
292 (A3 (+ 251.83 (* 26.641886 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
293 (A4 (+ 349.42 (* 36.412478 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
294 (A5 (+ 84.66 (* 18.206239 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
295 (A6 (+ 141.74 (* 53.303771 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
296 (A7 (+ 207.14 (* 2.453732 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
297 (A8 (+ 154.84 (* 7.306860 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
298 (A9 (+ 34.52 (* 27.261239 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
299 (A10 (+ 207.19 (* 0.121824 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
300 (A11 (+ 291.34 (* 1.844379 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
301 (A12 (+ 161.72 (* 24.198154 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
302 (A13 (+ 239.56 (* 25.513099 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
303 (A14 (+ 331.55 (* 3.592518 k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
304 (correction
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
305 (+ (* -0.40720 (solar-sin-degrees moon-anomaly))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
306 (* 0.17241 E (solar-sin-degrees sun-anomaly))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
307 (* 0.01608 (solar-sin-degrees (* 2 moon-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
308 (* 0.01039 (solar-sin-degrees (* 2 moon-argument)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
309 (* 0.00739 E (solar-sin-degrees (- moon-anomaly sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
310 (* -0.00514 E (solar-sin-degrees (+ moon-anomaly sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
311 (* 0.00208 E E (solar-sin-degrees (* 2 sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
312 (* -0.00111 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
313 (- moon-anomaly (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
314 (* -0.00057 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
315 (+ moon-anomaly (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
316 (* 0.00056 E (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
317 (+ (* 2 moon-anomaly) sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
318 (* -0.00042 (solar-sin-degrees (* 3 moon-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
319 (* 0.00042 E (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
320 (+ sun-anomaly (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
321 (* 0.00038 E (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
322 (- sun-anomaly (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
323 (* -0.00024 E (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
324 (- (* 2 moon-anomaly) sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
325 (* -0.00017 (solar-sin-degrees omega))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
326 (* -0.00007 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
327 (+ moon-anomaly (* 2 sun-anomaly))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
328 (* 0.00004 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
329 (- (* 2 moon-anomaly) (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
330 (* 0.00004 (solar-sin-degrees (* 3 sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
331 (* 0.00003 (solar-sin-degrees (+ moon-anomaly sun-anomaly
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
332 (* -2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
333 (* 0.00003 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
334 (+ (* 2 moon-anomaly) (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
335 (* -0.00003 (solar-sin-degrees (+ moon-anomaly sun-anomaly
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
336 (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
337 (* 0.00003 (solar-sin-degrees (- moon-anomaly sun-anomaly
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
338 (* -2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
339 (* -0.00002 (solar-sin-degrees (- moon-anomaly sun-anomaly
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
340 (* 2 moon-argument))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
341 (* -0.00002 (solar-sin-degrees
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
342 (+ (* 3 moon-anomaly) sun-anomaly)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
343 (* 0.00002 (solar-sin-degrees (* 4 moon-anomaly)))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
344 (additional
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
345 (+ (* 0.000325 (solar-sin-degrees A1))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
346 (* 0.000165 (solar-sin-degrees A2))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
347 (* 0.000164 (solar-sin-degrees A3))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
348 (* 0.000126 (solar-sin-degrees A4))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
349 (* 0.000110 (solar-sin-degrees A5))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
350 (* 0.000062 (solar-sin-degrees A6))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
351 (* 0.000060 (solar-sin-degrees A7))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
352 (* 0.000056 (solar-sin-degrees A8))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
353 (* 0.000047 (solar-sin-degrees A9))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
354 (* 0.000042 (solar-sin-degrees A10))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
355 (* 0.000040 (solar-sin-degrees A11))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
356 (* 0.000037 (solar-sin-degrees A12))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
357 (* 0.000035 (solar-sin-degrees A13))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
358 (* 0.000023 (solar-sin-degrees A14))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
359 (newJDE (+ JDE correction additional)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
360 (+ newJDE
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
361 (- (solar-ephemeris-correction
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
362 (extract-calendar-year
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
363 (calendar-gregorian-from-absolute
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
364 (floor (calendar-absolute-from-astro newJDE))))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
365 (/ calendar-time-zone 60.0 24.0))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
366
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
367 (defun lunar-new-moon-on-or-after (d)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
368 "Astronomical (Julian) day number of first new moon on or after astronomical
14272
557c46145b1e (lunar-new-moon-on-or-after): Doc fix.
Erik Naggum <erik@naggum.no>
parents: 14169
diff changeset
369 \(Julian) day number d. The fractional part is the time of day.
13044
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
370
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
371 The date and time are local time, including any daylight savings rules,
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
372 as governed by the values of calendar-daylight-savings-starts,
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
373 calendar-daylight-savings-starts-time, calendar-daylight-savings-ends,
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
374 calendar-daylight-savings-ends-time, calendar-daylight-time-offset, and
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
375 calendar-time-zone."
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
376 (let* ((date (calendar-gregorian-from-absolute
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
377 (floor (calendar-absolute-from-astro d))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
378 (year (+ (extract-calendar-year date)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
379 (/ (calendar-day-number date) 365.25)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
380 (k (floor (* (- year 2000.0) 12.3685)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
381 (date (lunar-new-moon-time k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
382 (while (< date d)
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
383 (setq k (1+ k))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
384 (setq date (lunar-new-moon-time k)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
385 (let* ((a-date (calendar-absolute-from-astro date))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
386 (time (* 24 (- a-date (truncate a-date))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
387 (date (calendar-gregorian-from-absolute (truncate a-date)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
388 (adj (dst-adjust-time date time)))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
389 (calendar-astro-from-absolute
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
390 (+ (calendar-absolute-from-gregorian (car adj))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
391 (/ (car (cdr adj)) 24.0))))))
9155a9ab5de9 Added code to support Chinese calendar.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 9748
diff changeset
392
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 (provide 'lunar)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 ;;; lunar.el ends here