~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to lib/SunViewer/SunImage.js

  • Committer: Michael Lynch
  • Date: 2008-02-01 06:21:07 UTC
  • Revision ID: mike@mike-desktop-20080201062107-uhqip0rcpsfc91mq
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * @author Patrick Schmiedel patrick.schmiedel@gmx.net
 
3
 */
 
4
 
 
5
/**
 
6
 * @classDescription This class represents an image of the sun at a
 
7
 * specific date and its characteristics.
 
8
 */
 
9
var SunImage = new Class.create();
 
10
 
 
11
SunImage.prototype = {
 
12
// Default options
 
13
        defaultOptions: $H({
 
14
                dateStr: '',
 
15
                tileDir: null,
 
16
                tileSize: 256,
 
17
                spacecraft: 'SMEX',
 
18
                instrument: 'TRACE',
 
19
                wavelength: null,
 
20
                resolution: 0,
 
21
                maxZoomLevel: 5,
 
22
                // The radius of the sun relative to the complete image
 
23
                sunRadius: 0.233,
 
24
                zoomLevelOffset: 0
 
25
        }),
 
26
        
 
27
        /**
 
28
         * @constructor
 
29
         * @param {Hash} options        Available options: tileDir, tileSize, spacecraft, instrument, wavelength, resolution, maxZoomLevel, sunRadius, sunCenter, zoomLevelOffset, date
 
30
         */
 
31
        initialize: function(options) {
 
32
                this.sunCenter = { x: 0.5, y: 0.5 };
 
33
                this.date = new SunImgDate();
 
34
                
 
35
                Object.extend(this, this.defaultOptions);
 
36
                Object.extend(this, options);
 
37
        }
 
38
};
 
39
 
 
40
/**
 
41
 * @classDescription Represents a date an image of the sun has been taken on.
 
42
 */
 
43
SunImgDate = Class.create();
 
44
 
 
45
SunImgDate.prototype = {
 
46
        defaultOptions: $H({
 
47
                year: 0,
 
48
                month: 0,
 
49
                day: 0,
 
50
                hour: 0,
 
51
                min: 0,
 
52
                sec: 0
 
53
        }),
 
54
 
 
55
        /**
 
56
         * @constructor
 
57
         * @param {Hash} options        Available options: year, month, day, hour, min, sec
 
58
         */
 
59
        initialize: function(options) {
 
60
                Object.extend(this, this.defaultOptions);
 
61
                Object.extend(this, options);
 
62
        },
 
63
        
 
64
        /**
 
65
         * @method secsSinceMidnight    Returns the number of seconds since 0:00.
 
66
         * @return {Number}                             The number of seconds since 0:00.
 
67
         */
 
68
        secsSinceMidnight: function() {
 
69
                Debug.output("secssincemidnight si");
 
70
                return String.parseInt(this.hour) * 3600 + String.parseInt(this.min) * 60 + String.parseInt(this.sec);
 
71
        },
 
72
        
 
73
        /**
 
74
         * @method timeStr                              Returns the time of the image in a H:M:S format.
 
75
         * @return {String}                             The time as a string.
 
76
         */
 
77
        timeStr: function() {
 
78
                return this.hour + ':' + this.min + ':' + this.sec;
 
79
        },
 
80
        
 
81
        /**
 
82
         * TODO: Change name to be more correct (e.g. getAngle or so).
 
83
         * @method getObliquity                 Returns the angle of the earth towards the solar plane at this date.
 
84
         * @return {Number}                             The angle at this date.
 
85
         */
 
86
        getObliquity: function() {
 
87
                Debug.output("getob si");
 
88
                var OBLIQUITY_DEGREES = (7.25).toRad();
 
89
                var MILLISECONDS_PER_YEAR = 31536000000;
 
90
                // Day the earth is at 0 degree to the sun (June 7th). Let's forget about leap years and higher-than-24-hours-precision for now.
 
91
                var d0UnixTime = Date.UTC(this.year, 6, 7);
 
92
                var dUnixTime = Date.UTC(this.year, this.month, this.day);
 
93
                return OBLIQUITY_DEGREES * Math.sin( (dUnixTime - d0UnixTime) / MILLISECONDS_PER_YEAR * 2 * Math.PI );
 
94
        },
 
95
        
 
96
        /**
 
97
         * @method getRotationDeltaLongitude    Returns the longitudal delta to the 0:00 value of a location
 
98
         *                                                                              on the surface of the sun due to rotation, which depends on the
 
99
         *                                                                              latitude value.
 
100
         * @param {Number} latitude                             The latitude of the location on the sun.
 
101
         * @return {Number}                                             The longitudal delta.
 
102
         */
 
103
        getRotationDeltaLongitude: function(latitude) {
 
104
                Debug.output("getrotationdelta");
 
105
                return ((this.secsSinceMidnight() / 86400) * (14.44 - 3 * Math.pow(Math.sin(latitude), 2))).toRad();
 
106
        }
 
107
}