https://github.com/DmitryKokorin/scatmc2
Tip revision: dd227fd663526bc54f9665bdd90dd5625e9c734e authored by Dmitry Kokorin on 09 November 2013, 13:43:23 UTC
fix
fix
Tip revision: dd227fd
distance.h
#pragma once
#include "spherical.h"
namespace detail {
template <class T>
class DistanceFunctor
{
Float f1_norm, f2_norm;
T &func1;
T &func2;
public:
DistanceFunctor(T &func1_, const Float f1_norm_,
T &func2_, const Float f2_norm_)
: f1_norm(f1_norm_)
, f2_norm(f2_norm_)
, func1(func1_)
, func2(func2_)
{}
Float operator()(const Vector3 &s)
{
return std::abs(func1(s)/f1_norm - func2(s)/f2_norm);
}
};
} //namespace detail
//calculates distance between two functions defined on a sphere
template <class T>
Float distance(T &func1, T &func2, double tolerance)
{
using namespace detail;
using namespace spherical;
Float f1_norm = integral(func1, tolerance);
Float f2_norm = integral(func2, tolerance);
DistanceFunctor<T> distanceFunctor = DistanceFunctor<T>(func1, f1_norm, func2, f2_norm);
return integral(distanceFunctor, tolerance);
}