Skip to content

Commit 2fdc3d3

Browse files
committed
Make code a bit more idiomatic
1 parent 49371e3 commit 2fdc3d3

File tree

2 files changed

+65
-64
lines changed

2 files changed

+65
-64
lines changed

src/main.rs

Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -39,60 +39,6 @@ fn load_database() -> Result<Vec<Star>, &'static str> {
3939
}
4040
}
4141

42-
43-
//translated from http://stackoverflow.com/a/22630970/389837
44-
fn bv2rgb(mut bv: f64) -> (f32, f32, f32) {
45-
let r: f64;
46-
let g: f64;
47-
let b: f64;
48-
let mut t: f64;
49-
if bv < -0.4 {
50-
bv = -0.4;
51-
}
52-
if bv > 2.0 {
53-
bv = 2.0;
54-
}
55-
if (bv >= -0.40) && (bv < 0.00) {
56-
t = (bv + 0.40) / (0.00 + 0.40);
57-
r = 0.61 + (0.11 * t) + (0.1 * t * t);
58-
} else if (bv >= 0.00) && (bv < 0.40) {
59-
t = (bv - 0.00) / (0.40 - 0.00);
60-
r = 0.83 + (0.17 * t);
61-
} else if (bv >= 0.40) && (bv < 2.10) {
62-
r = 1.00;
63-
} else {
64-
r = 1.0;
65-
}
66-
if (bv >= -0.40) && (bv < 0.00) {
67-
t = (bv + 0.40) / (0.00 + 0.40);
68-
g = 0.70 + (0.07 * t) + (0.1 * t * t);
69-
} else if (bv >= 0.00) && (bv < 0.40) {
70-
t = (bv - 0.00) / (0.40 - 0.00);
71-
g = 0.87 + (0.11 * t);
72-
} else if (bv >= 0.40) && (bv < 1.60) {
73-
t = (bv - 0.40) / (1.60 - 0.40);
74-
g = 0.98 - (0.16 * t);
75-
} else if (bv >= 1.60) && (bv < 2.00) {
76-
t = (bv - 1.60) / (2.00 - 1.60);
77-
g = 0.82 - (0.5 * t * t);
78-
} else {
79-
g = 1.0;
80-
}
81-
if (bv >= -0.40) && (bv < 0.40) {
82-
b = 1.00;
83-
} else if (bv >= 0.40) && (bv < 1.50) {
84-
t = (bv - 0.40) / (1.50 - 0.40);
85-
b = 1.00 - (0.47 * t) + (0.1 * t * t);
86-
} else if (bv >= 1.50) && (bv < 1.94) {
87-
t = (bv - 1.50) / (1.94 - 1.50);
88-
b = 0.63 - (0.6 * t * t);
89-
} else {
90-
b = 1.0;
91-
}
92-
93-
(r as f32, g as f32, b as f32)
94-
}
95-
9642
fn main() {
9743
let maxdist: f64;
9844
let stars: Vec<Star> = load_database().unwrap();
@@ -133,16 +79,10 @@ fn main() {
13379
if star.id == 0 {
13480
sph.set_color(1.0, 1.0, 0.7);
13581
} else {
136-
if let Some(bv) = star.color_index {
137-
let (r, g, b) = bv2rgb(bv);
138-
sph.set_color(r, g, b);
139-
} else {
140-
//use a green color to denote that the color isn't known, since green stars don't exist
141-
//sph.set_color(0.0, 1.0, 0.0);
142-
143-
//use a white color to look more natural, but still slightly unnatural.
144-
sph.set_color(1.0, 1.0, 1.0);
145-
}
82+
let (r, g, b) = star.bv2rgb_opt().or(Some((1.0, 1.0, 1.0))).unwrap();
83+
let mag = star.magnitude as f32;
84+
let lum = 2.512f32.powf(-mag);
85+
sph.set_color(r * lum, g * lum, b * lum);
14686
}
14787
sph.append_translation(&Vector3::new(star.x as f32, star.y as f32, star.z as f32));
14888
println!("{:.3} lightyears\n{:?}\n\n", star.distance * 3.26156, star);

src/sim_data.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,64 @@ pub struct Star {
4545
pub var_min: Option<f64>, // approximate minimum magnitude for variable star
4646
pub var_max: Option<f64>, // approximate maximum magnitude for variable star
4747
}
48+
49+
50+
impl Star {
51+
// translated from http://stackoverflow.com/a/22630970/389837
52+
pub fn bv2rgb_opt(&self) -> Option<(f32, f32, f32)> {
53+
self.color_index.map(|_| self.bv2rgb())
54+
}
55+
56+
pub fn bv2rgb(&self) -> (f32, f32, f32) {
57+
let mut bv = self.color_index.unwrap();
58+
let r: f64;
59+
let g: f64;
60+
let b: f64;
61+
let mut t: f64;
62+
if bv < -0.4 {
63+
bv = -0.4;
64+
}
65+
if bv > 2.0 {
66+
bv = 2.0;
67+
}
68+
if (bv >= -0.40) && (bv < 0.00) {
69+
t = (bv + 0.40) / (0.00 + 0.40);
70+
r = 0.61 + (0.11 * t) + (0.1 * t * t);
71+
} else if (bv >= 0.00) && (bv < 0.40) {
72+
t = (bv - 0.00) / (0.40 - 0.00);
73+
r = 0.83 + (0.17 * t);
74+
} else if (bv >= 0.40) && (bv < 2.10) {
75+
r = 1.00;
76+
} else {
77+
r = 1.0;
78+
}
79+
if (bv >= -0.40) && (bv < 0.00) {
80+
t = (bv + 0.40) / (0.00 + 0.40);
81+
g = 0.70 + (0.07 * t) + (0.1 * t * t);
82+
} else if (bv >= 0.00) && (bv < 0.40) {
83+
t = (bv - 0.00) / (0.40 - 0.00);
84+
g = 0.87 + (0.11 * t);
85+
} else if (bv >= 0.40) && (bv < 1.60) {
86+
t = (bv - 0.40) / (1.60 - 0.40);
87+
g = 0.98 - (0.16 * t);
88+
} else if (bv >= 1.60) && (bv < 2.00) {
89+
t = (bv - 1.60) / (2.00 - 1.60);
90+
g = 0.82 - (0.5 * t * t);
91+
} else {
92+
g = 1.0;
93+
}
94+
if (bv >= -0.40) && (bv < 0.40) {
95+
b = 1.00;
96+
} else if (bv >= 0.40) && (bv < 1.50) {
97+
t = (bv - 0.40) / (1.50 - 0.40);
98+
b = 1.00 - (0.47 * t) + (0.1 * t * t);
99+
} else if (bv >= 1.50) && (bv < 1.94) {
100+
t = (bv - 1.50) / (1.94 - 1.50);
101+
b = 0.63 - (0.6 * t * t);
102+
} else {
103+
b = 1.0;
104+
}
105+
106+
(r as f32, g as f32, b as f32)
107+
}
108+
}

0 commit comments

Comments
 (0)