venerdì 22 giugno 2007

Come si calcola la distanta tra 2 punti espressi in latitudine e longitudine

Su un'altro blog ho trovato questa soluzione:

Se rapresentiamo il comune A con la coppia (a1,b1) in cui a1 è la longitudine e b1 è la latitudine ed il comune B con la coppia (a2,b2) (con significato analogo di a2 e b2), la distanza tra A e B è data dalla formula:

d(A,B) = arccos(cos(a1-a2) * cos(b1) * cos(b2) + sin(b1) * sin(b2))

che fornisce la distanza in radianti, o raggi terrestri.

A questo punto basta moltiplicare d(A,B) x 6360 per ottenere la distanza in km.

Ho anche trovato altre formule. Io mi sono creato il mio metodo in C#:

//http://it.wikipedia.org/wiki/Raggio_terrestre
//Raggio in metri
const double RAGGIO_TERRESTRE_M = 6372795.477598;

public static Double Distanza(double longitudine1, double latitudine1, double longitudine2, double latitudine2)
        {
            double result = (System.Math.Sin((latitudine1 - latitudine2) / 2)) * (System.Math.Sin((latitudine1 - latitudine2) / 2));
            result += System.Math.Cos(latitudine1) * System.Math.Cos(latitudine2) * (System.Math.Sin((longitudine1 - longitudine2) / 2)) * (System.Math.Sin((longitudine1 - longitudine2) / 2));
            result = 2 * System.Math.Asin(System.Math.Sqrt(result));

            return result * RAGGIO_TERRESTRE_M;
        }

Sembra che i conti tornino... Le due formule sono decisamente diverse:

  • d(A,B) = arccos(cos(a1-a2) * cos(b1) * cos(b2) + sin(b1) * sin(b2)) * RAGGIO_TERRESTRE_M
  • d(A,B) = 2 *arcosin(sqr(sin(b1-b2)^2 + cos(b1) * cos(b2) * (cos((a1 - a2)/2))^2)) * RAGGIO_TERRESTRE_M

Anche i calcoli sono decisamente differenti. Se, per esempio, prendiamo due punti A(41.96255363, 12.06951141) e B(41.86222614, 12.45510578) li trasformiamo in radianti Ar(0.732384723, 0.210652713) e Br(0.730633678, 0.217382605) i risultati sono i seguenti:

  • circa 33Km
  • circa 44Km

Chi ha ragione? Faccio la media dei due valori? 38Km e non se parli più!

giovedì 21 giugno 2007

Che programmatore da spiaggia sei?

Anche noi programmatori abbiamo il nostro test.... da spiaggia!

Come il mio amico Roberto Venturelli (se volete vedere il risultato del suo "Programmer Personality Test" cliccate sul link...) anche io ho fatto il test ed ecco cosa ne è venuto fuori:

Your programmer personality type is:
DHTB

You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.
You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.
You work best in a Team.
A good group is better than the sum of it's parts. The only thing better than a genius programmer is a cohesive group of genius programmers.
You are a liBeral programmer.
Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need.

Ecco il link al test: http://www.doolwind.com/index.php?page=11

Mi raccomando fatemi sapere i vostri risultati... e/o anche dove siete stati in vacanza!

martedì 19 giugno 2007

Respira facile: PM10 e la Qualità dell'Aria

Hai mai sentito parlare del PM10 e della qualità dell'aria? È un argomento importante che potrebbe sembrare un po' noioso, ma credi...