// file: $USFS/class/image_analysis/v1.0/imaga_fract_09.cc
//

// isip include files
//
#include "image_analysis.h"
#include <integral.h>

#include "image_analysis_constants.h"
#include <integral_constants.h>

// method fract_area_cc
//
// arguments: none
//
// return: a logical_1 value indicating status
//
// this method computes the area of the traingle given the three sides
//
logical_1 Image_analysis::fract_area_cc(float_4 side_red_a, float_4 side_red_b,
					float_4 side_red_c, float_4 side_grn_a,
					float_4 side_grn_b, float_4 side_grn_c,
					float_4 side_blu_a, float_4 side_blu_b,
					float_4 side_blu_c, int_4 n) {
  
  
  // declare local variables
  //
  float_4 ave_sum_red, ave_sum_grn, ave_sum_blu;
  float_4 sum_r, sum_g, sum_b;
  
  // compute the area of the traingle
  //
  ave_sum_red = (side_red_a + side_red_b + side_red_c) / 2;
  ave_sum_grn = (side_grn_a + side_grn_b + side_grn_c) / 2;
  ave_sum_blu = (side_blu_a + side_blu_b + side_blu_c) / 2;
  
  sum_r =  ave_sum_red * fabs(ave_sum_red - side_red_a) *
    fabs(ave_sum_red - side_red_b) * fabs(ave_sum_red - side_red_c);
  
  sum_g =  ave_sum_grn * fabs(ave_sum_grn - side_grn_a) *
    fabs(ave_sum_grn - side_grn_b) * fabs(ave_sum_grn - side_grn_c);
  
  sum_b =  ave_sum_blu * fabs(ave_sum_blu - side_blu_a) *
    fabs(ave_sum_blu - side_blu_b) * fabs(ave_sum_blu - side_blu_c);

  // check for zero condition and find the square root
  //
  if (sum_r >= 0) {
    if (n == IMAGA_FRACT_FDIST) {
      fract_t_fir_ared_d += sqrt(sum_r);
    }
    else {
      fract_t_sec_ared_d += sqrt(sum_r);
    }
  }
  
  if (sum_g >= 0) {
    if (n == IMAGA_FRACT_FDIST) {
      fract_t_fir_agrn_d += sqrt(sum_g);
    }
    else {
      fract_t_sec_agrn_d += sqrt(sum_g);
    }
  }
  
  if (sum_b >= 0) {
    if (n == IMAGA_FRACT_FDIST) {
      fract_t_fir_ablu_d += sqrt(sum_b);
    }
    else {
      fract_t_sec_ablu_d += sqrt(sum_b);
    }
  }
  
  // exit gracefully
  //
  return ISIP_TRUE;
}
  
