Este es un método muy simple. Conociendo la ubicación de tres puntos (simuladamente estos puntos son antenas) podemos calcular la ubicación de un cuarto punto (un móvil por ejemplo).
Basta con calcular las distancias entre cada "antena" y el "móvil" y dibujar circunferencias en cada antena, donde el radio será esa distancia entre antena y movil. (En realidad dicha distancia es la fuerza de señal de las antenas, con las que calcularemos la ubicación del punto que queremos conocer).
La explicación exacta del código en donde yo me basé está en esta página.
El codigo es 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
from sys import argv | |
from math import sqrt | |
x1,y1,x2,y2, x3,y3, x4, y4= int(argv[1]),int(argv[2]), int(argv[3]),int(argv[4]), int (argv[5]),int(argv[6]),int(argv[7]), int(argv[8]) | |
def iniciar(): | |
distanciaA_PM = sqrt((x4-x1)**2 + (y4-y1)**2) | |
distanciaB_PM = sqrt((x4-x2)**2 + (y4-y2)**2) | |
distanciaC_PM = sqrt((x4-x3)**2 + (y4-y3)**2) | |
return distanciaA_PM,distanciaB_PM,distanciaC_PM | |
#Aqui usamos la formula del algoritmo TULIP | |
def calcularPosicion(d1,d2,d3): | |
# x , y : coordenadas del punto que buscamos | |
x = (float(((d1**2-d2**2) + (x2**2-x1**2) + (y2**2-y1**2))*(2*y3-2*y2)- ((d2**2 - d3**2) + (x3**2-x2**2) + (y3**2-y2**2))*(2*y2-2*y1))/float((2*x2-2*x3)*(2*y2-2*y1)-(2*x1-2*x2)*(2*y3-2*y2))) | |
y= ((d1**2-d2**2) + (x2**2-x1**2) + (y2**2-y1**2) + 10*(2*x1-2*y2)) / (2*y2-2*y1) | |
print "Las coordenadas del punto buscado son: ",x,",",y | |
"""def calcularInterseccion(): | |
#Ecuacion de la circunferencia (x-x1)^2+(y-y1)^2 = m^2 | |
x1,y1,m1,x2,y2,m2 = argv[1], argv[2], argv[3], argv[4], argv[5], argv[6] | |
print "La ecuacion de la Circunferencia 1 es (x -",x1,")^2 + ( y -",y1,")^2 = ",m1,"^2" | |
print "La ecuacion de la Circunferencia 1 es (x -",x2,")^2 + ( y -",y2,")^2 = ",m2,"^2" | |
""" | |
d1,d2,d3 = iniciar() | |
calcularPosicion(d1,d2,d3) |
Referencias:
TULIP Algorithm Alternative Trilateration Method, 2012, LesCottrell https://confluence.slac.stanford.edu/display/IEPM/TULIP+Algorithm+Alternative+Trilateration+Method
La tarea está evidentemente muy incompleta. 2 pts.
ResponderEliminar