January 23, 2008

kueikeh ...The pyramid of Doom ...

Cabe-me apresentar o nosso (meu e de mais dois grandes bois ... errr ... amigos) projecto de SGRAI (Computação Gráfica) que consistia em implementar, utilizando OpenGL, um jogo 3D.

Por questões de performance optamos por utilizar o formato BSP (utilizado nos mapas Quake III).

O resultado foi este:


Janela de Entrada (após os settings)

Expandir


Monstros em formato MD2


Expandir



Debug ligado - Vista em wireframe e caixas AABB de detecção de colisão


Expandir


Mapas tridimensionais com escadas e rampas



Debug ligado - Exemplo de activação do cálculo de visibilidade (ver imagem seguinte para ver o efeito)


Expandir


Como temos o cálculo de visibilidade desligado conseguimos ver que como estavamos voltados para a parede o mundo que estava nas nossas costas não interessa desenhar


Expandir



Ao voltar a activar o cálculo de visibilidade obtemos o seguinte


Expandir


Os nossos segredos:


Expandir



O nível final:


Expandir



O enigma (modelo das roldanas criado por outro boi, o rai(imundo) :D)


Expandir


E pronto ... este foi o trabalho que entregamos e apresentamos ontem (vamos lá ver o resultado e tal) depois conto novidades.


28/01/2008 <-> Novidades: Nota final de 18

Longaaaaaaa inactividade do blog

E quase que passava um anito desde o último post hehehehe, pois é isto agora vai ser diferente ... (para a próxima passa mesmo um ano :P ).


Só para informar oficialmente vou fazer mais um ou dois posts na loucura ... aguardem.

(Pela minha forma de falar até parece mesmo que alguém lê esta coisa :D, eu é que engano a malta)

March 13, 2007

Guerra de Sistemas Operativos

Ora como todos nós sabemos existem diversas guerras no desenvolvimento e inovação (ou falta de) no que toca a funcionalidades, originalidade, entre muitos outros tópicos.

Toda a gente que me conhece, sabe certamente que defendo a 100% o GNU/Linux em detrimento do windows. No entanto este conceito de defesa passa por reconhecer a importância e utilidade de ambos, reconhecendo virtudes e defeitos em ambos os ambientes.

Agora o que eu sou totalmente contra é os mecanismos que são utilizados para cativar a atenção do pessoal.


Aspectos menos correctos por parte do windows:

Parte dos links estão em linguagem mira conhõ, presupuesto que se ninguem os entender pode sempre ***(censurado)***

Aspectos menos correctos por parte do Ubuntu (num conceito geral de sistemas GNU/Linux):

  • A pouca adesão de utilizadores a estes sistemas operativos, leva a que sejam criados mecanismos para o tornar apelativo, e indiscutivelmente o que se assimila ao conceito de apelativo e user friendly são os SO's microsoft, mas porquê?

  • Na minha opinião penso que é um misto de desconhecimento misturado com um pouco de monopólio existente que levam a estes níveis.
    Estes mecanismos que são criados obviamente já foram implementados em parte pelos sistemas Microsoft, falo num sistema de janelas com imensos efeitos todos bonitinhos com uns efeitos todos cócós e essas cenas. E acho que é nessa área que o desenvolvimento GNU/linux anda a perder, derivado à aposta nesta área no sentido de querer apenas cativar os utilizadores.

March 1, 2007

Mínima distância entre um ponto e uma recta

No seguimento do post anterior ( e especialmente para ti ó sleeper ) apresento-vos o fantástico algoritmo de cálculo de distância entre um ponto e uma recta

Mostra/Oculta LineMagnitude


double lineMagnitude(double x1, double y1, double z1,
double x2, double y2, double z2)
{
return Math.Sqrt(
Math.Pow((x2 - x1),2) +
Math.Pow((y2 - y1),2) +
Math.Pow((z2 - z1),2)
)
}

Mostra/Oculta DistancePointLine



/// px,py,pz point to test
/// x1,y1,z1, x2,y2,z2 line segment
///
/// Returns distance from the line, or if the intersecting
/// point on the line nearest the point tested is outside
/// the endpoints of the line, the distance to the nearest
/// endpoint.
/// Returns double.NegativeInfinity on 0 denominator conditions.

double DistancePointLine(double px, doubel py, doubel pz,
double x1 , double y1, double z1,
double x2,double y2, double z2 )

