Ir ao conteúdo
  • Cadastre-se

V!OLADOR

Membro Pleno
  • Posts

    437
  • Cadastrado em

  • Última visita

  1. Bom, mas esta parte não tá claramente errada? O que eu tô lendo ai acima: transladamos o objeto pro ponto (-centerX, -centerY), em seguida transladamos novamente pra posição inicial (4, 4), aplicamos uma rotação e então transladamos novamente pra posição aleatória (-4, -4). De qualquer maneira, assumindo que o polígono já esteja inicialmente centrado na posição (4, 4), pelos valores dos próprios vértices, faça uma translação pra origem do sistema de coordenadas, ou seja (0, 0), aplique a rotação ali e translada o objeto novamente pra posição inicial (4, 4). Talvez funcione.
  2. Aparentemente, ela independe da extensão da superfície (dentro de HDCConsole suponho?).
  3. Bom, por que foi exatamente isso que você pediu pro programa executar. Ou seja, se Y0 + 0 for maior ou igual a Y0, o que é verdade (y=Y0 e Y1=Y0 se Radians=0), então o loop deve ser terminado. 32 + 100 parece-me suficientemente maior que 100, supondo que você se refere a width como um comprimento. Off-topic: Aparentemente, muitas coisas, mas o mais importante seria ter um pouco mais de cuidado na hora das operações aritméticas misturando int, float e double. Sempre converta tudo pra float ou double, dependendo do nível de precisão que deseja, antes das operações. O compilador tá realizando várias conversões implícitas e o código executado não é exatamente o código escrito. Portanto, ele é péssimo pra ler, pra debugar e provavelmente vai ter erros durante o runtime também.
  4. Essa linha, não faz o menor sentido. Talvez, o que busca seja um ponteiro pra uma função como membro de test2. Ou seja, class test2 { public: test2(): Hello(NULL) {} void (*Hello)(); void hey() { if (this->Hello != NULL) this->Hello(); } }; Agora, basta associar uma função com a mesma assinatura de Hello pro membro this->Hello. P/ex: void Hi() { cout << "hello world!!!\n"; } test2 a; int main() { a.Hello = Hi; a.hey(); return 0; }
  5. O compilador está sendo bem claro sobre o problema: Você definiu a função towstring() duas vezes; aparentemente na linha 9 do main.cpp e na linha 359 do cabeçalho cambalinho.h.
  6. Explicado anteriormente. Se eu quero linkar uma biblioteca chamada libfoo.a localizada no endereço /home/mylibs, eu usaria: -L/home/mylibs -lfoo
  7. Bom, o primeiro detalhe é notar que você não está providenciando o endereço do local onde a biblioteca vive mas o endereço da biblioteca propriamente dita (ou seja, do arquivo). O linker poderia tentar procurar no diretório ..\libbgi.a e, obviamente, não encontrar nenhum arquivo libbgi.a ali. O endereço deveria terminar em ..\lib a não ser que seja uma notação própria do Code::Blocks. O segundo detalhe é o fato de que você está tentando utilizar uma biblioteca estática. São essas com extensão .a. Você pode simplesmente utilizar o endereço completo do arquivo (não do local) na flag -l, p/ex.: -l[PATH]\libbgi.a -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 Lembre-se que a ordem das bibliotecas importa. Salvo enganos, as que dependam da libbgi.a devem estar posicionadas a direita dela na linha de comando. Você só pode concluir isso depois de linkar a libbgi.a corretamente e obter o próximo erro. Até o momento você não usou a biblioteca.
  8. O linker utilizado pelo Code::Blocks, ou seja ld.exe, não foi capaz de encontrar a biblioteca libbgi no sistema e, portanto, não consegue montar o executável. Ele procurou em alguns lugares predefinidos (onde normalmente as bibliotecas ficam armazenadas) e noutros especificados por você. Você poderia fornecer o endereço da biblioteca pro linker utilizando a flag -L, p/ex.: -L[PATH] -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 Onde [PATH] seria o endereço pro diretório no qual a biblioteca vive (um arquivo .a ou .so ou .dll etc). Ou você poderia procurar na documentação do Code::Blocks onde ele prefere guardar as bibliotecas e, então, copiar a libbgi pra esse local. Nunca usei Code::Blocks, portanto não posso ajudar muito nessa parte.
  9. Eu acho que usar a flag -I é exatamente a forma (mais) correta. Tentou usar o endereço absoluto ao invés do relativo? Talvez com $PWD/xg/include ou algo do tipo. Eu diria que, a não ser que você saiba exatamente quais serão as consequências de modificar o código, nesse caso, a opção de editar o próprio código pra fazê-lo compilar não é uma boa ideia. Quase sempre indica problemas. O processo de compilação não deveria necessitar modificar o código alvo. Porque não deu certo? Por quê os demais arquivos que usavam __NetBSD__ agora precisavam de outras dependências que você não tinha ou algo do tipo? Se sim, então talvez a macro __NetBSD__ definida apenas na xplore.h não faça sentido. Aqui novamente eu acho que a flag -D é a solução mais correta. Seria possível que alloca.h seja parte de outro pacote e que você tenha que instalar essa dependência primeiro antes de compilar?
  10. Aparentemente as equações estão corretas. Você sempre pode checar o comprimento do vetor, ou a distância entre o ponto e a origem (x0, y0), pra garantir que a rotação foi feita corretamente. O comprimento deve ser o mesmo antes e depois da operação. Assim o erro deve ser noutra parte do código que você não mostrou. Por sinal, não misture números inteiros e números reais nos cálculos pra não perder precisão. Use double (float) pra todas as variáveis envolvidas além de constantes literais também como reais, i.e. "1.0", "180.0" ("1.0f", "180.0f"). Se estiver usando um compilador de C, ao invés de C++, conversões inesperadas podem alterar o cálculo.
  11. Da mesma forma mas, ao invés de medir a distância a partir do ponto (0, 0), meça a partir de um ponto (x0, y0). Então, x' = (x - x0)*cos(alpha) - (y - y0)*sin(alpha). Alternativamente, você sempre pode mover um vetor de onde quer que ele esteja pra origem (0, 0) aplicar a rotação e então movê-lo novamente pra posição original (agora devidamente rotacionado). Lembre-se de movê-lo sem alterar o comprimento ou a direção.
  12. Recomendo a ótima série de livros-tutoriais (gratuitos!) Ray Tracing in One Weekend. Em inglês. Literalmente num final de semana você mata a curiosidade de como projetar raios, interceptar objetos, modelar iluminação etc. e tudo isso utilizando apenas a CPU (mas traduzir o conteúdo pra shaders e rodar numa GPU tampouco vai ser um problema).
  13. O problema pode ocorrer em vários lugares porque você não está sendo cuidadoso na hora checar se as coisas são válidas antes de usá-las. Por exemplo, você recebe ponteiros de duas funções, create_bitmap() e load_bitmap(), e não testa se eles não são, pelo menos, NULL antes de já ir usando por ai. Caso sejam NULL, em algum momento, alguma parte do programa vai tentar dereferenciar esses ponteiros e o programa (o SO por detrás) vai emitir um seg fault. Bom, tudo isso pra dizer que você deve ser mais cuidadoso. Por hora, o problema parece ser aqui: Note que o tamanho máximo de invader é 5x10 e não 10x10.
  14. V!OLADOR

    C media em linguagem c

    Bom, a função do iniciante é errar mesmo (e então aprender). Eu me preocuparia se você fosse um dev sênior. Precisando, é só falar.

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...