static void discretise( double step, double tolerance ) { BOOST_STATIC_ASSERT( sizeof( Eigen::Vector3d ) == sizeof( double ) * 3 ); comma::csv::input_stream< Eigen::Vector3d > istream( std::cin, csv ); boost::optional< Eigen::Vector3d > previous_point; while( istream.ready() || ( std::cin.good() && !std::cin.eof() ) ) { const Eigen::Vector3d* current_point = istream.read(); if( !current_point ) { break; } if( previous_point ) { output_points( *previous_point, *previous_point ); double distance = ( *previous_point - *current_point ).norm(); if( comma::math::less( step, distance ) ) { Eigen::ParametrizedLine< double, 3 > line = Eigen::ParametrizedLine< double, 3 >::Through( *previous_point, *current_point ); for( double t = step; comma::math::less( t + tolerance, distance ); t += step ) { Eigen::Vector3d point = line.pointAt( t ); output_points( *previous_point, point ); } } } previous_point.reset( *current_point ); } output_points( *previous_point, *previous_point ); }
static void showPathContours(SkPath::RawIter& iter, const char* pathName) { uint8_t verb; SkPoint pts[4]; while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kMove_Verb: SkDebugf(" %s.moveTo(", pathName); output_points(&pts[0], 1); continue; case SkPath::kLine_Verb: SkDebugf(" %s.lineTo(", pathName); output_points(&pts[1], 1); break; case SkPath::kQuad_Verb: SkDebugf(" %s.quadTo(", pathName); output_points(&pts[1], 2); break; case SkPath::kCubic_Verb: SkDebugf(" %s.cubicTo(", pathName); output_points(&pts[1], 3); break; case SkPath::kClose_Verb: SkDebugf(" %s.close();\n", pathName); break; default: SkDEBUGFAIL("bad verb"); return; } } }
static void output_path_data(const SkPaint& paint, const char* used, int emSize, SkString* ptsOut, SkTDArray<SkPath::Verb>* verbs, SkTDArray<unsigned>* charCodes, SkTDArray<SkScalar>* widths) { while (*used) { SkUnichar index = SkUTF8_NextUnichar(&used); SkPath path; paint.getTextPath((const void*) &index, 2, 0, 0, &path); SkPath::RawIter iter(path); SkPath::Verb verb; SkPoint pts[4]; while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { *verbs->append() = verb; switch (verb) { case SkPath::kMove_Verb: output_points(&pts[0], emSize, 1, ptsOut); break; case SkPath::kLine_Verb: output_points(&pts[1], emSize, 1, ptsOut); break; case SkPath::kQuad_Verb: output_points(&pts[1], emSize, 2, ptsOut); break; case SkPath::kCubic_Verb: output_points(&pts[1], emSize, 3, ptsOut); break; case SkPath::kClose_Verb: break; default: SkDEBUGFAIL("bad verb"); SkASSERT(0); } } *verbs->append() = SkPath::kDone_Verb; *charCodes->append() = index; SkScalar width; SkDEBUGCODE(int charCount =) paint.getTextWidths((const void*) &index, 2, &width); SkASSERT(charCount == 1); // SkASSERT(floor(width) == width); // not true for Hiragino Maru Gothic Pro *widths->append() = width; } }
size_t test_ffa(const size_t nfireflies, const size_t nparams, const double mins[], const double maxs[], obj_func f, double *out) { size_t i = 0; ffly_population *fflies = NULL; ffly_population *fflies_old = NULL; const double alpha = ALPHA_ZERO; //randomness step const double gamma = GAMMA / (maxs[0] - mins[0]); //absorption coefficient //initialize our firefly array fflies = init_fflies(nfireflies, nparams, mins, maxs, f); //initialize our old firefly array fflies_old = init_fflies(nfireflies, nparams, mins, maxs, f); //output_points(fflies, "start_ffa.dat"); do { //keep another copy for move function memcpy_fflies(fflies_old, fflies); //rank our flies //qsort(fflies, nfireflies, sizeof(ffly), &cmp_flies); //move the flies based on attractiveness move_fflies(fflies, fflies_old, f, alpha, gamma, mins, maxs); i++; }while (delta_mean(fflies, fflies_old) > EPSILON); qsort(fflies->flies, nfireflies, sizeof(ffly), &cmp_flies); *out = fflies->flies[0].val; output_points(fflies, "end_ffa.dat"); destroy_fflies(fflies); destroy_fflies(fflies_old); return i * nfireflies; };