tag:blogger.com,1999:blog-81232168617082077632024-03-12T23:52:25.627+00:00António Vaz<i>"Live as if you were to die tomorrow ... Learn as if you were to live forever"</i><br />
<i>by</i> <b>Mahatma Gandhi</b>António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-8123216861708207763.post-71503424814961625702008-01-23T11:43:00.000+00:002008-01-28T08:38:30.133+00:00kueikeh ...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.<br /><br />Por questões de performance optamos por utilizar o formato BSP (utilizado nos mapas Quake III).<br /><br />O resultado foi este:<br /><br /><div style="text-align: center;"><br />Janela de Entrada (após os settings)<br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687668104826450"><img src="http://lh5.google.pt/uteber/R5dXGiyTjlI/AAAAAAAAADA/Cl18UUA4DTE/s144/Entrada.JPG" /><br/>Expandir</a><br /><br />Monstros em formato MD2<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687680989728354"><img src="http://lh4.google.pt/uteber/R5dXHSyTjmI/AAAAAAAAADM/eYur-stpf_c/s144/1.JPG" /><br/>Expandir</a><br /><br /><br />Debug ligado - Vista em wireframe e caixas AABB de detecção de colisão<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687693874630258"><img src="http://lh3.google.pt/uteber/R5dXICyTjnI/AAAAAAAAADU/gEMEuDh6B5E/s144/2.JPG" /><br/>Expandir</a><br /><br />Mapas tridimensionais com escadas e rampas<br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687715349466754"><img src="http://lh4.google.pt/uteber/R5dXJSyTjoI/AAAAAAAAADc/uKB1-mOylr0/s144/3.JPG" /><br/></a><br /><br />Debug ligado - Exemplo de activação do cálculo de visibilidade (ver imagem seguinte para ver o efeito)<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687728234368658"><img src="http://lh3.google.pt/uteber/R5dXKCyTjpI/AAAAAAAAADk/NhZ40L4KRg0/s144/4.JPG" /><br/>Expandir</a><br /><br />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<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687736824303266"><img src="http://lh5.google.pt/uteber/R5dXKiyTjqI/AAAAAAAAADs/SF__eewMAWQ/s144/5.JPG" /><br/>Expandir</a><br /><br /><br />Ao voltar a activar o cálculo de visibilidade obtemos o seguinte<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687749709205170"><img src="http://lh4.google.pt/uteber/R5dXLSyTjrI/AAAAAAAAAD0/0ntgtruDjSg/s144/6.JPG" /><br/>Expandir</a><br /><br />Os nossos segredos:<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687758299139778"><img src="http://lh6.google.pt/uteber/R5dXLyyTjsI/AAAAAAAAAD8/qIGKme3l40A/s144/7.JPG" /><br />Expandir</a><br /><br /><br />O nível final:<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687784068943586"><img src="http://lh4.google.pt/uteber/R5dXNSyTjuI/AAAAAAAAAEM/YosaI-3IOM8/s144/9.JPG" /><br/>Expandir</a><br /><br /><br />O enigma (modelo das roldanas criado por outro boi, o rai(imundo) :D)<br /><br /><a href="http://picasaweb.google.pt/uteber/KueikehScreenshots/photo?authkey=6E-S7P7X9PU#5158687796953845490"><img src="http://lh3.google.pt/uteber/R5dXOCyTjvI/AAAAAAAAAEU/YmSJ9RQA9zw/s144/10.JPG" /><br />Expandir</a><br /><br />E pronto ... este foi o trabalho que entregamos e apresentamos ontem (vamos lá ver o resultado e tal) depois conto novidades.<br /></div><br /><br /><div>28/01/2008 <-> Novidades: Nota final de 18</div>António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com0tag:blogger.com,1999:blog-8123216861708207763.post-77067465639393422812008-01-23T10:25:00.000+00:002008-01-23T10:30:18.904+00:00Longaaaaaaa inactividade do blogE 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 ).<br /><br /><br />Só para informar oficialmente vou fazer mais um ou dois posts na loucura ... aguardem.<br /><br />(Pela minha forma de falar até parece mesmo que alguém lê esta coisa :D, eu é que engano a malta)António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com0tag:blogger.com,1999:blog-8123216861708207763.post-54266845927413195532007-03-13T08:49:00.001+00:002007-03-13T09:37:11.963+00:00Guerra de Sistemas OperativosOra 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.<br /><br />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.<br /><br />Agora o que eu sou totalmente contra é os mecanismos que são utilizados para cativar a atenção do pessoal.<br /><br /><br />Aspectos menos correctos por parte do windows:<br /><ul><br /><li>Plágio à força toda de diversos pormenores, na minha opinião talvez por questões de funcionalidades para utilizadores finais</li><br /><li>Utilização abusiva de material proveniente de outras fontes sem que seja sequer dado crédito a essas fontes, são exemplos disso:<br /></li><blockquote><a href="http://rcda.wordpress.com/2007/02/13/microsoft-plagia-el-logo-de-ubuntu/">Logótipo Live Spaces</a><a href="http://www.elmodem.com/archivo/2006/10/02/%c2%bfcoincidencia-o-copia-yo-creo-que-lo-segundo/"><br />Logótipo "Turn your music to windows Vista"</a><br /><a href="http://elmodem.wordpress.com/2007/01/05/algunas-similitudes-entre-windows-vista-y-mac-os-x/">Microsoft vs Max OS</a><br /><a href="http://www.abadiadigital.com/noticia1778.html">Aero vs XGL vs Leopard</a><br /></blockquote><br /></ul><br /><span style="text-size: 8pt;">Parte dos links estão em linguagem mira conhõ, presupuesto que se ninguem os entender pode sempre ***(censurado)***</span><br /><br />Aspectos menos correctos por parte do Ubuntu (num conceito geral de sistemas GNU/Linux):<br /><br /><ul><li>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ê?<br /><br /></li>Na minha opinião penso que é um misto de desconhecimento misturado com um pouco de monopólio existente que levam a estes níveis.<br />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.<br /><br /></ul>António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com6tag:blogger.com,1999:blog-8123216861708207763.post-590368341600748342007-03-01T08:42:00.000+00:002007-03-01T09:23:32.852+00:00Mínima distância entre um ponto e uma rectaNo 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<br /><br /><a onclick="javascript:expandcollapse('lnMag')">Mostra/Oculta</a> LineMagnitude<br /><pre><br /><span id="lnMag" class="posthidden"><br />double lineMagnitude(double x1, double y1, double z1, <br /> double x2, double y2, double z2)<br />{<br />return Math.Sqrt( <br /> Math.Pow((x2 - x1),2) + <br /> Math.Pow((y2 - y1),2) + <br /> Math.Pow((z2 - z1),2) <br /> )<br />}<br /></span></pre><br /><a onclick="javascript:expandcollapse('gtDistance')">Mostra/Oculta</a> DistancePointLine<br /><br /><span id="gtDistance" class="posthidden"><br /><pre><br />/// px,py,pz point to test<br />/// x1,y1,z1, x2,y2,z2 line segment<br />///<br />/// Returns distance from the line, or if the intersecting<br />/// point on the line nearest the point tested is outside<br />/// the endpoints of the line, the distance to the nearest<br />/// endpoint.<br />/// Returns double.NegativeInfinity on 0 denominator conditions.<br /><br />double DistancePointLine(double px, doubel py, doubel pz,<br /> double x1 , double y1, double z1,<br /> double x2,double y2, double z2 )<br /><br />{<br /> double LineMag, u;<br /> double ix , iy; // intersecting point<br /><br /> LineMag = lineMagnitude(x1, y1, z1, x2, y2, z2);<br /><br /> if( 0.0 > LineMag)<br /> return double.NegativeInfinity;<br /> <br /> u = (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1)) + <br /> ((pz - z1) * (z2 - z1)));<br /> u = u / (LineMag * LineMag);<br /> if(u != 1)<br /> {<br /> // closest point does not fall within the line segment<br /> // take the shorter distance to an endpoint<br /> ix = lineMagnitude(px, py, x1, y1);<br /> iy = lineMagnitude(px, py, x2, y2);<br /> return ( (iy < ix)? iy : ix);<br /> }<br /> else<br /> {<br /> //Intersecting point is on the line, use the formula<br /> ix = x1 + u * (x2 - x1);<br /> iy = y1 + u * (y2 - y1);<br /> iz = z1 + u * (z2 - z1);<br /> return lineMagnitude(px, py, pz, ix, iy, iz);<br /> }<br />}<br /></pre><br /></span><br /><br />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.António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com1tag:blogger.com,1999:blog-8123216861708207763.post-27334629891923154142007-03-01T08:27:00.000+00:002007-03-01T08:42:51.881+00:00Distância entre dois pontos GPSComo 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).<br /><br />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.<br /><br />Para se resolver isto utilizou-se um algorirmo de cálculo que leva em conta a curvatura da terra.<br /><br />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.<br /><br /><br /><a href="http://software.topcoder.com/catalog/c_component.jsp?comp=10294906&ver=1">Global Distance Calculator</a><br /><br />Têm que se registar no site para poderem obter o componenteAntónio Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com1tag:blogger.com,1999:blog-8123216861708207763.post-68473969955567487412007-02-28T14:04:00.000+00:002007-02-28T14:29:30.367+00:00Adicionar funcionalidade ao BlogspotResultado Final é algo deste género<br /><br /><a onclick="javascript:expandcollapse ('blck1')">Show/Hide</a><br /><span id="blck1" class="posthidden"><br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br /></span><br /><br /><br />Como conseguir esta funcionalidade:<br /><ol><br /><li>Definir estilos CSS no template</li><br />Customize->Template->Edit HTML<br />.posthidden {display:none}<br />.postshown {display:inline}<br /><br /><li>Definir bloco de código javascript dentro do header desse template<br /></li><br />«script type='text/Javascript'»<br />function expandcollapse(postid) {<br />whichpost = document.getElementById(postid);<br />if (whichpost.className=="postshown") {<br /> whichpost.className="posthidden";<br />}<br />else {<br /> whichpost.className="postshown";<br />}<br />}<br />«/script»<br /><li>Criar no post a seguinte estrutura</li><br /><span style="background-color: lightgray;"><br />Resultado Final é algo deste género<br /><br />«a onclick="javascript:expandcollapse ('blck1')"»Show/Hide«/a»<br />«span id="blck1" class="posthide"»<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />Hide show hide show Hide show hide showHide show hide showHide show hide show<br />«/span»<br /></span><br /></ol><br /><span style="color:red;"><br />NOTA: substituir o « por <b>MenorQue</b> e o » por <b>MaiorQue</b> devido a limitações do editor tive que os colocar desta forma para poderem ver código html</span>António Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com2tag:blogger.com,1999:blog-8123216861708207763.post-39488030645639954702007-02-26T15:58:00.000+00:002007-02-26T15:59:04.692+00:00Da BeguineOra 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.<br /><br />Rumo a seguir:<br /><br />-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<br /><br />-Possivelmente alguns insultos a uns membros que eventualmente virão cá postar as bacoradas do costume ( ouviram cryo e sleeper isto é pra vcs :P )<br /><br />-I dounte nou, anidingue fani or uatebéreAntónio Vazhttp://www.blogger.com/profile/04068829700018632112noreply@blogger.com9