#include "real.h"
#include <math.h>

void reflection(
	real* highest, real* centroid, int dim,
	real* reflected){

	for(int i=0;i<dim;i++) reflected[i]=2*centroid[i]-highest[i];
}

void expansion(
	real* highest, real* centroid, int dim,
	real* expanded){

	for(int i=0;i<dim;i++) expanded[i]=3*centroid[i]-2*highest[i];
}

void contraction(
	real* highest, real* centroid, int dim,
	real* contracted){

	for(int i=0;i<dim;i++) contracted[i]=0.5*centroid[i]+0.5*highest[i];
}

void reduction(
	real** simplex, int dim,
	int lo){

	for(int k=0;k<dim+1;k++) if(k!=lo)
		for(int i=0;i<dim;i++)
			simplex[k][i]=0.5*(simplex[k][i]+simplex[lo][i]);
}

real distance(real* a, real* b, int dim){
	real s=0;
	for(int i=0;i<dim;i++) s+=pow(a[i]-b[i],2);
	return sqrt(s);
}

real size(real** simplex,int dim){
	real s=0;
	for(int k=1;k<dim+1;k++){
		real dist=distance(simplex[0],simplex[k],dim);
		if(dist>s) s=dist;
		}
	return s;
}
