Point Board::getBomberman() const { PointList rslt; rslt.splice(rslt.end(), findAll(Element(LL("BOMBERMAN")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_BOMBERMAN")))); rslt.splice(rslt.end(), findAll(Element(LL("DEAD_BOMBERMAN")))); return rslt.front(); }
PointList Board::getOtherBombermans() const { PointList rslt; rslt.splice(rslt.end(), findAll(Element(LL("OTHER_BOMBERMAN")))); rslt.splice(rslt.end(), findAll(Element(LL("OTHER_BOMB_BOMBERMAN")))); rslt.splice(rslt.end(), findAll(Element(LL("OTHER_DEAD_BOMBERMAN")))); return rslt; }
PointList Board::getBarriers() const { PointList rslt = getMeatChoppers(); rslt.splice(rslt.end(), getWalls()); rslt.splice(rslt.end(), getBombs()); rslt.splice(rslt.end(), getDestoyWalls()); rslt.splice(rslt.end(), getOtherBombermans()); return removeDuplicates(rslt); }
void handleDual(Hyperbola_segment_2 hs, std::vector<PointList>& polylines) { PointList p; hs.generate_points(p); PointList points; points.insert(points.end(), p.begin(), p.end()); polylines.push_back(points); }
void handleDual(Hyperbola_ray_2 hr, Iso_rectangle_2 crect, std::vector<PointList>& polylines) { PointList p; hr.generate_points(p); PointList points; points.insert(points.end(), p.begin(), p.end()); polylines.push_back(points); }
/*! \brief Add linestring to a ring (private) \param[in,out] papoRing list of rings \param poLine pointer to linestring to be added to a ring \return TRUE on success \return FALSE on failure */ bool IVFKDataBlock::AppendLineToRing(PointListArray *papoRing, const OGRLineString *poLine, bool bNewRing) { OGRPoint *poFirst, *poLast; OGRPoint *poFirstNew, *poLastNew; OGRPoint pt; PointList poList; /* OGRLineString -> PointList */ for (int i = 0; i < poLine->getNumPoints(); i++) { poLine->getPoint(i, &pt); poList.push_back(pt); } /* create new ring */ if (bNewRing) { papoRing->push_back(new PointList(poList)); return TRUE; } poFirstNew = &(poList.front()); poLastNew = &(poList.back()); for (PointListArray::const_iterator i = papoRing->begin(), e = papoRing->end(); i != e; ++i) { PointList *ring = (*i); poFirst = &(ring->front()); poLast = &(ring->back()); if (!poFirst || !poLast || poLine->getNumPoints() < 2) return FALSE; if (poFirstNew->Equals(poLast)) { /* forward, skip first point */ ring->insert(ring->end(), poList.begin()+1, poList.end()); return TRUE; } if (poFirstNew->Equals(poFirst)) { /* backward, skip last point */ ring->insert(ring->begin(), poList.rbegin(), poList.rend()-1); return TRUE; } if (poLastNew->Equals(poLast)) { /* backward, skip first point */ ring->insert(ring->end(), poList.rbegin()+1, poList.rend()); return TRUE; } if (poLastNew->Equals(poFirst)) { /* forward, skip last point */ ring->insert(ring->begin(), poList.begin(), poList.end()-1); return TRUE; } } return FALSE; }
PointList Board::removeDuplicates(PointList lst) const { PointList res; for (auto pt : lst) { if (std::find(res.begin(), res.end(), pt) == res.end()) { res.push_back(pt); } } return res; }
PointList Board::getBombs() const { PointList rslt; rslt.splice(rslt.end(), findAll(Element(LL("BOMB_TIMER_1")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_TIMER_2")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_TIMER_3")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_TIMER_4")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_TIMER_5")))); rslt.splice(rslt.end(), findAll(Element(LL("BOMB_BOMBERMAN")))); return rslt; }
void handleDual(Hyperbola_ray_2 hr, Iso_rectangle_2 crect, std::vector<PointList>& polylines) { std::cerr << "hyperbola ray" << std::endl; // hr.draw(str); PointList p; hr.generate_points(p); PointList points; points.insert(points.end(), p.begin(), p.end()); polylines.push_back(points); for (unsigned int i = 0; i < p.size() - 1; i++) { Segment_2 seg(p[i], p[i+1]); // doing nothing here } }
GLuint CreateSplat(GLuint quadVao, PointList positions) { const int Size = 64; Surface surface = CreateVolume(Size, Size, Size); GLuint program = CreateProgram("Splat.VS", "Splat.GS", "Splat.FS"); glUseProgram(program); GLint inverseSize = glGetUniformLocation(program, "InverseSize"); glUniform1f(inverseSize, 1.0f / (float) Size); const float innerScale = 0.4f; GLint inverseVariance = glGetUniformLocation(program, "InverseVariance"); glUniform1f(inverseVariance, -1.0f / (2.0f * innerScale * innerScale)); GLint normalizationConstant = glGetUniformLocation(program, "NormalizationConstant"); glUniform1f(normalizationConstant, 1.0f / std::pow(std::sqrt(TwoPi) * innerScale, 3.0f)); glBindFramebuffer(GL_FRAMEBUFFER, surface.FboHandle); glBindTexture(GL_TEXTURE_3D, 0); glViewport(0, 0, Size, Size); glBindVertexArray(quadVao); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); PointList::const_iterator i = positions.begin(); for (; i != positions.end(); ++i) { PointList::const_iterator next = i; if (++next == positions.end()) next = positions.begin(); VectorMath::Vector3 velocity = (*next - *i); GLint center = glGetUniformLocation(program, "Center"); glUniform4f(center, i->getX(), i->getY(), i->getZ(), 0); GLint color = glGetUniformLocation(program, "Color"); glUniform3fv(color, 1, (float*) &velocity); glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, Size); } PezCheckCondition(GL_NO_ERROR == glGetError(), "Unable to create splat."); glViewport(0, 0, PEZ_VIEWPORT_WIDTH, PEZ_VIEWPORT_HEIGHT); glDisable(GL_BLEND); return surface.TextureHandle[0]; }
void handleDual(Hyperbola_segment_2 hs, std::vector<PointList>& polylines) { std::cerr << "hyperbola segment" << std::endl; //hs.draw(str); PointList p; hs.generate_points(p); std::cerr << "# hyperbola points: " << p.size() << std::endl; PointList points; points.insert(points.end(), p.begin(), p.end()); polylines.push_back(points); for (unsigned int i = 0; i < p.size() - 1; i++) { Segment_2 seg(p[i], p[i+1]); // doing nothing here } }
void RenderCallback() { // Clear buffers glClearColor(1.0f,1.0f,1.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPointSize(1.0); glColor3f(0,0,0); glLineWidth(2.0f); int i, j; glBegin(GL_LINES); //渲染凸多边形P for( i = gN - 1, j = 0 ; j < gN ; i = j, j += 1 ) { glVertex2f(gP[i].x,gP[i].y); glVertex2f(gP[j].x,gP[j].y); } //渲染凸多边形Q for( i = gM - 1, j = 0 ; j < gM ; i = j, j += 1 ) { glVertex2f(gQ[i].x,gQ[i].y); glVertex2f(gQ[j].x,gQ[j].y); } PointList::iterator it; for( it = gInterList.begin() ; it != gInterList.end() ; it ++ ) { glVertex2f((*it).x,(*it).y - 20); glVertex2f((*it).x,(*it).y + 20); } glEnd(); glutSwapBuffers(); }
void draw_hand_trace(sf::RenderWindow& window, const PointList& pointList, const sf::Color& color, const float depthScale) { if (pointList.size() < 2) { return; } const float thickness = 4; auto it = pointList.begin(); astra::Vector2i previousPoint = *it; while (it != pointList.end()) { const astra::Vector2i currentPoint = *it; ++it; const sf::Vector2f p1((previousPoint.x + .5f) * depthScale, (previousPoint.y + .5f) * depthScale); const sf::Vector2f p2((currentPoint.x + .5f) * depthScale, (currentPoint.y + .5f) * depthScale); previousPoint = currentPoint; window.draw(sfLine(p1, p2, color, thickness)); } }
FrontierList Planner::getFrontiers(GridMap* map, GridPoint start) { // Initialization mFrontierCellCount = 0; mFrontierCount = 0; GridMap plan = GridMap(map->getWidth(), map->getHeight()); FrontierList result; // Initialize the queue with the robot position Queue queue; queue.insert(Entry(0, start)); plan.setData(start, VISIBLE); // Do full search with weightless Dijkstra-Algorithm while(!queue.empty()) { // Get the nearest cell from the queue Queue::iterator next = queue.begin(); int distance = next->first; GridPoint point = next->second; queue.erase(next); // Add neighbors bool isFrontier = false; PointList neighbors = getNeighbors(point, false); char c = 0; for(PointList::const_iterator cell = neighbors.begin(); cell < neighbors.end(); cell++) { if(map->getData(*cell,c) && c == UNKNOWN) { plan.setData(*cell, OBSTACLE); isFrontier = true; break; } if(map->getData(*cell, c) && c == VISIBLE && plan.getData(*cell, c) && c == UNKNOWN) { queue.insert(Entry(distance+1, *cell)); plan.setData(*cell, VISIBLE); } } if(isFrontier) { result.push_back(getFrontier(map, &plan, point)); } } // Set result message and return the point list if(result.size() > 0) { mStatus = SUCCESS; sprintf(mStatusMessage, "Found %d frontiers with %d frontier cells.", mFrontierCount, mFrontierCellCount); }else { mStatus = NO_GOAL; sprintf(mStatusMessage, "No reachable frontiers found."); } return result; }
PointList ClusteredDatasetGenerator::generate(unsigned int numDimensions, const std::vector<ClusterSpecification>& clusters) const { PointList points; RandomPointGenerator rpGenerator; for (std::vector<ClusterSpecification>::const_iterator it = clusters.begin(); (it != clusters.end()); it++) { PointList clusterPoints = rpGenerator.generatePointsInRegion( numDimensions, it->region(), it->numPoints()); points.insert(points.end(), clusterPoints.begin(), clusterPoints.end()); } return points; }
void Dataset<D, ELEM_TYPE>::load(const PointList& newPoints) { // Pre-allocate memory in one sys call m_points.reserve(m_points.size() + newPoints.size()); // Append given points to end of current point list m_points.insert(m_points.end(), newPoints.begin(), newPoints.end()); }
void Planner::setCoverageMap(PointList points, char value) { PointList::iterator i; for(i = points.begin(); i < points.end(); i++) { mCoverageMap->setData(*i, value); } }
void Planner::addReading(Pose p) { PointList points = willBeExplored(p); for(PointList::iterator i = points.begin(); i < points.end(); ++i) { mCoverageMap->setData(*i, VISIBLE); } }
void transform(const PointList& in,PointList& out,const osg::Matrix& matrix) { for(PointList::const_iterator itr=in.begin(); itr!=in.end(); ++itr) { out.push_back(Point(itr->first,itr->second * matrix)); } }
void transform(PointList& points,const osg::Matrix& matrix) { for(PointList::iterator itr=points.begin(); itr!=points.end(); ++itr) { itr->second = itr->second*matrix; } }
PointList::PointList (const PointList& pointList): KKQueue<Point> (true) { PointList::const_iterator idx; for (idx = pointList.begin (); idx != pointList.end (); idx++) { PushOnBack (new Point (*(*idx))); } }
void pushToFarPlane(PointList& points) { for(PointList::iterator itr=points.begin(); itr!=points.end(); ++itr) { itr->second.z() = 1.0f; } }
void copyPointListToVertexList(const PointList& in,VertexList& out) { out.reserve(in.size()); for(PointList::const_iterator itr=in.begin(); itr!=in.end(); ++itr) { out.push_back(itr->second); } }
PointList Board::getFutureBlasts() const { PointList bombs = getBombs(); bombs.splice(bombs.end(), findAll(Element(LL("OTHER_BOMB_BOMBERMAN")))); bombs.splice(bombs.end(), findAll(Element(LL("BOMB_BOMBERMAN")))); PointList rslt; PointList walls = getWalls(); for (auto bmb : bombs) { rslt.push_back(bmb); PointList bombSurrs = bmb.getSurrounds(size); for (auto surr : bombSurrs) { if (std::find(walls.begin(), walls.end(), surr) == walls.end()) { rslt.push_back(surr); } } } return removeDuplicates(rslt); }
ScreenCalibrator::PickResult ScreenCalibrator::pickPoint(const Ray& queryRay) const { /* Create a ray picker: */ Geometry::RayPicker<Scalar,3> picker(queryRay,Scalar(Vrui::getRayPickCosine())); /* Process all points: */ for(PointList::const_iterator pIt=trackingPoints.begin();pIt!=trackingPoints.end();++pIt) picker(*pIt); for(PointList::const_iterator pIt=floorPoints.begin();pIt!=floorPoints.end();++pIt) picker(*pIt); for(PointList::const_iterator pIt=screenPoints.begin();pIt!=screenPoints.end();++pIt) picker(*pIt); for(PointList::const_iterator pIt=ballPoints.begin();pIt!=ballPoints.end();++pIt) picker(*pIt); /* Return the index of the picked point: */ if(picker.havePickedPoint()) return picker.getPickIndex(); else return ~PickResult(0); }
boost::optional<Point> fastFilterPointList( const PointList& pointList, std::vector<Point>& newPointList) const { assert(!pointList.empty()); newPointList.reserve(pointList.size() - 1); std::copy( ++pointList.begin(), pointList.end(), std::back_inserter(newPointList) ); return boost::optional<Point>(pointList.front()); } // fastFilterFunctorList
// True if a track segment could be placed in its present location bool Editor::can_place_track(ITrackSegmentPtr track) { PointList covered; track->get_endpoints(covered); track->get_covers(covered); for (auto it = covered.begin(); it != covered.end(); ++it) { if (map->is_valid_track(*it)) { warn() << "Cannot place track here"; return false; } } return true; }
bool Planner::isFrontierCell(GridMap* map, GridPoint point) const { char c = 0; if(map->getData(point, c) && c != VISIBLE) return false; PointList neighbors = getNeighbors(point, true); for(PointList::const_iterator cell = neighbors.begin(); cell < neighbors.end(); cell++) { char c = 0; if(map->getData(*cell, c) && c == UNKNOWN) { return true; } } return false; }
Pose Planner::getCoverageTarget(Pose start) { GridPoint startPoint; startPoint.x = start.x; startPoint.y = start.y; PointList fCells = getFrontierCells(mCoverageMap, startPoint); PointList::const_iterator p; Pose target; for(p = fCells.begin(); p < fCells.end(); p++) { target.x = p->x; target.y = p->y; LOG_DEBUG_S << "possible goals: " << target.x << "/" << target.y; if(p->distance > 20 && p->distance < 30) break; } return target; }
// clip the convex hull 'in' to plane to generate a clipped convex hull 'out' // return true if points remain after clipping. unsigned int clip(const Plane& plane,const PointList& in, PointList& out,unsigned int planeMask) { std::vector<float> distance; distance.reserve(in.size()); for(PointList::const_iterator itr=in.begin(); itr!=in.end(); ++itr) { distance.push_back(plane.distance(itr->second)); } out.clear(); for(unsigned int i=0;i<in.size();++i) { unsigned int i_1 = (i+1)%in.size(); // do the mod to wrap the index round back to the start. if (distance[i]>=0.0f) { out.push_back(in[i]); if (distance[i_1]<0.0f) { unsigned int mask = (in[i].first & in[i_1].first) | planeMask; float r = distance[i_1]/(distance[i_1]-distance[i]); out.push_back(Point(mask,in[i].second*r+in[i_1].second*(1.0f-r))); } } else if (distance[i_1]>0.0f) { unsigned int mask = (in[i].first & in[i_1].first) | planeMask; float r = distance[i_1]/(distance[i_1]-distance[i]); out.push_back(Point(mask,in[i].second*r+in[i_1].second*(1.0f-r))); } } return out.size(); }