martes, 14 de mayo de 2013

Entrada # 6 - Matería

Redes de Telecomunicaciones

Para esta semana se nos encargo simular un método de geolocalización, el utilizado se llama trilateración.


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

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()
view raw Tarea6.py hosted with ❤ by GitHub
Referencias

1 comentario: