Para esta semana se pidió utilizar el algoritmo de geolocalización por triangulación.
La trilateración es un método matemático para determinar las posiciones relativas de objetos usando la geometría de triángulos de forma análoga a la triangulación.
La trilateración usa las localizaciones conocidas de dos o más puntos de referencia, y la distancia medida entre el sujeto y cada punto de referencia. Para determinar de forma única y precisa la localización relativa de un punto en un plano bidimensional usando sólo trilateración, se necesitan generalmente al menos 3 puntos de referencia.
Para realizar el código utilicé fragmentos de código de la página que está de referencia y también utilicé fórmulas que explican en Wikipedia.
Para esta tarea mi resultado fue el siguiente:
Para esta tarea mi resultado fue el siguiente:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def trilat(x1, y1, x2, y2, x3, y3, p): | |
P1 = np.array([x1, y1]) | |
P2 = np.array([x2, y2]) | |
P3 = np.array([x3, y3]) | |
ex = (P2 - P1)/(np.linalg.norm(P2 - P1)) | |
i = np.dot(ex, P3 - P1) | |
ey = (P3 - P1 - i*ex)/(np.linalg.norm(P3 - P1 - i*ex)) | |
ez = np.cross(ex,ey) | |
d = np.linalg.norm(P2 - P1) | |
j = np.dot(ey, P3 - P1) | |
D1 = dist((x1,y1),p) | |
D2 = dist((x2,y2),p) | |
D3 = dist((x3,y3),p) | |
x = (pow(D1,2) - pow(D2,2) + pow(d,2))/(2*d) | |
y = ((pow(D1,2) - pow(D3,2) + pow(i,2) + pow(j,2))/(2*j)) - ((i/j)*x) | |
try: | |
z = math.sqrt(pow(D1,2) - pow(x,2) - pow(y,2)) | |
triPt = P1 + x*ex + y*ey + z*ez | |
triPt.tolist() | |
print triPt[1], triPt[0] | |
except: | |
print "No se encuentra" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def dist(p1, p2): | |
x1,y1 = p1 | |
y2, x2 = p2 | |
return math.sqrt( (x2 - x1)**2 + (y2 - y1)**2) |
Referencias:
wwnick , John Austen, respuesta a nohat, "Trilateration using 3 latitude and longitude points, and 3 distances", "Geographic Information Systems", post creado en 22 de Julio 2011, http://gis.stackexchange.com/questions/66/trilateration-using-3-latitude-and-longitude-points-and-3-distances.
Se me hace algo simplificada la realización de esta tarea. 7 pts.
ResponderEliminarNP tarea 7 de redes. Ahora mismo estamos separando temas para tarea 8 en el facebook.
ResponderEliminar