+
+ GL::Color best_color;
+ float best_d_sq = 0;
+ for(unsigned i=0; i<10; ++i)
+ {
+ GL::Color color;
+ unsigned h = rand()%3;
+ color.r = (h==0 ? 0.0 : rand()*1.0/RAND_MAX);
+ color.g = (h==1 ? 0.0 : rand()*1.0/RAND_MAX);
+ color.b = (h==2 ? 0.0 : rand()*1.0/RAND_MAX);
+ color = color*(1/max(max(color.r, color.g), color.b));
+ float min_d_sq = 3;
+ for(map<Train *, GL::Color>::const_iterator j=train_colors.begin(); j!=train_colors.end(); ++j)
+ {
+ float dr = color.r-j->second.r;
+ float dg = color.g-j->second.g;
+ float db = color.b-j->second.b;
+ float d_sq = dr*dr+dg*dg+db*db;
+ if(d_sq<min_d_sq)
+ min_d_sq = d_sq;
+ }
+ if(min_d_sq>best_d_sq)
+ {
+ best_color = color;
+ best_d_sq = min_d_sq;
+ }
+ }
+ train_colors[&train] = best_color;
+
+ Allocation3D *alloc = new Allocation3D(layout_3d, train);
+ alloc->set_color(best_color);