#include <vector>
#include <QVector3D>
#include <math.h>
#include <iostream>
#include <stdafx.h>
#include <stdlib.h>
#include <stdio.h>
#include <optimization.h>

#ifndef PI
#define PI 3.14159264
#endif

using namespace alglib;
using namespace std;

class Superquadratics 
{

public:
	Superquadratics();
	~Superquadratics();

	void fitSuperquadratic(const vector<QVector3D> &originalData, vector<QVector3D> &outputData, int LOD);
	

protected:	

	static vector<QVector3D> OriginalData_;

	void createSuperquadratic(double a1, double a2, double a3, double e1, double e2, int LOD, vector<QVector3D> &data);
	double insideOutsideFunction(double a1, double a2, double a3, double e1, double e2, double x, double y, double z);
	void function1_grad(const real_1d_array &x, real_1d_array &fi);
	static void staticFunction1_grad(const real_1d_array &x, real_1d_array &fi, void *ptr);

};

