/**
* Vargas.java
*
* Created on December 14, 2002, 3:13 PM
* @author E. Rajasekar
*/
package app.astrosoft.core;
import java.util.EnumMap;
import app.astrosoft.beans.HousePosition;
import app.astrosoft.consts.Planet;
import app.astrosoft.consts.Varga;
public class VargaCharts {
private EnumMap<Planet, Double> planetaryPosition;
private HousePosition housePosition;
private EnumMap<Varga,EnumMap<Planet,Integer>> divChart;
/** Creates a new instance of Vargas */
public VargaCharts( EnumMap<Planet, Double> pp, HousePosition hs ) {
planetaryPosition = pp;
housePosition = hs;
}
public EnumMap<Planet,Integer> genCharts( Varga varga ) {
EnumMap<Planet,Integer> pos = new EnumMap<Planet,Integer>(Planet.class);
for ( Planet p : Planet.planetsAsc() ) {
pos.put(p, findPosition( planetaryPosition.get(p), varga.division()));
}
return pos;
}
public int findPosition( double deg, int div ) {
int house = 0;
double rem = 0.0;
double pos = 0.0;
double part = ( double ) ( 30.00 / div );
int sign = 0;
switch ( div ) {
/*case 1: house = (int)(deg / 30)+1;
break;*/
case 0:
house = calcBhavaPosition( deg );
break;
case 1:
case 9:
pos = deg / part;
house = ( int ) ( pos % 12 ) + 1;
break;
case 2:
rem = ( int ) deg % 30;
house = ( int ) ( deg / 30 ) + 1;
sign = oddEven( house );
if ( ( rem < 15 ) && ( sign == 0 ) ) {
house = 4;
}
if ( ( rem < 15 ) && ( sign > 0 ) ) {
house = 5;
}
if ( ( rem >= 15 ) && ( sign == 0 ) ) {
house = 5;
}
if ( ( rem >= 15 ) && ( sign > 0 ) ) {
house = 4;
}
break;
case 3:
house = ( int ) ( deg / 30 );
rem = deg % 30;
if ( ( 0.0 <= rem ) && ( rem < 10.0 ) ) {
house = house + 1;
}
if ( ( 10.0 <= rem ) && ( rem < 20.0 ) ) {
house = house + 5;
}
if ( ( 20.0 <= rem ) && ( rem <= 30.0 ) ) {
house = house + 9;
}
house = house % 12;
break;
case 4:
house = ( int ) ( deg / 30 );
rem = deg % 30;
house = house + ( ( int ) ( rem / part ) * 3 );
house = ( house % 12 ) + 1;
break;
case 7:
case 10:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
if ( oddEven( house ) == 0 ) {
house = ( int ) ( house + pos ) + getInc( div );
} else {
house = ( int ) ( house + pos );
}
house = ( int ) ( house % 12 );
break;
case 20:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
int i = FMD( house );
if ( i == 9 ) {
i = 5;
} else if ( i == 5 ) {
i = 9;
}
house = ( int ) ( i + pos ) % 12;
break;
case 8:
case 16:
case 45:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
/*if(div ==8)
System.out.println("deg "+deg+" house "+house); */
house = ( int ) ( FMD( house ) + pos ) % 12;
/*if(div ==8)
System.out.println("pos "+pos+"house "+house); */
break;
case 24:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
if ( oddEven( house ) == 0 ) {
house = ( int ) pos + 4;
} else {
house = ( int ) pos + 5;
}
house = house % 12;
break;
case 27:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
house = ( int ) ( FEAW( house ) + pos ) % 12;
break;
case 30:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
if ( oddEven( house ) == 0 ) {
if ( pos < 5 ) {
house = 2;
} else if ( ( 5 <= pos ) && ( pos < 12 ) ) {
house = 6;
} else if ( ( 12 <= pos ) && ( pos < 20 ) ) {
house = 12;
} else if ( ( 20 <= pos ) && ( pos < 25 ) ) {
house = 10;
} else if ( ( 25 <= pos ) && ( pos < 30 ) ) {
house = 8;
}
} else {
if ( pos < 5 ) {
house = 1;
} else if ( ( 5 <= pos ) && ( pos < 10 ) ) {
house = 11;
} else if ( ( 10 <= pos ) && ( pos < 18 ) ) {
house = 9;
} else if ( ( 18 <= pos ) && ( pos < 25 ) ) {
house = 3;
} else if ( ( 25 <= pos ) && ( pos < 30 ) ) {
house = 7;
}
}
break;
case 40:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
if ( oddEven( house ) == 0 ) {
house = ( int ) pos + 7;
} else {
house = ( int ) pos + 1;
}
house = house % 12;
break;
case 60:
case 12:
house = ( int ) ( deg / 30 );
rem = deg % 30;
house = house + ( int ) ( rem / part );
house = ( house % 12 ) + 1;
break;
case 5:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part ) + 1;
if ( oddEven( house ) != 0 ) {
switch ( ( int ) pos ) {
case 1:
house = 1;
break;
case 2:
house = 11;
break;
case 3:
house = 9;
break;
case 4:
house = 3;
break;
case 5:
house = 7;
break;
}
} else {
switch ( ( int ) pos ) {
case 1:
house = 2;
break;
case 2:
house = 6;
break;
case 3:
house = 12;
break;
case 4:
house = 10;
break;
case 5:
house = 8;
break;
}
}
break;
case 6:
house = ( int ) ( deg / 30 ) + 1;
rem = deg % 30;
pos = ( int ) ( rem / part );
if ( oddEven( house ) == 0 ) {
house = ( int ) pos + 7;
} else {
house = ( int ) pos + 1;
}
house = house % 12;
break;
case 11:
rem = deg % 30;
pos = ( int ) ( rem / part );
house = ( int ) ( 12 - pos );
break;
}
if ( house == 0 ) {
house = 12;
}
return house;
}
public EnumMap<Varga,EnumMap<Planet,Integer>> getAllCharts( ) {
divChart = new EnumMap<Varga,EnumMap<Planet,Integer>>(Varga.class);
for ( Varga v : Varga.values() ) {
divChart.put(v, genCharts( v ));
}
return divChart;
}
public static int oddEven( int house ) {
return ( house % 2 );
}
//check for Fixed, Movable, Dual Houses
public static int FMD( int house ) {
int res = 0;
switch ( house ) {
case 1:
case 4:
case 7:
case 10:
res = 1;
break;
case 2:
case 5:
case 8:
case 11:
res = 5;
break;
case 3:
case 6:
case 9:
case 12:
res = 9;
break;
}
return res;
}
//check for Firery, Earthy, Airy, Watery Houses
private int FEAW( int house ) {
int res = 0;
switch ( house ) {
case 1:
case 5:
case 9:
res = 1;
break;
case 2:
case 6:
case 10:
res = 4;
break;
case 3:
case 7:
case 11:
res = 7;
break;
case 4:
case 8:
case 12:
res = 10;
break;
}
return res;
}
private int getInc( int div ) {
int inc = 0;
switch ( div ) {
case 10:
inc = 8;
break;
case 7:
inc = 6;
break;
}
return inc;
}
public int calcBhavaPosition( double deg ) {
return housePosition.locateHouse(deg).ordinal()+1;
}
@Override
public String toString() {
return toString(divChart);
}
public static String toString(EnumMap<Varga,EnumMap<Planet,Integer>> divChart) {
StringBuilder sb = new StringBuilder();
for(Varga v : Varga.values()){
sb.append(v + " -> ");
for (Planet p : Planet.planetsAsc()) {
sb.append(divChart.get(v).get(p) + " , ");
}
sb.append("\n");
}
return sb.toString();
}
public static void main(String[] args) {
Horoscope h = new Horoscope("Raja", 11, 12, 1980, 1, 44,
77 + (44.00 / 60.00), 11 + (22.00 / 60.00), 5.5, "Erode");
System.out.println(VargaCharts.toString(h.getDivChart()));
}
}