 |
Ver postagens sem respostar. | Ver topicos ativos.
| [ +/- ]
[ Hoje é 09 Set 2010, 18:38 ]
|
|
| Author |
Message |
|
diego.mez
|
Post subject: Rotação vetor Posted: 29 Nov 2009, 18:56 |
|
Joined: 23 Nov 2009, 21:28 Posts: 4
|
|
Olá, o André me ajudou com o meu trabalho de Álgebra e gerou o seguinte algorítmo para rotacionar um vetor. Só que não ta funfando...
#include "gamespace.h" #include <stdlib.h> #include <math.h>
// Rotaciona o ponto 'p' em 'a' graus GS_VECTOR2 Rotaciona(GS_VECTOR2 p, const float a) { const float fCosA = cosf(a); // pré-calcula o seno e coseno para evitar duas chamadas const float fSinA = sinf(a); //desenecessrárias da mesma função GS_VECTOR2 r; r.x = p.x * fCosA + p.y * fSinA; r.y =-p.x * fSinA + p.y * fCosA; return r; }
int main(int argc, char* argv[]) { GAMESPACE_VIDEO_HANDLER gsVideo;
//Cria uma janela pronta para receber as intruções do jogo if (gsVideo.StartApplication(640, 480, "GameSpaceLib window", true)) { // Inicia o laço principal de renderização while (gsVideo.ManageLoop()) { GS_VECTOR2 v2CentroDaTela = gsVideo.GetScreenDimF()/2.0f; static float fAngulo = 0; fAngulo+=0.04f; GS_VECTOR2 v2Vetor = Rotaciona(GS_VECTOR2(0,-100), fAngulo);
gsVideo.DrawLine(v2CentroDaTela, v2CentroDaTela+v2Vetor, GS_WHITE, GS_RED); } } return 0; }
Alguém sabe o que se passa? :S Abç.
|
|
| Topo |
|
 |
|
andrew1b
|
Post subject: Re: Rotação vetor Posted: 30 Nov 2009, 10:32 |
|
| Administrador |
 |
Joined: 30 Ago 2002, 19:16 Posts: 440 Location: Brasil
|
|
Você precisa especificar porque não está funcionando. É erro de compilação? (Que erro?) Que compilador você usa? É erro de execução? O que exatemente acontece?
_________________ André Santee
Ethanon Engine: http://www.asantee.net/ethanon/ Página pessoal: http://www.asantee.net/
|
|
| Topo |
|
 |
|
diego.mez
|
Post subject: Re: Rotação vetor Posted: 30 Nov 2009, 11:29 |
|
Joined: 23 Nov 2009, 21:28 Posts: 4
|
|
Não é erro de compilação. To usando o DEV C++ Ele complia normalmente. Quando executa, abre a janela criada e não mostra nada ._.
|
|
| Topo |
|
 |
|
danielf
|
Post subject: Re: Rotação vetor Posted: 30 Nov 2009, 15:06 |
|
Joined: 20 Jan 2003, 00:15 Posts: 462 Location: Rio de Janeiro
|
Eu não conheço a GSLib, ainda estou para aprender  Tem um erro conceitual no seu código, que não é responsável por não desenhar nada, mas é sempre bom saber que existe esse erro. As funções sinf e cosf esperam o ângulo em radianos e não em graus. Para rodar a graus você deveria converter de graus para radianos (a graus == a*M_PI/180. radianos. M_PI é uma constante que está na math.h, que vale pi). Agora, para tentar descobrir o que está errado, esse códgido desenha algo na tela: Code: #include "gamespace.h" #include <stdlib.h> #include <math.h> int main(int argc, char* argv[]) { GAMESPACE_VIDEO_HANDLER gsVideo;
//Cria uma janela pronta para receber as intruções do jogo if (gsVideo.StartApplication(640, 480, "GameSpaceLib window", true)) { // Inicia o laço principal de renderização while (gsVideo.ManageLoop()) { GS_VECTOR2 v2CentroDaTela = gsVideo.GetScreenDimF()/2.0f; static float fAngulo = 0; fAngulo+=0.04f; GS_VECTOR2 v2Vetor = GS_VECTOR2(0,-100); gsVideo.DrawLine(v2CentroDaTela, v2CentroDaTela+v2Vetor, GS_WHITE, GS_RED); } } return 0; }
Note que a única coisa que eu fiz foi tirar a parte que rotaciona. Esse código deveria mostrar um segmento entre os pontos (320, 140) e (320, 240). Mais uma vez, não conheço GSLib, e o erro que eu falei, apesar de ser um erro, não é responsável por não funcionar. Abraço, Daniel.
|
|
| Topo |
|
 |
|
andrew1b
|
Post subject: Re: Rotação vetor Posted: 30 Nov 2009, 18:13 |
|
| Administrador |
 |
