SunDate.smali
.class public Lim/tpelyyftgw/messenger/time/SunDate;
.super Ljava/lang/Object;
.source "SunDate.java"
# static fields
.field private static final DEGRAD:D = 0.017453292519943295
.field private static final INV360:D = 0.002777777777777778
.field private static final RADEG:D = 57.29577951308232
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>()V
.registers 1
.line 8
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method private static GMST0(D)D
.registers 6
.param p0, "d" # D
.line 27
const-wide v0, 0x3fef8a6c50c753f8L # 0.985647352
mul-double v0, v0, p0
const-wide v2, 0x408997e631f8a090L # 818.9874
add-double/2addr v0, v2
invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D
move-result-wide v0
return-wide v0
.end method
.method private static acosd(D)D
.registers 6
.param p0, "x" # D
.line 43
invoke-static {p0, p1}, Ljava/lang/Math;->acos(D)D
move-result-wide v0
const-wide v2, 0x404ca5dc1a63c1f8L # 57.29577951308232
mul-double v0, v0, v2
return-wide v0
.end method
.method private static atan2d(DD)D
.registers 8
.param p0, "y" # D
.param p2, "x" # D
.line 47
invoke-static {p0, p1, p2, p3}, Ljava/lang/Math;->atan2(DD)D
move-result-wide v0
const-wide v2, 0x404ca5dc1a63c1f8L # 57.29577951308232
mul-double v0, v0, v2
return-wide v0
.end method
.method public static calculateSunriseSunset(DD)[I
.registers 16
.param p0, "lat" # D
.param p2, "lon" # D
.line 128
invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;
move-result-object v0
.line 129
.local v0, "calendar":Ljava/util/Calendar;
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v1
invoke-virtual {v0, v1, v2}, Ljava/util/Calendar;->setTimeInMillis(J)V
.line 130
const/4 v1, 0x2
new-array v10, v1, [D
.line 131
.local v10, "sun":[D
const/4 v11, 0x1
invoke-virtual {v0, v11}, Ljava/util/Calendar;->get(I)I
move-result v2
invoke-virtual {v0, v1}, Ljava/util/Calendar;->get(I)I
move-result v3
add-int/2addr v3, v11
const/4 v4, 0x5
invoke-virtual {v0, v4}, Ljava/util/Calendar;->get(I)I
move-result v4
move-wide v5, p2
move-wide v7, p0
move-object v9, v10
invoke-static/range {v2 .. v9}, Lim/tpelyyftgw/messenger/time/SunDate;->sunRiseSetForYear(IIIDD[D)I
.line 132
invoke-static {}, Ljava/util/TimeZone;->getDefault()Ljava/util/TimeZone;
move-result-object v2
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J
move-result-wide v3
invoke-virtual {v2, v3, v4}, Ljava/util/TimeZone;->getOffset(J)I
move-result v2
div-int/lit16 v2, v2, 0x3e8
div-int/lit8 v2, v2, 0x3c
.line 133
.local v2, "timeZoneOffset":I
const/4 v3, 0x0
aget-wide v4, v10, v3
const-wide/high16 v6, 0x404e000000000000L # 60.0
mul-double v4, v4, v6
double-to-int v4, v4
add-int/2addr v4, v2
.line 134
.local v4, "sunrise":I
aget-wide v8, v10, v11
mul-double v8, v8, v6
double-to-int v5, v8
add-int/2addr v5, v2
.line 135
.local v5, "sunset":I
const/16 v6, 0x5a0
if-gez v4, :cond_49
.line 136
add-int/lit16 v4, v4, 0x5a0
goto :goto_4d
.line 137
:cond_49
if-le v4, v6, :cond_4d
.line 138
add-int/lit16 v4, v4, -0x5a0
.line 140
:cond_4d
:goto_4d
if-gez v5, :cond_52
.line 141
add-int/lit16 v5, v5, 0x5a0
goto :goto_56
.line 142
:cond_52
if-le v5, v6, :cond_56
.line 143
add-int/lit16 v5, v5, 0x5a0
.line 145
:cond_56
:goto_56
new-array v1, v1, [I
aput v4, v1, v3
aput v5, v1, v11
return-object v1
.end method
.method private static cosd(D)D
.registers 4
.param p0, "x" # D
.line 35
const-wide v0, 0x3f91df46a2529d39L # 0.017453292519943295
mul-double v0, v0, p0
invoke-static {v0, v1}, Ljava/lang/Math;->cos(D)D
move-result-wide v0
return-wide v0
.end method
.method private static days_since_2000_Jan_0(III)J
.registers 7
.param p0, "y" # I
.param p1, "m" # I
.param p2, "d" # I
.line 15
int-to-long v0, p0
const-wide/16 v2, 0x16f
mul-long v0, v0, v2
add-int/lit8 v2, p1, 0x9
div-int/lit8 v2, v2, 0xc
add-int/2addr v2, p0
mul-int/lit8 v2, v2, 0x7
div-int/lit8 v2, v2, 0x4
int-to-long v2, v2
sub-long/2addr v0, v2
mul-int/lit16 v2, p1, 0x113
div-int/lit8 v2, v2, 0x9
int-to-long v2, v2
add-long/2addr v0, v2
int-to-long v2, p2
add-long/2addr v0, v2
const-wide/32 v2, 0xb25a2
sub-long/2addr v0, v2
return-wide v0
.end method
.method private static rev180(D)D
.registers 6
.param p0, "x" # D
.line 23
const-wide v0, 0x3f66c16c16c16c17L # 0.002777777777777778
mul-double v0, v0, p0
const-wide/high16 v2, 0x3fe0000000000000L # 0.5
add-double/2addr v0, v2
invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D
move-result-wide v0
const-wide v2, 0x4076800000000000L # 360.0
mul-double v0, v0, v2
sub-double v0, p0, v0
return-wide v0
.end method
.method private static revolution(D)D
.registers 6
.param p0, "x" # D
.line 19
const-wide v0, 0x3f66c16c16c16c17L # 0.002777777777777778
mul-double v0, v0, p0
invoke-static {v0, v1}, Ljava/lang/Math;->floor(D)D
move-result-wide v0
const-wide v2, 0x4076800000000000L # 360.0
mul-double v0, v0, v2
sub-double v0, p0, v0
return-wide v0
.end method
.method private static sind(D)D
.registers 4
.param p0, "x" # D
.line 31
const-wide v0, 0x3f91df46a2529d39L # 0.017453292519943295
mul-double v0, v0, p0
invoke-static {v0, v1}, Ljava/lang/Math;->sin(D)D
move-result-wide v0
return-wide v0
.end method
.method private static sunRiseSetForYear(IIIDD[D)I
.registers 19
.param p0, "year" # I
.param p1, "month" # I
.param p2, "day" # I
.param p3, "lon" # D
.param p5, "lat" # D
.param p7, "sun" # [D
.line 124
const-wide v7, -0x401d555555555555L # -0.5833333333333334
const/4 v9, 0x1
move v0, p0
move v1, p1
move v2, p2
move-wide v3, p3
move-wide/from16 v5, p5
move-object/from16 v10, p7
invoke-static/range {v0 .. v10}, Lim/tpelyyftgw/messenger/time/SunDate;->sunRiseSetHelperForYear(IIIDDDI[D)I
move-result v0
return v0
.end method
.method private static sunRiseSetHelperForYear(IIIDDDI[D)I
.registers 35
.param p0, "year" # I
.param p1, "month" # I
.param p2, "day" # I
.param p3, "lon" # D
.param p5, "lat" # D
.param p7, "altit" # D
.param p9, "upper_limb" # I
.param p10, "sun" # [D
.line 91
const/4 v0, 0x1
new-array v1, v0, [D
.line 92
.local v1, "sRA":[D
new-array v2, v0, [D
.line 93
.local v2, "sdec":[D
new-array v3, v0, [D
.line 96
.local v3, "sr":[D
const/4 v4, 0x0
.line 97
.local v4, "rc":I
invoke-static/range {p0 .. p2}, Lim/tpelyyftgw/messenger/time/SunDate;->days_since_2000_Jan_0(III)J
move-result-wide v5
long-to-double v5, v5
const-wide/high16 v7, 0x3fe0000000000000L # 0.5
invoke-static {v5, v6}, Ljava/lang/Double;->isNaN(D)Z
add-double/2addr v5, v7
const-wide v7, 0x4076800000000000L # 360.0
div-double v7, p3, v7
sub-double/2addr v5, v7
.line 98
.local v5, "d":D
invoke-static {v5, v6}, Lim/tpelyyftgw/messenger/time/SunDate;->GMST0(D)D
move-result-wide v7
const-wide v9, 0x4066800000000000L # 180.0
add-double/2addr v7, v9
add-double v7, v7, p3
invoke-static {v7, v8}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D
move-result-wide v7
.line 99
.local v7, "sidtime":D
invoke-static {v5, v6, v1, v2, v3}, Lim/tpelyyftgw/messenger/time/SunDate;->sun_RA_decAtDay(D[D[D[D)V
.line 100
const/4 v9, 0x0
aget-wide v10, v1, v9
sub-double v10, v7, v10
invoke-static {v10, v11}, Lim/tpelyyftgw/messenger/time/SunDate;->rev180(D)D
move-result-wide v10
const-wide/high16 v12, 0x402e000000000000L # 15.0
div-double/2addr v10, v12
const-wide/high16 v14, 0x4028000000000000L # 12.0
sub-double/2addr v14, v10
.line 101
.local v14, "tsouth":D
aget-wide v10, v3, v9
const-wide v16, 0x3fd10ff972474539L # 0.2666
div-double v16, v16, v10
.line 102
.local v16, "sradius":D
if-eqz p9, :cond_4b
.line 103
sub-double v10, p7, v16
.end local p7 # "altit":D
.local v10, "altit":D
goto :goto_4d
.line 102
.end local v10 # "altit":D
.restart local p7 # "altit":D
:cond_4b
move-wide/from16 v10, p7
.line 107
.end local p7 # "altit":D
.restart local v10 # "altit":D
:goto_4d
invoke-static {v10, v11}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v18
invoke-static/range {p5 .. p6}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v20
aget-wide v22, v2, v9
invoke-static/range {v22 .. v23}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v22
mul-double v20, v20, v22
sub-double v18, v18, v20
invoke-static/range {p5 .. p6}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v20
aget-wide v22, v2, v9
invoke-static/range {v22 .. v23}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v22
mul-double v20, v20, v22
div-double v18, v18, v20
.line 108
.local v18, "cost":D
const-wide/high16 v20, 0x3ff0000000000000L # 1.0
cmpl-double v22, v18, v20
if-ltz v22, :cond_77
.line 109
const/4 v4, -0x1
.line 110
const-wide/16 v12, 0x0
.local v12, "t":D
goto :goto_87
.line 111
.end local v12 # "t":D
:cond_77
const-wide/high16 v20, -0x4010000000000000L # -1.0
cmpg-double v22, v18, v20
if-gtz v22, :cond_81
.line 112
const/4 v4, 0x1
.line 113
const-wide/high16 v12, 0x4028000000000000L # 12.0
.restart local v12 # "t":D
goto :goto_87
.line 115
.end local v12 # "t":D
:cond_81
invoke-static/range {v18 .. v19}, Lim/tpelyyftgw/messenger/time/SunDate;->acosd(D)D
move-result-wide v20
div-double v12, v20, v12
.line 117
.restart local v12 # "t":D
:goto_87
sub-double v20, v14, v12
aput-wide v20, p10, v9
.line 118
add-double v20, v14, v12
aput-wide v20, p10, v0
.line 120
return v4
.end method
.method private static sun_RA_decAtDay(D[D[D[D)V
.registers 26
.param p0, "d" # D
.param p2, "RA" # [D
.param p3, "dec" # [D
.param p4, "r" # [D
.line 70
move-wide/from16 v0, p0
move-object/from16 v2, p4
const/4 v3, 0x1
new-array v3, v3, [D
.line 75
.local v3, "lon":[D
invoke-static {v0, v1, v3, v2}, Lim/tpelyyftgw/messenger/time/SunDate;->sunposAtDay(D[D[D)V
.line 77
const/4 v4, 0x0
aget-wide v5, v2, v4
aget-wide v7, v3, v4
invoke-static {v7, v8}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v7
mul-double v5, v5, v7
.line 78
.local v5, "xs":D
aget-wide v7, v2, v4
aget-wide v9, v3, v4
invoke-static {v9, v10}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v9
mul-double v7, v7, v9
.line 80
.local v7, "ys":D
const-wide v9, 0x3e97e92ff8cedadaL # 3.563E-7
mul-double v9, v9, v0
const-wide v11, 0x40377075f6fd21ffL # 23.4393
sub-double/2addr v11, v9
.line 82
.local v11, "obl_ecl":D
move-wide v9, v5
.line 83
.local v9, "xe":D
invoke-static {v11, v12}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v13
mul-double v13, v13, v7
.line 84
.local v13, "ye":D
invoke-static {v11, v12}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v15
move-wide/from16 v17, v5
.end local v5 # "xs":D
.local v17, "xs":D
mul-double v4, v7, v15
.line 86
.local v4, "ze":D
invoke-static {v13, v14, v9, v10}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D
move-result-wide v15
const/4 v6, 0x0
aput-wide v15, p2, v6
.line 87
mul-double v15, v9, v9
mul-double v19, v13, v13
add-double v15, v15, v19
invoke-static/range {v15 .. v16}, Ljava/lang/Math;->sqrt(D)D
move-result-wide v0
invoke-static {v4, v5, v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D
move-result-wide v0
aput-wide v0, p3, v6
.line 88
return-void
.end method
.method private static sunposAtDay(D[D[D)V
.registers 22
.param p0, "p" # D
.param p2, "ot" # [D
.param p3, "d" # [D
.line 53
const-wide v0, 0x3fef8a098da5f901L # 0.9856002585
mul-double v0, v0, p0
const-wide v2, 0x407640c083126e98L # 356.047
add-double/2addr v0, v2
invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->revolution(D)D
move-result-wide v0
.line 54
.local v0, "S":D
const-wide v2, 0x3f08b0c856bdc946L # 4.70935E-5
mul-double v2, v2, p0
const-wide v4, 0x4071af0be0ded289L # 282.9404
add-double/2addr v2, v4
.line 55
.local v2, "l":D
const-wide v4, 0x3e13c626caf35bd9L # 1.151E-9
mul-double v4, v4, p0
const-wide v6, 0x3f911c2a02320968L # 0.016709
sub-double/2addr v6, v4
.line 57
.local v6, "a":D
const-wide v4, 0x404ca5dc1a63c1f8L # 57.29577951308232
mul-double v4, v4, v6
invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v8
mul-double v4, v4, v8
invoke-static {v0, v1}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v8
mul-double v8, v8, v6
const-wide/high16 v10, 0x3ff0000000000000L # 1.0
add-double/2addr v8, v10
mul-double v4, v4, v8
add-double/2addr v4, v0
.line 58
.local v4, "V":D
invoke-static {v4, v5}, Lim/tpelyyftgw/messenger/time/SunDate;->cosd(D)D
move-result-wide v8
sub-double/2addr v8, v6
.line 60
.local v8, "k":D
mul-double v12, v6, v6
sub-double/2addr v10, v12
invoke-static {v10, v11}, Ljava/lang/Math;->sqrt(D)D
move-result-wide v10
invoke-static {v4, v5}, Lim/tpelyyftgw/messenger/time/SunDate;->sind(D)D
move-result-wide v12
mul-double v10, v10, v12
.line 61
.local v10, "i":D
mul-double v12, v8, v8
mul-double v14, v10, v10
add-double/2addr v12, v14
invoke-static {v12, v13}, Ljava/lang/Math;->sqrt(D)D
move-result-wide v12
const/4 v14, 0x0
aput-wide v12, p3, v14
.line 62
invoke-static {v10, v11, v8, v9}, Lim/tpelyyftgw/messenger/time/SunDate;->atan2d(DD)D
move-result-wide v10
.line 63
add-double v12, v10, v2
aput-wide v12, p2, v14
.line 64
aget-wide v12, p2, v14
const-wide v15, 0x4076800000000000L # 360.0
cmpl-double v17, v12, v15
if-ltz v17, :cond_7a
.line 65
aget-wide v12, p2, v14
sub-double/2addr v12, v15
aput-wide v12, p2, v14
.line 67
:cond_7a
return-void
.end method
.method private static tand(D)D
.registers 4
.param p0, "x" # D
.line 39
const-wide v0, 0x3f91df46a2529d39L # 0.017453292519943295
mul-double v0, v0, p0
invoke-static {v0, v1}, Ljava/lang/Math;->tan(D)D
move-result-wide v0
return-wide v0
.end method