void PrimitiveMeshHelper::PointCube(float width, float height, float depth) { SR_ASSERT(width > 0 && height > 0 && depth > 0); width = width/2; height = height/2; depth = depth/2; vec3 v0(-width, height, -depth); vec3 v1(width, height, -depth); vec3 v2(-width, height, depth); vec3 v3(width, height, depth); vec3 v4(-width, -height, -depth); vec3 v5(width, -height, -depth); vec3 v6(-width, -height, depth); vec3 v7(width, -height, depth); vector<vec3> pos_list(8); pos_list[0] = v0; pos_list[1] = v1; pos_list[2] = v2; pos_list[3] = v3; pos_list[4] = v4; pos_list[5] = v5; pos_list[6] = v6; pos_list[7] = v7; DrawCmdData<Vertex> cmd; cmd.draw_mode = kDrawPoints; for(size_t i = 0 ; i < pos_list.size() ; ++i) { Vertex vert; vert.set_pos(pos_list[i]); cmd.vertex_list.push_back(vert); } this->cmd_list_->push_back(cmd); }
void StarFinder::fitStellarSizes( Function2D *f, int order, double sig_clip, const std::vector<PotentialStar*>& star_list, double *out_sigma) { // Make list of positions std::vector<Position> pos_list(star_list.size()); std::transform(star_list.begin(),star_list.end(),pos_list.begin(), std::mem_fun(&PotentialStar::getPos)); // Make list of sizes std::vector<double> sizelist(star_list.size()); std::transform(star_list.begin(),star_list.end(),sizelist.begin(), std::mem_fun(&PotentialStar::getSize)); // Use all stars in list (to start with anyway), so all true std::vector<bool> use_list(star_list.size(),true); if (int(star_list.size()) <= (order+1)*(order+2)/2) { std::ostringstream err; err<<"Not enough stars to do fit. "; err<<"Increase stars_per_bin or decrease fit_order."; throw StarFinderException(err.str()); } // Do the fit. double chisq; int dof; xdbg<<"before outlier fit\n"; f->outlierFit(order,sig_clip,pos_list,sizelist,&use_list,0,&chisq,&dof,0); xdbg<<"after outlier fit\n"; xdbg<<"chisq,dof,sigma = "<<chisq<<','<<dof<<','<< sqrt(chisq/dof)<<std::endl; *out_sigma = sqrt(chisq/dof); }
std::vector<DrawCmdData<Vertex_1P>> WireCubeFactory::CreateSimpleMesh() { float width = width_ / 2.0f; float height = height_ / 2.0f; float depth = depth_ / 2.0f; Vec3 v0(-width, height, -depth); Vec3 v1(width, height, -depth); Vec3 v2(-width, height, depth); Vec3 v3(width, height, depth); Vec3 v4(-width, -height, -depth); Vec3 v5(width, -height, -depth); Vec3 v6(-width, -height, depth); Vec3 v7(width, -height, depth); std::vector<Vec3> pos_list(8); pos_list[0] = v0; pos_list[1] = v1; pos_list[2] = v2; pos_list[3] = v3; pos_list[4] = v4; pos_list[5] = v5; pos_list[6] = v6; pos_list[7] = v7; DrawCmdData<Vertex_1P> cmd; cmd.draw_mode = kDrawLines; for(size_t i = 0 ; i < pos_list.size() ; ++i) { Vertex_1P vert; vert.p = pos_list[i]; cmd.vertex_list.push_back(vert); } //GL_LINES용 index list std::array<unsigned short, 24> index_list = { 0,1, 1,3, 2,3, 0,2, 4,5, 5,7, 6,7, 4,6, 0,4, 1,5, 2,6, 3,7 }; cmd.index_list.resize(index_list.size()); copy(index_list.begin(), index_list.end(), cmd.index_list.begin()); std::vector<DrawCmdData<Vertex_1P>> cmd_list; cmd_list.push_back(cmd); return cmd_list; }
void PrimitiveMeshHelper::WireCube(float width, float height, float depth) { SR_ASSERT(width > 0 && height > 0 && depth > 0); width = width/2; height = height/2; depth = depth/2; vec3 v0(-width, height, -depth); vec3 v1(width, height, -depth); vec3 v2(-width, height, depth); vec3 v3(width, height, depth); vec3 v4(-width, -height, -depth); vec3 v5(width, -height, -depth); vec3 v6(-width, -height, depth); vec3 v7(width, -height, depth); vector<vec3> pos_list(8); pos_list[0] = v0; pos_list[1] = v1; pos_list[2] = v2; pos_list[3] = v3; pos_list[4] = v4; pos_list[5] = v5; pos_list[6] = v6; pos_list[7] = v7; DrawCmdData<Vertex> cmd; cmd.draw_mode = kDrawLines; for(size_t i = 0 ; i < pos_list.size() ; ++i) { Vertex vert; vert.set_pos(pos_list[i]); cmd.vertex_list.push_back(vert); } //GL_LINES용 index list std::array<GLushort, 24> index_list = { 0,1, 1,3, 2,3, 0,2, 4,5, 5,7, 6,7, 4,6, 0,4, 1,5, 2,6, 3,7 }; cmd.index_list.resize(index_list.size()); copy(index_list.begin(), index_list.end(), cmd.index_list.begin()); this->cmd_list_->push_back(cmd); }