Redes de Telecomunicaciones
El proceso fue el siguiente:
Se generaron los transmisores y el punto a buscar de forma aleatoria y sus coordenadas se guardaron en un archivo.
Se saca la distancia del transmisor al punto y se trazan en la ventana.
Se obtiene el punto a buscar en base al algoritmo de Tulip y se pinta en la ventana.
Se traza la circunferencia de los transmisores y obtenemos el resultado final.
Código Utilizado
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 random import randint | |
import os | |
import sys | |
import math | |
import pygame | |
Archivo = 'Transmisores.puddi' | |
Busqueda = 'Buscar.puddi' | |
Colores = [(88, 171, 45), (255, 255, 255), (1, 134, 141)] #Creo un arreglo de colores RGB, cada uno sera para cada transmisor | |
def genera(nuevo): | |
global Archivo, Busqueda | |
existencia = 0 | |
if os.path.exists(Archivo): | |
existencia = 0 | |
else: | |
existencia = 1 | |
if nuevo == 1 or existencia == 1: #Se desea generar nuevos transmisores | |
f = open(Archivo, 'w') | |
for i in range(3): | |
x = randint(50, 540) | |
y = randint(50, 320) | |
f.write(str(x)+' '+str(y)+'\n') | |
f.close() | |
b = open(Busqueda, 'w') | |
b.write(str(randint(50, 540))+' '+str(randint(100, 320))) | |
b.close() | |
def distancias(pantalla): | |
global Archivo, Busqueda | |
inten = list() | |
tran = list() | |
busq = list() | |
b = open(Busqueda, 'r') | |
leerb = b.readlines().pop(0).split() | |
xbu = int(leerb[0]) | |
ybu = int(leerb[1]) | |
busq.append((xbu, ybu)) | |
b.close() | |
f = open(Archivo, 'r') | |
leert = f.readlines() | |
for i in leert: | |
print "Hola: ",i | |
temp = i.split() | |
x = int(temp[0]) | |
y = int(temp[1]) | |
tran.append((x, y)) | |
print "x: ",x, "y: ", y | |
dx = abs(x - xbu) | |
dy = abs(y - ybu) | |
print "Diferencias: ",dx, dy | |
intensidad = math.sqrt(dx**2 + dy**2) | |
inten.append(int(intensidad)) | |
return inten, tran, busq | |
def encontrar(i, t):#intensidades, transmisores): | |
a1 = t[0][0] | |
b1 = t[0][1] | |
a2 = t[1][0] | |
b2 = t[1][1] | |
a3 = t[2][0] | |
b3 = t[2][1] | |
r1 = i[0] | |
r2 = i[1] | |
r3 = i[2] | |
x = ((r1**2 - r2**2) + (a2**2 - a1**2) + (b2**2 - b1**2)) * (2*b3 - 2*b2) | |
x = x - ((r2**2 - r3**2) + (a3**2 - a2**2) + (b3**2 - b2**2)) * (2*b2 - 2*b1) | |
x = x / ( ((2*a2 - 2*a3)*(2*b2 - 2*b1)) - ((2*a1 - 2*a2)*(2*b3 - 2*b2)) ) | |
y = ( ((r1 ** 2 - r2 ** 2) + (a2**2 - a1**2) + (b2**2 - b1**2) + x * (2*a1 - 2 * a2)) ) | |
y = y / (2*b2 - 2*b1) | |
return x, y | |
def main(): | |
global Colores | |
pygame.init() | |
pantalla = pygame.display.set_mode((640, 420)) | |
pygame.display.set_caption("Tarea 6") | |
g = int(sys.argv[1]) | |
genera(g) | |
intensidades, transmisores, buscar = distancias(pantalla) | |
print "Posicion Transmisores: ", transmisores | |
print "Posicion del elemento a buscar: ", buscar | |
print "Intensidades de los Transmisores: ", intensidades | |
for i in range(len(transmisores)): | |
x, y = transmisores[i] | |
pygame.draw.circle(pantalla, Colores[i], (x, y), 10) | |
buscarx, buscary = encontrar(intensidades, transmisores) | |
print buscarx, buscary | |
pygame.image.save(pantalla, "Resultado2.png") | |
#Comparo cada circulo para ver que tanta exactitud tuvo el algoritmo | |
pygame.draw.circle(pantalla, (255, 0, 0), (buscar[0][0], buscar[0][1]), 10) #Del Archivo | |
pygame.draw.circle(pantalla, (255, 255, 0), (buscarx, buscary), 10) #Mediante el algoritmo | |
pygame.image.save(pantalla, "Resultado1.png") | |
for i in range(len(intensidades)): | |
x, y = transmisores[i] | |
pygame.draw.circle(pantalla, Colores[i], (x, y), intensidades[i], 1) | |
fuente = pygame.font.Font(None, 21) | |
punto = "Punto Encontrado en: "+str(buscarx)+", "+str(buscary) | |
mensaje = fuente.render(punto, 1, (255, 255, 255)) | |
pantalla.blit(mensaje, (buscarx, buscary)) | |
while True: | |
for event in pygame.event.get(): | |
if event.type == pygame.QUIT: | |
pygame.image.save(pantalla, "Resultado.png") | |
sys.exit() | |
pygame.display.flip() | |
main() |
Referencias
http://es.wikipedia.org/wiki/Trilateraci%C3%B3n
https://confluence.slac.stanford.edu/display/IEPM/TULIP+Algorithm+Alternative+Trilateration+Method
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH5CfZ9046ap-KZG9veQX8aaX7rvqIiQX_2Ns-jJ1aSBkBL5hLucFci_zAT40MfXI22lZzQG-CFgzGH4BjPXCEU9mzehyphenhyphenV73PgJMttvYMt9VcmbBADh9iI0slua2zCAtG6WZUsKsIOm_yk/s1600/ColorScaleImageRGB1.png
https://confluence.slac.stanford.edu/display/IEPM/TULIP+Algorithm+Alternative+Trilateration+Method
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH5CfZ9046ap-KZG9veQX8aaX7rvqIiQX_2Ns-jJ1aSBkBL5hLucFci_zAT40MfXI22lZzQG-CFgzGH4BjPXCEU9mzehyphenhyphenV73PgJMttvYMt9VcmbBADh9iI0slua2zCAtG6WZUsKsIOm_yk/s1600/ColorScaleImageRGB1.png
8 pts.
ResponderEliminar