Ir ao conteúdo

Posts recomendados

Postado

boa noite ,

     pessoal alguém sabe qual a formula para desenhar uma elipse ,  aqui nesse código abaixo consegui desenhar um círculo .

desde já agradeço .

/* no codeblock coloque esse código (  -lgdi32  ) em settings / compiler / linker settings / other linker options                    */

#define _WIN32_WINNT 0x0600          /* precisa desse define e colocado aqui no início */
#include "windows.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define PI 3.14
int main(){
    HWND myconsole = GetConsoleWindow();
    HDC mydc = GetDC(myconsole);
    COLORREF COLOR= RGB(255,255,0);   /* cor amarelo */
    int pixel =0;
    printf("Desenhando Um Circulo\n\n");
    for(double i = 0; i < PI * 4; i += 0.05){
        /*            janela   x          y                         cor do pixel  */
        SetPixel(mydc,pixel,(int)(50+25*cos(i)),COLOR);
        pixel+=1;
    }
    for(int j=0; j<360; j++)               /* desenhar um circulo */
        SetPixel(mydc                     ,/* pega o console      */
        (float)sin(j*3.141592/180)*100+150,/* posição x do pixel  */
        (float)cos(j*3.141592/180)*100+150,/* posição y do pixel  */
        RGB(0,255,255))                   ;/* a cor dos pixeis , azul celeste */

    ReleaseDC(myconsole, mydc);
    getch();
    return 0;
}

 

Postado

Procure por "mid point ellipse algorithm", vários sites explicam a formula matematicamente falando ou se você quiser implementar uma função pronta aqui vai um exemplo.

 

#include <stdio.h>
  #include <conio.h>
  #include <graphics.h>
  #include <dos.h>

  int main() {
        /* request auto detection */
        int gdriver = DETECT, gmode, err;
        long midx, midy, xradius, yradius;
        long xrad2, yrad2, twoxrad2, twoyrad2;
        long x, y, dp, dpx, dpy;

        /* initialize graphic mode */
        initgraph(&gdriver, &gmode, "C:/TC/BGI");
        err = graphresult();

        if (err != grOk) {
                /* error occurred */
                printf("Graphics Error: %s\n",
                                grapherrormsg(err));
                return 0;
        }

        /* x axis radius and y axis radius of ellipse */
        xradius = 100, yradius = 50;

        /* finding the center postion to draw ellipse */
        midx = getmaxx() / 2;
        midy = getmaxy() / 2;

        xrad2 = xradius * xradius;
        yrad2 = yradius * yradius;

        twoxrad2 = 2 * xrad2;
        twoyrad2 = 2 * yrad2;
        x = dpx = 0;
        y = yradius;
        dpy = twoxrad2 * y;

        putpixel(midx + x, midy + y, WHITE);
        putpixel(midx - x, midy + y, WHITE);
        putpixel(midx + x, midy - y, WHITE);
        putpixel(midx - x, midy - y, WHITE);

        dp = (long) (0.5 + yrad2 - (xrad2 * yradius) + (0.25 * xrad2));

        while (dpx < dpy) {
                x = x + 1;
                dpx = dpx + twoyrad2;
                if (dp < 0) {
                        dp = dp + yrad2 + dpx;
                } else {
                        y = y - 1;
                        dpy = dpy - twoxrad2;
                        dp = dp + yrad2 + dpx - dpy;
                }

                /* plotting points in y-axis(top/bottom) */
                putpixel(midx + x, midy + y, WHITE);
                putpixel(midx - x, midy + y, WHITE);
                putpixel(midx + x, midy - y, WHITE);
                putpixel(midx - x, midy - y, WHITE);
                delay(100);
        }

        delay(500);

        dp = (long)(0.5 + yrad2 * (x + 0.5) * (x + 0.5) +
                        xrad2 * (y - 1) * (y - 1) - xrad2 * yrad2);

        while (y > 0) {
                y = y - 1;
                dpy = dpy - twoxrad2;

                if (dp > 0) {
                        dp = dp + xrad2 - dpy;
                } else {
                        x = x + 1;
                        dpx = dpx + twoyrad2;
                        dp = dp + xrad2 - dpy + dpx;
                }

                /* plotting points at x-axis(left/right) */
                putpixel(midx + x, midy + y, WHITE);
                putpixel(midx - x, midy + y, WHITE);
                putpixel(midx + x, midy - y, WHITE);
                putpixel(midx - x, midy - y, WHITE);
                delay(100);
        }

        getch();

        /* deallocate memory allocated for graphic screen */
        closegraph();

        return 0;
  }

 

  • Curtir 1
Postado

Que tipo de problema acontece quando você tenta usar o winbgi?

 

Acredito que se você criar ou utilizar(nativa da winapi) uma função tipo putpixel, seja fácil converter a rotina que faz a elipse e a partir dela criar linhas, círculos, retângulos etc etc.

 

