Five Prayer Time

five-prayer-times

this application show current time & five prayer time for muslim specific for my current city (Bandung, latitude:6.54 & longitude: 107.36), with polar clock as visualization.

to compute prayer time, i use algorithm that described in this site http://tanzil.info/praytime/doc/calculation/.

source code:

import javafx.scene.shape.*;
import javafx.animation.*;
import java.util.*;
import javafx.scene.shape.*;
import javafx.scene.paint.Color;
import javafx.util.Math;

import javafx.scene.CustomNode;

import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

import javafx.date.DateTime;
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;

import java.text.SimpleDateFormat;
/**
 * @author Muhammad Hakim A
 */

var hours;
var minutes;
var seconds;
var date;
var day;
var month;
var year;
var cal;
var time = Timeline {
    repeatCount: Timeline.INDEFINITE
    keyFrames: [
        KeyFrame {
            time: 100ms
            action:function(){
                    cal = createCalendar();
                    seconds = (cal.get(Calendar.SECOND) + (cal.get(Calendar.MILLISECOND) as Float)/1000)/60;
                    minutes = (cal.get(Calendar.MINUTE) + seconds)/60;
                    hours = (cal.get(Calendar.HOUR) + minutes)/12;
                   }
        }
    ]
}

var sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
var today:String = "{sdf.format(Calendar.getInstance().getTime())}";
function createCalendar() {
    var date = new Date();
    def calendar = Calendar.getInstance();
    calendar.setTime(new Date());

    calendar
}

// class polarclock
class PolarClock extends CustomNode{
        public var cX=10;
        public var cY=10;
        public var strokeWidth = 5;
        public var radius=50;
        public var secLength= 180;
        public var minLength= 90;
        public var hourLength= 30;
        public var text = "";

        override function create(){
            return Group{
                    opacity: 0.85
                    content:[
                            Arc {// second
                                centerX: cX, centerY: cY
                                radiusX: radius, radiusY: radius
                                startAngle: 90, length:bind -secLength+strokeWidth*360.0/(4*Math.PI*radius)
                                stroke: Color.GREEN
                                fill: null
                                strokeWidth: strokeWidth
                            }
                            Arc {// minute
                                centerX: cX, centerY: cY
                                radiusX: radius-17, radiusY: radius -17
                                startAngle: 90, length:bind -minLength+strokeWidth*360.0/(4*Math.PI*radius)
                                stroke: Color.RED
                                fill: null
                                strokeWidth: strokeWidth
                            }
                            Arc {// hour
                                centerX: cX, centerY: cY
                                radiusX: radius-34, radiusY: radius-34
                                startAngle: 90, length:bind -hourLength+strokeWidth*360.0/(4*Math.PI*radius)
                                stroke: Color.BLUE
                                fill: null
                                strokeWidth: strokeWidth
                            }
                            Label {
                                    translateY : cY+radius + 10
                                    translateX : cX - radius/2;
                                    text: text
                                    textFill: Color.GOLD
                            }
                    ];
            };
        }
}

// prayer time calculator
def JD1970 = 2440587.5;
def d2r = Math.PI/180;
def r2d = 57.2957795;
var dt:DateTime = DateTime{};
var jd = JD1970 + Math.floor((dt.instant + 0.5)/(1000 * 60 * 60* 24));
var D = jd - 2451545.0;  // jd is the given Julian date

var g = 357.529 + 0.98560028* D;
var q = 280.459 + 0.98564736* D;
var L = q + 1.915* sin(g) + 0.020*sin(2*g);

var R = 1.00014 - 0.01671*cos(g) - (1.4e-4)*cos(2*g);
var e = 23.439 - (3.6e-7)* D;
var RA = atan2(cos(e)*sin(L),cos(L))/15;

var d = asin(sin(e)*sin(L));  // declination of the Sun
var EqT = q/15 - RA;  // equation of time

// Bandung info
def TZ = 7;
def lat = 6.54;
def lng = 107.36;

var dzuhr = fixhour(12 + TZ - lng/15 - EqT);
var fajr = dzuhr - T(18);
var fajrh = [to12h(Math.floor(fajr)),to60((fajr - Math.floor(fajr))*60)];
var isya = dzuhr + T(17);
var ashr = dzuhr + 1.0/15*acos((sin(acotan(1.0+tan(lat-d)))
                    -(sin(lat)*sin(d)))/(cos(lat)*cos(d)));
var maghrib = dzuhr + T(0.8333);

function T(a:Double) {
return (1.0/15)*acos(-sin(a)-sin(lat)*sin(d)/cos(lat)*cos(d)) }
function fixhour(a:Float)
{
    var b = a - 24.0 * (Math.floor(a / 24.0));
    if (b < 0) b= b + 24.0;
    return b;
}

