#include "stdafx.h"
#include "Kalibrace.h"
//namespace KamKalib
//{
Kalibrace::Kalibrace() : Diferencialni(8), Q(), Item()
	{
		
		SetMez(0,0,100);   // nastavení f/px
		SetMez(0,1,5000);
		SetMez(1,0,100);   // nastavení f/py
		SetMez(1,1,5000);
		SetMez(2,0,-uhel);  //rotace x
		SetMez(2,1,uhel);
		SetMez(3,0,-uhel); //rotace y
		SetMez(3,1,uhel);
		SetMez(4,0,-uhel);  //rotace z
		SetMez(4,1,uhel);
		SetMez(5,0,-50);
		SetMez(5,1,50);
		SetMez(6,0,-50);
		SetMez(6,1,50);
		SetMez(7,0,10);
		SetMez(7,1,500);
		Q.SetCxy(1536/2,2048/2);
		this->Start_Evoluce();
	}

Kalibrace::~Kalibrace()
	{
	
	}

double Kalibrace::Fitness(double* A)
	{
		Q.Setax(A[0]);
		Q.Setay(A[1]);
		Q.Setalfa(A[2]);
		Q.Setbeta(A[3]);
		Q.Setgama(A[4]);
		Q.SetX(A[5]);
		Q.SetY(A[6]);
		Q.SetZ(A[7]);
		double odchylka=0;
		Bod Aktualni;
		for (int i=0;i<Item.GetCount();i++)
		{
			Aktualni = Item.GetBod(i);
			if ((Aktualni.ZobrX>0)&&(Aktualni.ZobrY>0))
			{
				double x = Q.PromitnoutX(Aktualni);
				double y = Q.PromitnoutY(Aktualni);
				odchylka += ((Aktualni.ZobrX-x)*(Aktualni.ZobrX-x)+(Aktualni.ZobrY-y)*(Aktualni.ZobrY-y));
			}
		}
		return sqrt(odchylka);
	}
//}
