Added mirrorpoint calculation with several axes
This commit is contained in:
		@@ -75,6 +75,12 @@ typedef struct {
 | 
			
		||||
    gboolean major;
 | 
			
		||||
} aspectData_t;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    gchar *name;
 | 
			
		||||
    zodiacSign startSign;
 | 
			
		||||
    gboolean middleAxis;
 | 
			
		||||
} mirrorpointData_t;
 | 
			
		||||
 | 
			
		||||
const aspectData_t aspectData[] = {
 | 
			
		||||
    // Name            Size Orb  Harmonic Major
 | 
			
		||||
    { "Conjuction",    0,   0,   TRUE,    TRUE  },
 | 
			
		||||
@@ -90,6 +96,13 @@ const aspectData_t aspectData[] = {
 | 
			
		||||
    { "Bi-quintile",   144, 3,   TRUE,    FALSE }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const mirrorpointData_t mirrorpointData[] = {
 | 
			
		||||
    { "Aries/Libra",        SIGN_ARIES,  FALSE },
 | 
			
		||||
    { "mid Taurus/Scoripo", SIGN_TAURUS, TRUE  },
 | 
			
		||||
    { "Cancer/Capricorn",   SIGN_CANCER, FALSE },
 | 
			
		||||
    { "mid Leo/Aquarius",   SIGN_LEO,    TRUE  },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define ADD_SIGN(ht, v, s, e, t) (v) = g_new0(signData_t, 1); \
 | 
			
		||||
                                 (v)->signId = (s); \
 | 
			
		||||
                                 (v)->element = (e); \
 | 
			
		||||
@@ -211,6 +224,82 @@ check_aspects_outer_loop(gpointer data, gpointer user_data)
 | 
			
		||||
    checkData->currentOuterPlanetId++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
check_mirrorpoints_inner_loop(gpointer data, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    struct aspect_check_data *checkData = user_data;
 | 
			
		||||
    gint outerPlanetId = GPOINTER_TO_INT(g_list_nth_data(checkData->planetIdList, checkData->currentOuterPlanetId));
 | 
			
		||||
    gint innerPlanetId = GPOINTER_TO_INT(g_list_nth_data(checkData->planetIdList, checkData->currentInnerPlanetId));
 | 
			
		||||
    planetInfo_t *outerPlanet,
 | 
			
		||||
                 *innerPlanet;
 | 
			
		||||
    planetData_t *outerPlanetData,
 | 
			
		||||
                 *innerPlanetData;
 | 
			
		||||
    gdouble planetOrb,
 | 
			
		||||
            difference;
 | 
			
		||||
    gint i;
 | 
			
		||||
    const mirrorpointData_t *mirrorpoint = NULL;
 | 
			
		||||
 | 
			
		||||
    if (outerPlanetId == innerPlanetId) {
 | 
			
		||||
        checkData->currentInnerPlanetId++;
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    outerPlanet = g_hash_table_lookup(checkData->planetInfoTable, GINT_TO_POINTER(outerPlanetId));
 | 
			
		||||
    innerPlanet = g_hash_table_lookup(checkData->planetInfoTable, GINT_TO_POINTER(innerPlanetId));
 | 
			
		||||
 | 
			
		||||
    g_assert(outerPlanet != NULL);
 | 
			
		||||
    g_assert(innerPlanet != NULL);
 | 
			
		||||
 | 
			
		||||
    outerPlanetData = g_hash_table_lookup(checkData->planetDataTable, GINT_TO_POINTER(outerPlanetId));
 | 
			
		||||
    innerPlanetData = g_hash_table_lookup(checkData->planetDataTable, GINT_TO_POINTER(innerPlanetId));
 | 
			
		||||
 | 
			
		||||
    g_assert(outerPlanetData != NULL);
 | 
			
		||||
    g_assert(innerPlanetData != NULL);
 | 
			
		||||
 | 
			
		||||
    planetOrb = fmin(outerPlanetData->orb, innerPlanetData->orb);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < sizeof(mirrorpointData) / sizeof(mirrorpointData_t); i++) {
 | 
			
		||||
        gdouble mirrorPosition;
 | 
			
		||||
        gdouble startPoint = (mirrorpointData[i].startSign - 1) * 30;
 | 
			
		||||
 | 
			
		||||
        if (mirrorpointData[i].middleAxis == TRUE) {
 | 
			
		||||
            startPoint += 15.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        mirrorPosition = 2 * startPoint - outerPlanet->position;
 | 
			
		||||
 | 
			
		||||
        if (mirrorPosition < 0) {
 | 
			
		||||
            mirrorPosition += 360.0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ((difference = fabs(innerPlanet->position - mirrorPosition)) <= planetOrb) {
 | 
			
		||||
            mirrorpoint = &(mirrorpointData[i]);
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mirrorpoint != NULL) {
 | 
			
		||||
        printf("%s vs. %s: %s (±%f)\n", outerPlanetData->name, innerPlanetData->name, mirrorpoint->name, difference);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    checkData->currentInnerPlanetId++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
check_mirrorpoints_outer_loop(gpointer data, gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    struct aspect_check_data *checkData = user_data;
 | 
			
		||||
 | 
			
		||||
    checkData->currentInnerPlanetId = checkData->currentOuterPlanetId;
 | 
			
		||||
    printf("\n");
 | 
			
		||||
 | 
			
		||||
    g_list_foreach(g_list_nth(checkData->planetIdList, checkData->currentOuterPlanetId), check_mirrorpoints_inner_loop, user_data);
 | 
			
		||||
 | 
			
		||||
    checkData->currentOuterPlanetId++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
free_planet_data(gpointer data)
 | 
			
		||||
{
 | 
			
		||||
@@ -449,6 +538,12 @@ main(int argc, char *argv[])
 | 
			
		||||
    aspectCheckData.planetInfoTable = planetInfoTable;
 | 
			
		||||
    aspectCheckData.planetDataTable = planetDataTable;
 | 
			
		||||
    g_list_foreach(planetIdList, check_aspects_outer_loop, &aspectCheckData);
 | 
			
		||||
 | 
			
		||||
    aspectCheckData.planetIdList = planetIdList;
 | 
			
		||||
    aspectCheckData.currentOuterPlanetId = 0;
 | 
			
		||||
    aspectCheckData.planetInfoTable = planetInfoTable;
 | 
			
		||||
    aspectCheckData.planetDataTable = planetDataTable;
 | 
			
		||||
    g_list_foreach(planetIdList, check_mirrorpoints_outer_loop, &aspectCheckData);
 | 
			
		||||
    g_list_free(planetIdList);
 | 
			
		||||
 | 
			
		||||
    g_hash_table_unref(planetInfoTable);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user