#[inline]
pub fn combined_mag(m1: f64, m2: f64) -> f64 {
m2 - 2.5 * (brightness_ratio(m1, m2) + 1.0)
}
pub fn combined_mag_of_many(m: &[f64]) -> f64 {
let mut sum = 0.0;
for i in m.iter() {
sum += 10_f64.powf(-0.4 * i);
}
-2.5 * sum.log10()
}
#[inline]
pub fn brightness_ratio(m1: f64, m2: f64) -> f64 {
10.0_f64.powf(0.4 * (m2 - m1))
}
#[inline]
pub fn mag_diff(br: f64) -> f64 {
2.5 * br.log10()
}
#[inline]
pub fn abs_mag_frm_parallax(par: f64, am: f64) -> f64 {
am + 5.0 + 5.0*(par.to_degrees() * 3600.0).log10()
}
#[inline]
pub fn abs_mag_frm_dist(d: f64, am: f64) -> f64 {
am + 5.0 - 5.0*d.log10()
}
#[inline]
pub fn angl_between_north_celes_and_eclip_pole (
eclip_long : f64,
eclip_lat : f64,
oblq_eclip : f64
) -> f64 {
(eclip_long.cos() * oblq_eclip.tan()).atan2 (
eclip_lat.sin() * eclip_long.sin() * oblq_eclip.tan()
- eclip_lat.cos()
)
}
pub fn eq_coords_frm_motion (
asc0 : f64,
dec0 : f64,
r : f64,
delta_r : f64,
proper_motion_asc : f64,
proper_motion_dec : f64, t: f64
) -> (f64, f64) {
let x = r * dec0.cos() * asc0.cos();
let y = r * dec0.cos() * asc0.sin();
let z = r * dec0.sin();
let delta_asc = 3600.0 * proper_motion_asc.to_degrees()/13751.0;
let delta_dec = 3600.0 * proper_motion_dec.to_degrees()/206265.0;
let delta_x = (x / r)*delta_r - z*delta_dec*asc0.cos() - y*delta_asc;
let delta_y = (y / r)*delta_r - z*delta_dec*asc0.sin() + x*delta_asc;
let delta_z = (z / r)*delta_r + r*delta_dec*dec0.cos();
let x1 = x + t*delta_x;
let y1 = y + t*delta_y;
let z1 = z + t*delta_z;
let asc = y1.atan2(x1);
let dec = z1.atan2((x1*x1 + y1*y1).sqrt());
(asc, dec)
}
pub fn proper_motion_in_eq_coords (
asc : f64,
dec : f64,
pmotion_asc : f64,
pmotion_dec : f64,
ecl_lat : f64,
oblq_eclip : f64
) -> (f64, f64) {
let ecl_lat_cos = ecl_lat.cos();
let pmotion_long = (
pmotion_dec * oblq_eclip.sin() * asc.cos()
+ pmotion_asc * dec.cos() * (
oblq_eclip.cos() * dec.cos()
+ oblq_eclip.sin() * dec.sin() * asc.sin()
)
) / (ecl_lat_cos * ecl_lat_cos);
let pmotion_lat = (
pmotion_dec * (
oblq_eclip.cos() * dec.cos()
+ oblq_eclip.sin() * dec.sin() * asc.sin()
)
- pmotion_asc * oblq_eclip.sin() * asc.cos() * dec.cos()
) / ecl_lat_cos;
(pmotion_long, pmotion_lat)
}