本文整理汇总了C++中ofPolyline::getPerimeter方法的典型用法代码示例。如果您正苦于以下问题:C++ ofPolyline::getPerimeter方法的具体用法?C++ ofPolyline::getPerimeter怎么用?C++ ofPolyline::getPerimeter使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ofPolyline
的用法示例。
在下文中一共展示了ofPolyline::getPerimeter方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addLaserPolyline
void LaserManager::addLaserPolyline(const ofPolyline& line, ColourSystem* coloursystem, float intens){
if((line.getVertices().size()==0)||(line.getPerimeter()<0.1)) return;
shapes.push_back(new LaserPolyline(line, coloursystem, intens));
}
示例2: update
void trackedContour::update(ofPolyline line){
float contourLength = line.getPerimeter();
//cout << contourLength << endl;
ofPolyline resampled = line.getResampledByCount( sampleCount);
while(resampled.size() < sampleCount){
resampled.getVertices().push_back(resampled[resampled.size()-1]);
}
//resampled.draw();
if (prevFrame.size() > 0){
int smallestStart = -1;
float smallestAvgLen = 10000000;
for (int i = 0; i < sampleCount; i++){
float avgLen = 0;
for (int j = 0; j < sampleCount; j++){
avgLen += (resampled[ (j + i ) % sampleCount] - prevFrame[j]).length() / sampleCount*1.0;
}
if (avgLen < smallestAvgLen){
smallestAvgLen = avgLen;
smallestStart = i;
}
}
ofPolyline temp;
for (int i = 0; i < sampleCount; i++){
temp.addVertex( resampled[ (i + smallestStart) % sampleCount]);
}
resampled = temp;
}
ofPolyline tempT = resampled.getResampledByCount(resampleCount);
while(tempT.size() < resampleCount){
tempT.getVertices().push_back(tempT[tempT.size()-1]);
}
// cout << tempT.size() << " " << resampleSmoothed.size() << endl;
if (resampleSmoothed.size() == 0){
resampleSmoothed = tempT;
for (int i = 0; i < resampleSmoothed.size(); i++){
velPts.push_back(ofPoint(0,0,0));
}
} else {
for (int i = 0; i < resampleCount; i++){
ofPoint prev = resampleSmoothed[i] ;
resampleSmoothed[i] = 0.75f * resampleSmoothed[i] + 0.25f * tempT[i];
velPts[i] = (resampleSmoothed[i] - prev) * ofMap(contourLength, resampleCount, 1000, 1, 0.1, true);
}
}
for (int i = 0; i < resampleCount; i++){
velAvg += velPts[i];
}
velAvg /= resampleCount;
velAvgSmooth = 0.9* velAvgSmooth + 0.1 * velAvg;
for (auto p : resampleSmoothed.getVertices()){
unsigned int nearestIndex = 0;
resampled.getClosestPoint(p, &nearestIndex);
}
prevFrame = resampled;
}
示例3: draw
//--------------------------------------------------------------
void ofApp::draw(){
if(poly.size() < 2) return;
ofPushMatrix();
ofTranslate(ofGetWidth()/2, ofGetHeight()/2);
ofRotateY(rotAngle);
ofSetColor(255, 255, 255);
poly.draw();
ofSetColor(0, 255, 0);
ofSetRectMode(OF_RECTMODE_CENTER);
glPointSize(5);
glBegin(GL_POINTS);
for(int i=0; i<poly.size(); i++) {
ofPoint p = poly[i];
glVertex3f(p.x, p.y, p.z);
}
glEnd();
for(int i=0; i<poly.size(); i++) {
ofPoint p = poly[i];
ofSetColor(255, 0, 0);
ofLine(p, p + poly.getTangentAtIndex(i) * 20);
ofSetColor(0, 255, 0);
ofLine(p, p + poly.getNormalAtIndex(i) * 20);
ofSetColor(0, 128, 255);
ofLine(p, p + poly.getRotationAtIndex(i) * 20);
}
float totalLength = poly.getPerimeter();
float totalArea = poly.getArea();
ofPoint nearestPoint = poly.getClosestPoint(ofPoint(mouseX-ofGetWidth()/2, mouseY-ofGetHeight()/2), &nearestIndex);
ofPoint nearestDataPoint = poly[nearestIndex];
float lengthAtIndex = poly.getLengthAtIndex(nearestIndex);
ofPoint pointAtIndex = poly.getPointAtIndexInterpolated(nearestIndex);
ofPoint pointAtLength = poly.getPointAtLength(lengthAtIndex);
ofPoint pointAtPercent = poly.getPointAtPercent(lengthAtIndex / totalLength);
float indexAtLength = poly.getIndexAtLength(lengthAtIndex);
float sinTime = ofMap(sin(ofGetElapsedTimef() * 0.5), -1, 1, 0, 1);
float sinIndex = sinTime * (poly.isClosed() ? poly.size() : (poly.size()-1)); // sinTime mapped to indices direct
float sinIndexLength = poly.getIndexAtPercent(sinTime); // sinTime mapped to indices based on length
float lengthAtIndexSin = poly.getLengthAtIndexInterpolated(sinIndex);
ofPoint pointAtIndexSin = poly.getPointAtIndexInterpolated(sinIndex);
ofPoint pointAtPercentSin = poly.getPointAtPercent(sinTime);
float angleAtIndex = poly.getAngleAtIndex(nearestIndex);
float angleAtIndexSin = poly.getAngleAtIndexInterpolated(sinIndex);
ofVec3f rotAtIndex = poly.getRotationAtIndex(nearestIndex);
ofVec3f rotAtIndexSin = poly.getRotationAtIndexInterpolated(sinIndex);
float rotMagAtIndex = rotAtIndex.length();
float rotMagAtIndexSin = rotAtIndexSin.length();
ofVec3f normalAtIndex = poly.getNormalAtIndex(nearestIndex);
ofVec3f tangentAtIndexSin = poly.getTangentAtIndexInterpolated(sinIndex);
ofVec3f normalAtIndexSin = poly.getNormalAtIndexInterpolated(sinIndex);
ofVec3f rotationAtIndexSin = poly.getRotationAtIndexInterpolated(sinIndex);
ofNoFill();
ofSetLineWidth(2);
ofSetColor(255, 0, 0);
ofCircle(nearestPoint, 5);
ofSetColor(255, 255, 0);
ofCircle(nearestDataPoint, 7);
// interpolating on indices
{
ofPoint p = poly.getPointAtIndexInterpolated(sinIndex);
ofSetColor(0, 255, 255);
ofCircle(p, 10);
ofSetColor(255, 0, 0);
ofLine(p, p + poly.getTangentAtIndexInterpolated(sinIndex) * 60);
ofSetColor(0, 255, 0);
ofLine(p, p + poly.getNormalAtIndexInterpolated(sinIndex) * 60);
ofSetColor(0, 128, 255);
ofLine(p, p + poly.getRotationAtIndexInterpolated(sinIndex) * 60);
}
// interpolating on length percentages
{
ofPoint p = poly.getPointAtIndexInterpolated(sinIndexLength);
ofSetColor(255, 0, 255);
//.........这里部分代码省略.........
示例4: ofGetResampledCount
ofPolyline ofGetResampledCount(const ofPolyline& polyline, int count) {
float perimeter = polyline.getPerimeter();
return ofGetResampledSpacing(polyline, perimeter / count);
}