function to12h (h:Integer) { if (h>12) h-12 else h }
function to60(m:Integer) { if(m>60) m-60 else m }
function sin (a:Double) { Math.sin(a*d2r)}
function cos (a:Double) { Math.cos(a*d2r)}
function tan (a:Double) { Math.tan(a*d2r)}
function acotan (a:Double){ Math.atan(1.0/a)*r2d }
function acos(a:Double) { Math.acos(a)*r2d}
function asin(a:Double) { Math.asin(a)*r2d}
function atan(a:Double) { Math.atan(a)*r2d}
function atan2 (y:Double,x:Double) { Math.atan2(y, x)*r2d }

public function run () {
    time.play();
    println("{today}");
    var scene:Scene = Scene {
        width: 500
        height: 500
        fill: Color.BLACK
        content: [
               ImageView {
                        image: Image {
                                url: "{__DIR__}Masjid.png"
                        }
                }

               PolarClock{
                    radius:120
                    cX: 150
                    cY: 160
                    strokeWidth:15
                    secLength:bind 360*seconds
                    minLength: bind 360*minutes
                    hourLength:bind 360*hours
                    text: bind "today: {today}"
                  }
                  //fajr
                 PolarClock{ 
                    radius:50
                    cX: 340
                    cY: 60
                    strokeWidth:11
                    secLength: 360
                    minLength: fajrh[1]*6
                    hourLength: fajrh[0]*30
                    text: "Fajr: {fajrh[0]}:{fajrh[1]} am"
                  }
                  //dzuhr
                 PolarClock{ 
                    radius:50
                    cX: 340
                    cY: 200
                    strokeWidth:11
                    secLength: 360
                    minLength: to60((dzuhr - Math.floor(dzuhr))*60)*6
                    hourLength: to12h(Math.floor(dzuhr))*30
                    text: "Dzuhr"
                  }
                  //ashr
                 PolarClock{ 
                    radius:70
                    cX: 340
                    cY: 360
                    strokeWidth:11
                    secLength: 300
                    minLength: to60((ashr - Math.floor(ashr))*60)*6
                    hourLength: to12h(Math.floor(ashr))*30
                    text: "Ashr"
                  }
                  //maghrb
                 PolarClock{ 
                    radius:50
                    cX: 190
                    cY: 400
                    strokeWidth:11
                    secLength: 350
                    minLength: to60((maghrib - Math.floor(maghrib))*60)*6
                    hourLength: to12h(Math.floor(maghrib))*30
                    text: "Maghrib"
                  }
                  //isya
                 PolarClock{ 
                    radius:50
                    cX: 70
                    cY: 400
                    strokeWidth:11
                    secLength: 360
                    minLength: to60((isya - Math.floor(isya))*60)*6
                    hourLength: to12h(Math.floor(isya))*30
                    text: "Isya"
                  }]
        }

    def stage:Stage = Stage {
        title: "Five Prayer Time"
        scene: scene
    }
    stage.visible = true;
}
About these ads

12 thoughts on “Five Prayer Time

  1. Ping-balik: Five Prayer Times « JFXStudio: sketch, hack, share

  2. I found your weblog site on google and test a couple of of your early posts. Proceed to keep up the superb operate. I just extra up your RSS feed to my MSN Information Reader. Searching for forward to studying more from you in a while!…

  3. I just could not go away your website prior to suggesting that I extremely loved the usual information an individual provide for your guests? Is going to be again ceaselessly to investigate cross-check new posts

  4. Hi there this is kinda of off topic but I was wanting to know if blogs
    use WYSIWYG editors or if you have to manually code with HTML.
    I’m starting a blog soon but have no coding expertise so I wanted to get advice from someone with experience. Any help would be greatly appreciated!

  5. Prayer timing is yet another app from Deenwise with an easy to use interface, displaying daily prayer times (Fajr, Zuhr, Asr, Magrib, Isha) according the location. This modern freeware app Prayer timing can help Muslims perform daily prayers anywhere in the world in time.
    For Prayer times, Hanafi and Shafi methods are available in this app. You can also select a Prayer time convention accordingly. It runs in the background, automatically displaying reminders at the appropriate times each day. You can also activate/deactivate the notifications in order to be informed when it is time, so that you won’t miss any prayer.
    DownloadPrayer Timings

Berikan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Logout / Ubah )

Twitter picture

You are commenting using your Twitter account. Logout / Ubah )

Facebook photo

You are commenting using your Facebook account. Logout / Ubah )

Google+ photo

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s