none
Circunferencia dentro de uma matriz... RRS feed

  • Pergunta

  • 0 - 1 - 1 - 0

    1 - 1 - 1 - 1

    1 - 1 - 1 - 1

    0 - 1 - 1 - 0

     

    0 - 0 - 0 - 1 - 1 - 0 - 0 - 0

    0 - 0 - 1 - 1 - 1 - 1 - 0 - 0

    0 - 1 - 1 - 1 - 1 - 1 - 1 - 0

    1 - 1 - 1 - 1 - 1 - 1 - 1 - 1

    1 - 1 - 1 - 1 - 1 - 1 - 1 - 1

    0 - 1 - 1 - 1 - 1 - 1 - 1 - 0

    0 - 0 - 1 - 1 - 1 - 1 - 0 - 0

    0 - 0 - 0 - 1 - 1 - 0 - 0 - 0

    existe alguma logica de laços para fazer uma especie de circunferencia dentro da matriz?

    como por exemplo, essa matriz ali em cima, mas tem que ser um algoritimo que sirva para todos os tamanhos de matriz

    to morrendo de dor de cabeça e não to conseguindo pensar direito

     

    alguem tem uma ideia? pode ser explicação pura sem codigo trabalhado...

     

    obrigado!

     



    Microsoft...
    terça-feira, 19 de julho de 2011 18:47

Respostas

  • Sim.. existe uma logica.

    Um cirulo é definido pela equacao: x^2+y^2=r^2...

     

    Entao, isolando o Y, vc obtem > y=± sqrt(r^2-x^2)

     

    para programar isso, vc separa em duas variaveis, y1 e y2

    y1=sqrt(r^2-x^2)

    y2=-sqrt(r^2-x^2)

    o que resulta nesse código:

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication3
    {
      class Program
      {
        static void Main(string[] args)
    
        {
          int[,] matriz= new int[100,100];
          int r = 12;//Raio
          int x, y;
    
          for (y = 0; y <=r; y++)
            for (x = 0; x <=r; x++)
              matriz[x, y] = 0;
            
          
          
            for (x = -r; x <=r; x++)
            {
              y = Convert.ToInt32(Math.Floor(Math.Sqrt(Math.Pow(r,2) - Math.Pow(x,2))));
              matriz[x+r,r+y] = 1;
              matriz[x+r,r-y] = 1;
    
            }
    
            for (y = 0; y <=r*2; y++)
            {
              for (x = 0; x <=r*2; x++)
                Console.Write(matriz[x, y]);
              Console.WriteLine();
            }
    
            Console.ReadKey();
        }
      }
    }
    
    

     

    O resultado raio=4 é

    000010000

    001101100

    010000010

    000000000

    100000001

    000000000

    010000010

    001101100

    000010000


    O resultado  raio =12 é

    0000000000001000000000000

    0000000011110111100000000

    0000001100000000011000000

    0000010000000000000100000

    0000100000000000000010000

    0001000000000000000001000

    0010000000000000000000100

    0000000000000000000000000

    0100000000000000000000010

    0000000000000000000000000

    0000000000000000000000000

    0000000000000000000000000

    1000000000000000000000001

    0000000000000000000000000

    0000000000000000000000000

    0000000000000000000000000

    0100000000000000000000010

    0000000000000000000000000

    0010000000000000000000100

    0001000000000000000001000

    0000100000000000000010000

    0000010000000000000100000

    0000001100000000011000000

    0000000011110111100000000

    0000000000001000000000000

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    • Sugerido como Resposta Felipe Guerra terça-feira, 19 de julho de 2011 19:53
    • Marcado como Resposta Tenjor quarta-feira, 20 de julho de 2011 11:20
    terça-feira, 19 de julho de 2011 19:49
    Moderador

Todas as Respostas

  • Explique melhor oque você deseja fazer, pelo o que vi pretende fazer isso em uma matriz quadrada?

    terça-feira, 19 de julho de 2011 19:29
  • é tipo assim

     

    quero fazer uma verificação circular "circular não significar que é um loop e sim um circulo mesmo" dentro de uma matriz...

     

    vai ter um ponto la e quero saber oque tem ao redor dele em forma de circulo

    queria saber como formar essa circunferencia dentro da matriz usando apenas os Laços...

     


    Microsoft...
    terça-feira, 19 de julho de 2011 19:46
  • Sim.. existe uma logica.

    Um cirulo é definido pela equacao: x^2+y^2=r^2...

     

    Entao, isolando o Y, vc obtem > y=± sqrt(r^2-x^2)

     

    para programar isso, vc separa em duas variaveis, y1 e y2

    y1=sqrt(r^2-x^2)

    y2=-sqrt(r^2-x^2)

    o que resulta nesse código:

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication3
    {
      class Program
      {
        static void Main(string[] args)
    
        {
          int[,] matriz= new int[100,100];
          int r = 12;//Raio
          int x, y;
    
          for (y = 0; y <=r; y++)
            for (x = 0; x <=r; x++)
              matriz[x, y] = 0;
            
          
          
            for (x = -r; x <=r; x++)
            {
              y = Convert.ToInt32(Math.Floor(Math.Sqrt(Math.Pow(r,2) - Math.Pow(x,2))));
              matriz[x+r,r+y] = 1;
              matriz[x+r,r-y] = 1;
    
            }
    
            for (y = 0; y <=r*2; y++)
            {
              for (x = 0; x <=r*2; x++)
                Console.Write(matriz[x, y]);
              Console.WriteLine();
            }
    
            Console.ReadKey();
        }
      }
    }
    
    

     

    O resultado raio=4 é

    000010000

    001101100

    010000010

    000000000

    100000001

    000000000

    010000010

    001101100

    000010000


    O resultado  raio =12 é

    0000000000001000000000000

    0000000011110111100000000

    0000001100000000011000000

    0000010000000000000100000

    0000100000000000000010000

    0001000000000000000001000

    0010000000000000000000100

    0000000000000000000000000

    0100000000000000000000010

    0000000000000000000000000

    0000000000000000000000000

    0000000000000000000000000

    1000000000000000000000001

    0000000000000000000000000

    0000000000000000000000000

    0000000000000000000000000

    0100000000000000000000010

    0000000000000000000000000

    0010000000000000000000100

    0001000000000000000001000

    0000100000000000000010000

    0000010000000000000100000

    0000001100000000011000000

    0000000011110111100000000

    0000000000001000000000000

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    • Sugerido como Resposta Felipe Guerra terça-feira, 19 de julho de 2011 19:53
    • Marcado como Resposta Tenjor quarta-feira, 20 de julho de 2011 11:20
    terça-feira, 19 de julho de 2011 19:49
    Moderador
  • Isso só é válido se a circunferência for no centro (0,0).

    Caso o seu elemento esteja deslocado na tela, você terá que descreve-lo (x - xc)² + (y-yc)² = r²


    terça-feira, 21 de fevereiro de 2017 18:50