public double CalcularDistanciaEuclidiana(ItemNormalizado item1, ItemNormalizado item2, bool xNumeric, bool yNumeric) { double distanciaX, distanciaY; //se os atributos forem numéricos, faz o calculo da distância entre eles //se não forem, verifica se são iguais ou diferentes if (!xNumeric) { distanciaX = item1.ItemOriginal.X.Valor.ToString() == item2.ItemOriginal.X.Valor.ToString() ? 0 : 1; } else { distanciaX = item1.ValorX - item2.ValorX; } if (!yNumeric) { distanciaY = item1.ItemOriginal.Y.Valor.ToString() == item2.ItemOriginal.Y.Valor.ToString() ? 0 : 1; } else { distanciaY = item1.ValorY - item2.ValorY; } //DISTANCIA EUCLIDIANA = RAIZ QUADRADA (SOMA (DISTANCIAS AO QUADRADO)) return(Math.Sqrt(Math.Pow(distanciaX, 2) + Math.Pow(distanciaY, 2))); }
public ItemNormalizado Classificar(Item novoItem) { var calculadoraDistancia = new DistanciaEuclidiana(); //Item a ser classificado é normalizado var itemNormalizado = Normalizar(novoItem); double? menorDistancia = null; ItemNormalizado itemMenorDistancia = null; //os itens do dataset são percorridos para acharmos o item que possui a menor distância //em relação ao item a ser classificado foreach (var item in _dataset.Itens) { //Calcula a distância euclidiana dos itens var distancia = calculadoraDistancia.CalcularDistanciaEuclidiana( item, itemNormalizado, _dataset.XNumeric, _dataset.YNumeric ); if (menorDistancia == null) { menorDistancia = distancia; itemMenorDistancia = item; continue; } if (distancia < menorDistancia) { menorDistancia = distancia; itemMenorDistancia = item; } } //retorna o item do dataset que possui a menor distância return(itemMenorDistancia); }