// A bit of code from some camera-path stabilization code
void Path::computeSteps(FloatFunction velocity, float totalLength, float stepTime) {
float curTime = 0.0f;
float curLength = 0.0f;
steps.push_back(Vector2(fx(curTime), fy(curTime)));
while(curLength < totalLength) {
float vel = velocity(curTime);
float s = vel * stepTime;
std::cout << "S: " << s << std::endl;
std::cout << "CurTime: " << curTime << std::endl;
// Oh God Why
float nextTime = findZero([&](float x){
return romberg([&](float y){
return sqrt(pow(derivative([&](float z){
return fx(z);}, y), 2) + pow(derivative([&](float z) {
return fy(z);}, y), 2));}
, curTime, x, 3) - s;}
, curTime + 2 * curTime + 0.01);
curTime = nextTime;
std::cout << "NextTime: " << nextTime << std::endl;
curLength += s;
steps.push_back(Vector2(fx(curTime), fy(curTime)));
}
if(forward)
position = steps.begin();
else
position = steps.end();
}