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