Pelo que entendi você mesmo quer fazer suas funções gráficas como era antigamente para fins de aprendizado.

  • Curtir 1
Postado
20 horas atrás, Benjamin Breeg disse:

Vou te passar o código que usei aqui inclusive com alguns fixes.. é so usar o comando mingw32-make na pasta

do código.

@Benjamin Breeg    não consegui descobrir como usar o comando mingw32-make .  por favor , mais informação .

Postado

Abre um prompt de comando (cmd) e digita assim:

 

path C:\Program Files (x86)\CodeBlocks\mingw\bin

 

Confirma realmente se é o caminho do mingw dentro do codeblocks, roda o mingw32-make e esperar compilar..

 

OBS: não compila com compilador 64bits

  • Curtir 1
  • Obrigado 1
Postado
1 hora atrás, devair1010 disse:

não consegui descobrir como usar o comando mingw32-make .  por favor , mais informação .

 

Isso supõe que a pasta bin do MinGW, onde ficam os executáveis dele, foi configurada na variável de ambiente PATH do seu Windows para sempre poder rodar os executáveis de qualquer pasta que você esteja. Então você pode abrir o CMD na pasta onde está o código fonte e digita mingw32-make para compilar automaticamente.

  • Obrigado 1
  • 2 semanas depois...
Postado

@Benjamin Breeg       por favor , estou com dificuldades para acessar essa pasta pelo prompt de comandos ,  baixei o arquivo que você postou e coloquei na pasta do codeblocks , como está no print abaixo , e tentei abrir a pasta para usar o comando mingw32-make , mas a sintaxe do comando está errada e não estou sabendo como acertar , como proceder ,  o caminho é esse marcado com um retangulo vermelho ,   obrigado desde já  .

1461133022_promptdecomandos.thumb.JPG.672c82519add9921fec66f14463c99d2.JPG

 

1721910935_promptdecomandos2.thumb.JPG.989c7ca8eb03fdb400b623bfdf4e6fae.JPG

Postado

Seria espaço depois de cd, ou seja "cd Codeblocks".

 

Mas o modo mais simples de abrir o cmd numa pasta é navegar até a pasta usando o Explorer (pela imagem que postou você já fez isso, já está com a pasta aberta na tela), e quando estiver lá digite cmd na barra de endereços da pasta e dê Enter.

 

image.png.c18721c809625a5768ec597c2b96fd91.png

  • Obrigado 2
  • 2 semanas depois...
Postado

Você tem que usar extensão de arquivo .cpp do C++.

 

Faz essas configurações no seu projeto...

 

-lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32

 

K0kZ82H.png

 

lMw0Mmh.png

 

Código para testar:

 

Salve com extensão .cpp  (c++ projeto)

 

/* putpixel example */
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>

#define random(range) (rand() % (range))
#define PIXEL_COUNT 1000
#define DELAY_TIME  100  /* in milliseconds */

int main()
{

    /* request autodetection */
    int gdriver = DETECT, gmode, errorcode;

    int i, x, y, color, maxx, maxy, maxcolor, seed;

    /* initialize graphics and local variables */
    initgraph(&gdriver, &gmode, "");

    /* read result of initialization */
    errorcode = graphresult();

    if (errorcode != grOk) {  /* an error occurred */
        printf("Graphics error: %s\n", grapherrormsg(errorcode));
        printf("Press any key to halt:");
        getch();
        exit(1);               /* terminate with an error code */
    }

    maxx = getmaxx() + 1;
    maxy = getmaxy() + 1;
    maxcolor = getmaxcolor() + 1;

    while (!kbhit()) {
        /* seed the random number generator */
        seed = random(32767);
        srand(seed);

        for (i=0; i<PIXEL_COUNT; i++) {
            x = random(maxx);
            y = random(maxy);
            color = random(maxcolor);
            putpixel(x, y, color);
        }

        delay(DELAY_TIME);
        srand(seed);

        for (i=0; i<PIXEL_COUNT; i++) {
            x = random(maxx);
            y = random(maxy);
            color = random(maxcolor);
            if (color == getpixel(x, y))
                putpixel(x, y, 0);
        }
    }

    /* clean up */
    getch();
    closegraph();
    return 0;
}

 

 

  • Obrigado 1
  • 2 semanas depois...
Postado

Que estranho cara, você esta usando todos os arquivos que enviei no pacote? o libbgi.a gerado pela compilação, o graphics.h veja se não esta aproveitando nenhum arquivo antigo de alguma outra instalação. Porque existem algumas correções feitos pela comunidade visto que o autor original do projeto abandonou ele em 2005.

 

Vou te enviar uma libbgi.a compilada num MinGW mais antigo, aparentemente você esta usando o windows XP. Veja se funciona. Se nada resolver recomendo fortemente que você tenta atualizar suas ferramentas de compilação ou ate mesmo tentar outra versão de MinGW como a TDM-GCC

 

 

 

 

libbgi.zip

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!