{
double LineMag, u;
double ix , iy; // intersecting point

LineMag = lineMagnitude(x1, y1, z1, x2, y2, z2);

if( 0.0 > LineMag)
return double.NegativeInfinity;

u = (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1)) +
((pz - z1) * (z2 - z1)));
u = u / (LineMag * LineMag);
if(u != 1)
{
// closest point does not fall within the line segment
// take the shorter distance to an endpoint
ix = lineMagnitude(px, py, x1, y1);
iy = lineMagnitude(px, py, x2, y2);
return ( (iy < ix)? iy : ix);
}
else
{
//Intersecting point is on the line, use the formula
ix = x1 + u * (x2 - x1);
iy = y1 + u * (y2 - y1);
iz = z1 + u * (z2 - z1);
return lineMagnitude(px, py, pz, ix, iy, iz);
}
}



Nota: Os cálculos assumem que os dados de entrada já vêem no sistema de unidades métrico, caso isso não seja um facto o cálculo devolve valores num sistema de unidades algo complexo, logo se for utilizado o post anterior para cálculo de distâncias temos uma solução bastante completa no que diz respeito a cálculos entre distâncias e posicionamentos.

Distância entre dois pontos GPS

Como já todos sabem, de há uns tempos para cá tenho vindo a trabalhar, juntamente com mais dois amigos, numa área relacionada com GPS. Um dos problemas que tivemos foi no cálculo de distâncias entre dois pontos no sistema WGS84 (World Geodetic System).

Como é sabido para curtas distâncias (pelos meus cálculos inferiores a 130 metros) o factor curvatura da terra não afecta a distância a calcular, no entanto para valores superiores já se começa a notar um ligeiro erro de medição entre utilizarmos o algoritmo Euclediano de cálculo de dois pontos em linha recta e a verdadeira distância dos pontos.

Para se resolver isto utilizou-se um algorirmo de cálculo que leva em conta a curvatura da terra.

Depois de termos pesquisado bastante sobre o tema na esperança de já termos encontrado algum trabalho já realizado nesta área, acidentalmente deparei-me num site até á data desconhecido que até promove umas competições entre pessoal, que tinha disponível o verdadeiro componente.


Global Distance Calculator

Têm que se registar no site para poderem obter o componente

February 28, 2007

Adicionar funcionalidade ao Blogspot

Resultado Final é algo deste género

Show/Hide

Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show
Hide show hide show Hide show hide showHide show hide showHide show hide show



Como conseguir esta funcionalidade:

  1. Definir estilos CSS no template

  2. Customize->Template->Edit HTML
    .posthidden {display:none}
    .postshown {display:inline}

  3. Definir bloco de código javascript dentro do header desse template

  4. «script type='text/Javascript'»
    function expandcollapse(postid) {
    whichpost = document.getElementById(postid);
    if (whichpost.className=="postshown") {
    whichpost.className="posthidden";
    }
    else {
    whichpost.className="postshown";
    }
    }
    «/script»
  5. Criar no post a seguinte estrutura


  6. Resultado Final é algo deste género

    «a onclick="javascript:expandcollapse ('blck1')"»Show/Hide«/a»
    «span id="blck1" class="posthide"»
    Hide show hide show Hide show hide showHide show hide showHide show hide show
    Hide show hide show Hide show hide showHide show hide showHide show hide show
    Hide show hide show Hide show hide showHide show hide showHide show hide show
    Hide show hide show Hide show hide showHide show hide showHide show hide show
    «/span»



NOTA: substituir o « por MenorQue e o » por MaiorQue devido a limitações do editor tive que os colocar desta forma para poderem ver código html

February 26, 2007

Da Beguine

Ora como pelos vistos pegou a moda do blog, eu não queria ser acusado de ser o último a "jump in the train" portanto cá está um blog que espero eu venha a ser de alguma utilidade.

Rumo a seguir:

-Irei postar soluções de alguns problemas em que eu esteja a trabalhar de forma a possivelmente ajudar alguem que os venha eventualmente a ter, ou mesmo a mim que me esqueço de tudo e mais alguma coisa :D

-Possivelmente alguns insultos a uns membros que eventualmente virão cá postar as bacoradas do costume ( ouviram cryo e sleeper isto é pra vcs :P )

-I dounte nou, anidingue fani or uatebére