Joined: 30 Ago 2002, 19:16 Posts: 440 Location: Brasil
|
danielf wrote: Tem um erro conceitual no seu código, que não é responsável por não desenhar nada, mas é sempre bom saber que existe esse erro. As funções sinf e cosf esperam o ângulo em radianos e não em graus. Para rodar a graus você deveria converter de graus para radianos (a graus == a*M_PI/180. radianos. M_PI é uma constante que está na math.h, que vale pi).
Não Daniel. Você está correto quando diz que as funções de seno e coseno funcionam somente se o ângulo está em radiano. Mas no caso desse exemplo isso não determinaria o bom ou malfuncionamento do programa. Se você perceber bem no código, verá que o ângulo só está sendo somado (fAngulo+=0.04f;), e não está sendo feita nenhuma operação com ângulos especificos. Inclusive, o valor é baixo justamente pelo fato do ângulo ter de ser em radiano. Portanto o código está correto. Diego, se o programa roda normalmente, pode estar havendo alguma incompatibilidade com hardware. 1. Verifique se a GameSpaceLib está mostrando algum alerta na janela console que abre. 2. Tente aumentar a espessura da linha utilizando o método ::SetLineWidth. Isso faz com que a forma de renderização mude, portanto, se o problema for que o seu PC esteja com problemas para desenhar linhas, este problema pode ser resolvido. Conforme mostra o código: Code: #include <gamespace.h> #include <stdlib.h> #include <math.h>
// Rotaciona o vetor 'p' em 'a' radianos (corrigido) GS_VECTOR2 Rotaciona(GS_VECTOR2 p, const float a) { const float fCosA = cosf(a); // pré-calcula o seno e coseno para evitar duas chamadas const float fSinA = sinf(a); //desenecessrárias da mesma função
GS_VECTOR2 r; r.x = p.x * fCosA + p.y * fSinA; r.y =-p.x * fSinA + p.y * fCosA; return r; }
int main(int argc, char* argv[]) { //Declara os objetos básicos de video, entrada e áudio GAMESPACE_VIDEO_HANDLER gsVideo;
//Cria uma janela pronta para receber as intruções do jogo if (gsVideo.StartApplication(640, 480, "GameSpaceLib window", true)) { // Aumenta a espessura da linha gsVideo.SetLineWidth(5.0f);
// Inicia o laço principal de renderização while (gsVideo.ManageLoop()) { GS_VECTOR2 v2CentroDaTela = gsVideo.GetScreenDimF()/2.0f; static float fAngulo = 0; fAngulo+=0.04f; GS_VECTOR2 v2Vetor = Rotaciona(GS_VECTOR2(0,-100), fAngulo);
gsVideo.DrawLine(v2CentroDaTela, v2CentroDaTela+v2Vetor, GS_WHITE, GS_RED); } } return 0; }
_________________ André Santee
Ethanon Engine: http://www.asantee.net/ethanon/ Página pessoal: http://www.asantee.net/
|
|
| Topo |
|
 |
|
diego.mez
|
Post subject: Re: Rotação vetor Posted: 30 Nov 2009, 19:28 |
|
Joined: 23 Nov 2009, 21:28 Posts: 4
|
AAAh, agora sim haha  Valeu, André. Te devo uma gelada Abç!
|
|
| Topo |
|
 |
|
danielf
|
Post subject: Re: Rotação vetor Posted: 01 Dez 2009, 01:23 |
|
Joined: 20 Jan 2003, 00:15 Posts: 462 Location: Rio de Janeiro
|
andrew1b wrote: danielf wrote: Tem um erro conceitual no seu código, que não é responsável por não desenhar nada, mas é sempre bom saber que existe esse erro. As funções sinf e cosf esperam o ângulo em radianos e não em graus. Para rodar a graus você deveria converter de graus para radianos (a graus == a*M_PI/180. radianos. M_PI é uma constante que está na math.h, que vale pi).
Não Daniel. Você está correto quando diz que as funções de seno e coseno funcionam somente se o ângulo está em radiano. Mas no caso desse exemplo isso não determinaria o bom ou malfuncionamento do programa. Se você perceber bem no código, verá que o ângulo só está sendo somado (fAngulo+=0.04f;), e não está sendo feita nenhuma operação com ângulos especificos. Inclusive, o valor é baixo justamente pelo fato do ângulo ter de ser em radiano. Portanto o código está correto. Andrew1b, existe sim o erro conceitual, pois até aonde eu entendo, comentário faz parte do código. No comentário está bem claro que o parâmetro "a" estaria em graus. Outro erro conceitual é que não se rotaciona pontos e sim vetores (que são descritos da mesma forma (2 números) mas são entidades matemáticas diferentes). Mas enfim, não tem porque começar uma discussão quanto a isso, foi só para alertar o amigo diego.mez para futuramente ele saber que está rodando em radianos. Abraço, Daniel.
|
|
| Topo |
|
 |
|
andrew1b
|
Post subject: Re: Rotação vetor Posted: 01 Dez 2009, 09:54 |
|
| Administrador |
 |
Joined: 30 Ago 2002, 19:16 Posts: 440 Location: Brasil
|
Distração minha. Realmente o comentário diz ângulos. Bem colocada a observação. Quanto ao ponto e vetor, realmente são entidades diferentes, mas é comum na computação gráfica utilizar um registro de vetor para representar pontos. PS.: corrigi o comentário
_________________ André Santee
Ethanon Engine: http://www.asantee.net/ethanon/ Página pessoal: http://www.asantee.net/
|
|
| Topo |
|
 |
Who is online |
Users browsing this forum: Nenhum usuario registrado and 1 guest |
|
Voce não pode criar topicos neste forum Voce não pode responder topicos neste forum Voce nao pode editar seu post neste forum Voce nao pode deletar seu post neste forum
|
|
 |
|
|
 |