def le_evento(i, list_linhas, registros): linha = list_linhas[i].split() if linha[0] == "e": # Evento linha = list_linhas[i + 1].split() pausas = registros[dados.TIPO_INTERVALOS_PAUSAS] # Verifica qual é o evento if linha[0] == "i": # Início pausas += [ len(dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)) ] elif linha[0] == "p" or linha[0] == "r": # Pausa ou einício pausas += [ len(dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)) - 1 ] elif linha[0] == "f": # Fim pausas += [ len(dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)) - 1 ] if registros[dados.TIPO_INTERVALOS_LAPS] != []: registros[dados.TIPO_INTERVALOS_LAPS].append( (dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)[-1], len( dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)) - 1)) return i + 1 i += 2
def grafico_do_percurso(registros): global flag try: window = turtle.Screen() tartaruga = turtle.Turtle() window.title("Gráfico de Percurso") tartaruga.pensize(3) tartaruga.shape("blank") lista_de_lat = dados.getList(registros, dados.TIPO_LATITUDE, flag + dados.COM_NONE) lista_de_lon = dados.getList(registros, dados.TIPO_LONGITUDE, flag + dados.COM_NONE) max_lat = ((max(lista_de_lat) * 1000000) % 10000) max_lon = ((max(lista_de_lon) * 1000000) % 10000) div = (6 * max_lat) / 3864 inc = 3 tartaruga.up() tartaruga.goto( escalaa(lista_de_lon[0], div) - ((275 * inc) * max_lon) / 6458, escalaa(lista_de_lat[0], div) - ((125 * inc) * max_lat) / 3864) tartaruga.down() tartaruga.write(" Início", align="left", font=("Arial", 16, "normal")) tartaruga.dot("red") tartaruga.pencolor("blue") dist = 0 km = 1 for i in range(1, len(lista_de_lat)): dist += geodesic((lista_de_lat[i - 1], lista_de_lon[i - 1]), (lista_de_lat[i], lista_de_lon[i])).kilometers x = escalaa(lista_de_lon[i], div) - ((275 * inc) * max_lon) / 6458 y = escalaa(lista_de_lat[i], div) - ((125 * inc) * max_lat) / 3864 tartaruga.goto(x, y) if dist > km: tartaruga.dot("grey") tartaruga.pencolor("black") tartaruga.write("{}º km ".format(km), align="right", font=("Arial", 12, "normal")) tartaruga.pencolor("blue") km += 1 tartaruga.dot("red") tartaruga.pencolor("black") tartaruga.write(" Fim", align="right", font=("Arial", 16, "normal")) window.mainloop() except turtle.Terminator: # Conflito de instancia da Turtle() window.clearscreen() grafico_do_percurso(registros) except tkinter.TclError: # Fechar a janela antes de acabar o desenho pass
def distancia_total(registros): global flag lista_de_longitudes = dados.getList(registros, dados.TIPO_LONGITUDE, flag) lista_de_latitudes = dados.getList(registros, dados.TIPO_LATITUDE, flag) print( strings.distancia_total.format( puras.dist_percorrida(lista_de_latitudes, lista_de_longitudes)))
def apresentaGraficoBPMs( registros): # Chama as funções referente ao gráfico BPMs global flag x = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) y = dados.getList(registros, dados.TIPO_BPMS, flag + dados.COM_NONE) if not puras.notNone(y) and len(x) > 1: grafico.criarGrafico([(x, y)], ("Gráfico BPM")) else: print(strings.sem_dados_para_grafico)
def apresentaGraficoBPMsZonas( registros): # Chama as funções referente ao gráfico de Zonas do BPM global flag x = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) y = dados.getList(registros, dados.TIPO_BPMS, flag + dados.COM_NONE) if not puras.notNone(y) and len(x) > 1: idade = int(input("Digite sua idade: ")) grafico.criarGrafico([(x, y)], ("Gráfico Zonas de BPM", idade)) else: print(strings.sem_dados_para_grafico)
def ritmo(registros): global flag tempo_total = dados.getTempoTotal(registros) latitudes = dados.getList(registros, dados.TIPO_LATITUDE, flag) longitudes = dados.getList(registros, dados.TIPO_LONGITUDE, flag) if not puras.notNone(latitudes) and not puras.notNone(longitudes): tempo_decorrido = tempo_total / 60 dist_total = puras.dist_percorrida(latitudes, longitudes) print(strings.ritmo.format(tempo_decorrido / dist_total)) else: print(strings.sem_ritmo)
def le_laps(i, list_linhas, registros): linha = list_linhas[i].split() if linha[0] == "l": # Laps laps = registros[dados.TIPO_INTERVALOS_LAPS] if laps == []: laps.append( (int(linha[1]), len(dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)))) else: laps.append( (int(linha[1]), len(dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag)) - 1))
def apresentaGraficoCompleto( registros): # Chama as funções referente ao gráfico completo global flag xys = [] xa = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) ya = dados.getList(registros, dados.TIPO_ALTITUDE, flag + dados.COM_NONE) if not puras.notNone(ya) and len(xa) > 1: xys += [(xa, ya, 0)] xb = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) yb = dados.getList(registros, dados.TIPO_BPMS, flag + dados.COM_NONE) if not puras.notNone(yb) and len(xb) > 1: xys += [(xb, yb, 1)] lat, lon = dados.getList(registros, dados.TIPO_LATITUDE, flag + dados.COM_NONE), dados.getList( registros, dados.TIPO_LONGITUDE, flag + dados.COM_NONE) tempo = puras.tempo_registros( dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE)) if not puras.notNone(lat) and not puras.notNone(lon) and len(tempo) > 1: xc = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) yc = puras.getRitmo_Por_Registro( tempo, puras.dist_percorrida_por_registro(lat, lon)) xys += [(xc, yc, 2)] if xys != []: grafico.criarGrafico(xys, "Gráfico Completo") else: print(strings.sem_dados_para_grafico)
def batimentos_por_minutos(registros): global flag contador = 0 lista_dos_bpms = dados.getList(registros, dados.TIPO_BPMS, flag) if not puras.notNone(lista_dos_bpms): tempo = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag) bpm_max = max(lista_dos_bpms) bpm_min = min(lista_dos_bpms) print(strings.bpm_maxima.format(bpm_max)) print(strings.bpm_minima.format(bpm_min)) print( strings.bpm_media.format(puras.getMediaBpm(lista_dos_bpms, tempo))) else: print(strings.sem_bpm)
def temPausa(opcao, registros): # Retorna uma string "s" ou "n" pausas = dados.getList(registros, dados.TIPO_INTERVALOS_PAUSAS, dados.SEM_FLAG) sem_pausas = "default" while e_valida(opcao, "2 3") and not e_valida(sem_pausas, "n s") and len(pausas) > 2: sem_pausas = input(strings.opcoes_pausa).lower().strip(" ") return sem_pausas
def apresentaGraficoRitmo( registros): # Chama as funções referente ao gráfico ritmo global flag lat, lon = dados.getList(registros, dados.TIPO_LATITUDE, flag + flag + dados.COM_NONE), dados.getList( registros, dados.TIPO_LONGITUDE, flag + dados.COM_NONE) tempo = puras.tempo_registros( dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + flag + dados.COM_NONE)) if not puras.notNone(lat) and not puras.notNone(lon) and len(tempo) > 1: x = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) y = puras.getRitmo_Por_Registro( tempo, puras.dist_percorrida_por_registro(lat, lon)) grafico.criarGrafico([(x, y)], ("Gráfico de Ritmo")) else: print(strings.sem_dados_para_grafico)
def apresentaResumoPorKM( registros): # Chama as funções referente ao resumo por KM global flag print("\n", strings.bordas) i1 = 0 #Índice do início do KM i2 = 1 #Índice do final do KM, vai ser incrementado km = 1 #Contador de KM dist = 0 #distância lat = dados.getList(registros, dados.TIPO_LATITUDE, flag + dados.COM_NONE) lon = dados.getList(registros, dados.TIPO_LONGITUDE, flag + dados.COM_NONE) if not puras.notNone(lat) and not puras.notNone(lon): tempo = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, flag + dados.COM_NONE) alt = dados.getList(registros, dados.TIPO_ALTITUDE, flag + dados.COM_NONE) passos = dados.getList(registros, dados.TIPO_PASSOS, flag + dados.COM_NONE) bpms = dados.getList(registros, dados.TIPO_BPMS, flag + dados.COM_NONE) while i2 < len( dados.getList(registros, dados.TIPO_LATITUDE, flag + dados.COM_NONE)): dist += geodesic((lat[i2 - 1], lon[i2 - 1]), (lat[i2], lon[i2])).kilometers if dist > km or i2 == len( dados.getList(registros, dados.TIPO_LATITUDE, flag + dados.COM_NONE) ) - 1: # Imprimi e armazena os dados do início do próximo k tempo_total = tempo[i2] - tempo[i1] print( strings.resumoKMLAPS.format( km, # Km atual "km", # Km puras.getMinutos(tempo_total), # Minutos puras.getSegundos(tempo_total), # Segundos puras.getMinutos(tempo_total), # Ritmo puras.getCadenciaPassos(passos[i1:i2], tempo_total), # Cadência puras.getMediaBpm(bpms[i1:i2], tempo[i1:i2]), # BPM puras.getGanhoOuPerda( alt[i2] - alt[i1]), # String com "ganho" ou "perder" puras.getModulo(alt[i2] - alt[i1])), # Altitude ganho ou perda end="") i1 = i2 km += 1 i2 += 1 dados_nao_encontrados(bpms, passos, alt) else: print("\n" + strings.sem_distancia) print("\n", strings.bordas, "\n")
def cadencia_de_passos(registros): global flag lista_dos_passos = dados.getList(registros, dados.TIPO_PASSOS, flag) if not puras.notNone(lista_dos_passos): tempo_total = dados.getTempoTotal(registros) cadencia_passos = puras.getCadenciaPassos(lista_dos_passos, tempo_total) print(strings.cadencia.format(cadencia_passos)) else: print(strings.sem_cadencia)
def apresentaDHD(registros): # Apresenta a data, hora e duração global flag inicial_final = dados.getList(registros, dados.TIPO_TEMPO_TOTAL, flag) lista_de_tempo = dados.getTempoTotal(registros) tempo_inicial = datetime.datetime.fromtimestamp( inicial_final[0]).strftime('%d/%m/%Y %H:%M:%S') tempo_final = datetime.datetime.fromtimestamp( inicial_final[1]).strftime('%d/%m/%Y %H:%M:%S') duracao = puras.getDuracaoString(lista_de_tempo) print("\n", strings.bordas, "\n") print( strings.inicio_fim_duracao.format(tempo_inicial, tempo_final, duracao)) print("\n", strings.bordas, "\n")
def altitude_max_e_min(registros): global flag lista_das_altitudes = dados.getList(registros, dados.TIPO_ALTITUDE, flag) if not puras.notNone(lista_das_altitudes): altitude_max = max(lista_das_altitudes) altitude_min = min(lista_das_altitudes) altitude_inicial = lista_das_altitudes[0] print(strings.altitude_maxima.format( altitude_max - altitude_inicial)) # Altitude relativa máxima print(strings.altitude_minima.format( altitude_inicial - altitude_min)) # Altitude relativa mínima else: print(strings.sem_altitude)
def apresentarResumoPorLaps(registros): print("\n", strings.bordas) laps = dados.getList(registros, dados.TIPO_INTERVALOS_LAPS, dados.SEM_FLAG) if laps != []: lat = dados.getList(registros, dados.TIPO_LATITUDE, dados.COM_NONE) lon = dados.getList(registros, dados.TIPO_LONGITUDE, dados.COM_NONE) tempo = dados.getList(registros, dados.TIPO_TEMPO_REGISTROS, dados.COM_NONE) alt = dados.getList(registros, dados.TIPO_ALTITUDE, dados.COM_NONE) passos = dados.getList(registros, dados.TIPO_PASSOS, dados.COM_NONE) bpms = dados.getList(registros, dados.TIPO_BPMS, dados.COM_NONE) lap = 1 for i in range(1, len(laps)): j = dados.getInicioLaps(i - 1, laps) # Início do lap k = dados.getInicioLaps( i, laps) # Final do lap e início do próximo, na maioria dos casos tempo_total = laps[i][0] - laps[i - 1][0] print( strings.resumoKMLAPS.format( lap, # Km atual "laps", # Km puras.getMinutos(tempo_total), # Minutos puras.getSegundos(tempo_total), # Segundos puras.getMinutos(tempo_total), # Ritmo puras.getCadenciaPassos(passos[j:k + 1], tempo_total), # Cadência puras.getMediaBpm(bpms[j:k + 1], tempo[j:k + 1]), # BPM puras.getGanhoOuPerda( alt[k] - alt[j]), # String com "ganho" ou "perder" puras.getModulo(alt[k] - alt[j])), # Altitude ganho ou perda end="") lap += 1 dados_nao_encontrados(bpms, passos, alt) else: print(strings.sem_laps) print("\n", strings.bordas, "\n")