public List<Ponto> MontaFecho(ref int quantidade) { defineExtremos();// localiza os pontos mais extremados segundo o eixo X IndexAtual = 1; // Define Indice como 1 List<Ponto> Acima = new List<Ponto>(), Abaixo = new List<Ponto>(); Acima.Add(_pontos[0]); Acima.Add(_pontos[1]); SegmentoDeReta s = new SegmentoDeReta(_pontos[0],_pontos[1]); for(int i = 2; i < _pontos.Count; i++) { int posicao = s.PosicaoPonto(_pontos[i]); if(posicao==0) Acima.Add(_pontos[i]); else if(posicao==1) Abaixo.Add(_pontos[i]); } if(Acima.Count>0) { recursiva(true); IndexAtual++; } if (Abaixo.Count > 0) { IndexAtual++; recursiva(false); } quantidade = IndexAtual+1; return _pontos; }
public TrianguloDelaunay(Ponto A, Ponto B, Ponto C) { _pontoA = A; _pontoB = B; _pontoC = C; _vizinho1 = null; _vizinho2 = null; _vizinho3 = null; _circuncentro = new SegmentoDeReta(A, B).Intersecta(new Reta(A, B)); _circunscrito = new Circulo(Circuncentro, A.RetornaDistancia(Circuncentro)); }
//renomear essa função private void recursiva(bool acima) { List<Ponto> Auxiliar = new List<Ponto>(); SegmentoDeReta segmento; Ponto maisDistante; recursivo: Auxiliar.Clear(); if(acima) { segmento = new SegmentoDeReta(_pontos[IndexAtual-1],_pontos[IndexAtual]); Auxiliar = segmento.PosicaoPonto(_pontos,0); if(Auxiliar != null && Auxiliar.Count>0) { maisDistante = segmento.RetornaMaisDistante(Auxiliar); if (maisDistante != null) { _pontos.Remove(maisDistante); _pontos.Insert(IndexAtual, maisDistante); goto recursivo; } } else { segmento = new SegmentoDeReta(_pontos[IndexAtual], _pontos[IndexAtual + 1]); Auxiliar = segmento.PosicaoPonto(_pontos,0); if (Auxiliar.Count > 0 && Auxiliar != null) { IndexAtual++; goto recursivo; } } } else { segmento = new SegmentoDeReta(_pontos[IndexAtual],_pontos[0]); Auxiliar = segmento.PosicaoPonto(_pontos, 0); if(Auxiliar!=null && Auxiliar.Count>0) { maisDistante = segmento.RetornaMaisDistante(Auxiliar); if(maisDistante!= null) { _pontos.Remove(maisDistante); _pontos.Insert(IndexAtual,maisDistante); goto recursivo; } } else { segmento = new SegmentoDeReta(_pontos[IndexAtual],_pontos[IndexAtual-1]); Auxiliar = segmento.PosicaoPonto(_pontos, 1); if (Auxiliar.Count > 0 && Auxiliar != null) { IndexAtual++; goto recursivo; } } } }