none
poligono regular RRS feed

  • Pregunta

  •  

    mMe gustaria implementar este pseudocodigo para poder dibujar poligonos regulares en mi aplicacion, pero no consigo que funcione correctamente:

     

    Polígono_Regular( N, centro, radio )
    1. Crear una lista de N vértices: vértices
    2. alfa Figura 2π / N
    3. Bucle: i ← 1 hasta N
    4. vértices[i].x ← centro.x + radio * cos( (i-1)*alfa )
    5. vértices[i].y ← centro.y + radio * sen( (i-1)*alfa )
    6. Dibujar_Polígono( vértices, N )
    7. Terminar.

    Dibujar_Polígono( vértices, N )
    1. Bucle: i ← 2 hasta N
    2. Dibujar_Polígono( vértices[i-1].x, vértices[i-1].y, vértices[i].x, vértices[i].y )
    3. Dibujar_Polígono( vértices[N].x, vértices[N].y, vértices[1].x, vértices[1].y )
    4. Terminar.
    me gustaria pintar en el form.

    gracias.
    jueves, 22 de abril de 2010 18:24

Todas las respuestas

  • ¿Con qué? ¿C++, C++/CLI? ¿Win32, WindowsForms, MFC?
    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    jueves, 29 de abril de 2010 8:44
    Moderador
  • C++/Cli
    jueves, 29 de abril de 2010 9:30
  • ponnos el codigo que hasta ahora tienes implementado, para ver si podemos averiguar los fallos.

    Un saludo

    jueves, 29 de abril de 2010 10:25
  •   public:
            void Polígono_Regular(int N,Point centro,int radio,int angulo )
            {
                
               //1. Crear una lista de N vértices: vértices
                        array<Point>^ vertices;

               //2. alfa ← 2π / N
                        int alfa=( (2*Math::PI) / N);

               //3. Bucle: i ← 1 hasta N
                for(int i=1 ; i>=N ; i++)
                {
                   //4. vértices[i].x ← centro.x + radio * cos( (i-1)*alfa + angulo )
                    vertices[i].X = centro.X  + radio * Math::Cos( (i-1)*alfa + angulo );
                   //5. vértices[i].y ← centro.y + radio * sen( (i-1)*alfa + angulo )
                    vertices[i].Y = centro.Y + radio * Math::Sin( (i-1)*alfa + angulo );

                }
               //6. Dibujar_Polígono( vértices, N )
                Dibujar_Polígono(  vertices, N );

               //7. Terminar.

            }
    public:
     void Dibujar_Polígono( array<Point>^ vertices,int N )
     {

       //1. Bucle: i ← 2 hasta N
                for(int i=1 ; i>=N ; i++)
                    {
                    //2. Dibujar_Polígono( vértices[i-1].x, vértices[i-1].y, vértices[i].x, vértices[i].y )
                        Dibujar_Polígono(vertices[i-1].X,vertices[i-1].Y,vertices[i].X,vertices[i].Y );
                    }
      // 3. Dibujar_Polígono( vértices[N].x, vértices[N].y, vértices[1].x, vértices[1].y )
                Dibujar_Polígono(vertices[N].X , vertices[N].Y , vertices[1].X , vertices[1].Y);
       //4. Terminar.
     }

     

    En dibujar poligono me pide que introduzca 4 valores en el pseudocodigo y eso da error al compilar.

    jueves, 29 de abril de 2010 12:04
  • Tienes al menos dos errores.

    El primero está en que no inicializas el array de vértices y debería de darte un warning por ello:

    array<Point>^ vertices=gcnew array<Point>(dimensión);

    El segundo es que dentro de Dibujar_Poligono() estás llamando a Dibujar_Poligono() pero con parámetros diferentes, y al no tener definida otra Dibujar_Poligono() con esos parámetros el compilador protesta.


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    martes, 4 de mayo de 2010 15:42
    Moderador
  • void estrella(int N,Point centro,int radio,int angulo,int salto )


            {   
                array<Point>^ vertices = gcnew array<Point>(N);
                int alfa=( (2*Math::PI) / N);

                for(int i=0 ; i < vertices->Length ; i++)
                    { 
                    vertices[i].X = centro.X + radio * Math::Cos ( (i*alfa ) + angulo );
                    vertices[i].Y = centro.Y + radio * Math::Sin ( (i*alfa ) + angulo );
                    }
            
         
                Dibujar_Estrella( vertices,N , salto );
            }

     

    void Dibujar_Estrella( array<Point>^ vertices,int N , int salto )
            {
                int j;
                   for(int i=0 ; i<vertices->Length ; i++)
                    {
                    j = (i+salto)% N;           
                    dibujar_linea(vertices[i].X,vertices[i].Y,vertices[j].X,vertices[j].Y );
                    }
               
          }

        void dibujar_linea(int x1,int y1 , int x2 , int y2)
                {
                System::Drawing::Pen^ myPen =
                    gcnew System::Drawing::Pen(System::Drawing::Color::Red);
                System::Drawing::Graphics^ formGraphics;
                formGraphics = this->CreateGraphics();
                formGraphics->DrawLine( myPen, x1, y1, x2, y2);
                delete myPen;
                delete formGraphics;
                }

     

    Con esta version si le paso un vector de puntos contruido lo dibuja, pero :

                for(int i=0 ; i < vertices->Length ; i++)
                    { 
                    vertices[i].X = centro.X + radio * Math::Cos ( (i*alfa ) + angulo );
                    vertices[i].Y = centro.Y + radio * Math::Sin ( (i*alfa ) + angulo );
                    }

    en el bucle pasa algo que me deja todos los valores con el primer calculado y no dibuja nada

    miércoles, 5 de mayo de 2010 2:32