@@ -39,60 +39,6 @@ fn load_database() -> Result<Vec<Star>, &'static str> {
39
39
}
40
40
}
41
41
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
-
96
42
fn main ( ) {
97
43
let maxdist: f64 ;
98
44
let stars: Vec < Star > = load_database ( ) . unwrap ( ) ;
@@ -133,16 +79,10 @@ fn main() {
133
79
if star. id == 0 {
134
80
sph. set_color ( 1.0 , 1.0 , 0.7 ) ;
135
81
} 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) ;
146
86
}
147
87
sph. append_translation ( & Vector3 :: new ( star. x as f32 , star. y as f32 , star. z as f32 ) ) ;
148
88
println ! ( "{:.3} lightyears\n {:?}\n \n " , star. distance * 3.26156 , star) ;
0 commit comments