Beispiel #1
0
    def test_mover_planeta_sentido_antihorario_angulo_ok(self):
        planeta1 = Planeta(nombre="Tierra", angulo=0, distancia=100,
                velocidad=1, sentido=1)
        planeta1.step()
        self.assertEqual(planeta1.pos.phi, 1)
        planeta1.step()
        self.assertEqual(planeta1.pos.phi, 2)
        
        planeta2 = Planeta(nombre="Tierra", angulo=0, distancia=100,
                velocidad=3, sentido=1)
        planeta2.step()
        self.assertEqual(planeta2.pos.phi, 3)
        planeta2.step()
        self.assertEqual(planeta2.pos.phi, 6)

        planeta3 = Planeta(nombre="Tierra", angulo=360, distancia=100,
                velocidad=5, sentido=1)
        planeta3.step()
        self.assertEqual(planeta3.pos.phi, 5)
        planeta3.step()
        self.assertEqual(planeta3.pos.phi, 10)

        planeta4 = Planeta(nombre="Tierra", angulo=90, distancia=100,
                velocidad=5, sentido=1)
        planeta4.step()
        self.assertEqual(planeta4.pos.phi, 95)
        planeta4.step()
        self.assertEqual(planeta4.pos.phi, 100)
Beispiel #2
0
 def test_crear_planeta_angulo_limite_ok(self):
     Planeta(nombre="Tierra", angulo=-360, distancia=100,
             velocidad=1, sentido=1)
     Planeta(nombre="Tierra", angulo=0, distancia=100,
             velocidad=1, sentido=1)
     Planeta(nombre="Tierra", angulo=360, distancia=100,
             velocidad=1, sentido=1)
Beispiel #3
0
    def init_queue(self):

        for i in range(20):
            new = Enemy()
            self.enemy_queue.push(new)

        for i in range(50):
            new = Asteroide()
            self.asteroid_queue.push(new)

        for i in range(100):
            new = Shoot()
            self.bullets_queue.push(new)

        for i in range(10):
            new = Planeta()
            self.planets_queue.push(new)

        for i in range(50):
            new = Explode()
            self.explosion_queue.push(new)

        for i in range(30):
            new = Propellant()
            self.propellant_queue.push(new)

        for i in range(20):
            new = Power_up()
            self.power_queue.push(new)
Beispiel #4
0
    def init_queue(self):

        for i in range(10):
            new = Enemy()
            self.enemy_queue.push(new)

        for i in range(10):
            new = Asteroide()
            self.asteroid_queue.push(new)

        for i in range(50):
            new = Shoot()
            self.bullets_queue.push(new)

        for i in range(3):
            new = Flor()
            self.flowers_queue.push(new)

        for i in range(5):
            new = Planeta()
            self.planets_queue.push(new)

        for i in range(21):
            new = Explode()
            self.explosion_queue.push(new)

        for i in range(11):
            new = Propellant()
            self.propellant_queue.push(new)
 def crear_planeta(self):
     print("Ingrese nombre del planeta (largo mínimo 6): ", end="")
     nombre = fu.pedir_string(6)
     while nombre in Galaxia.planetas:
         print("Ya existe un planeta con este nombre en alguna galaxia",
               "ingrese nuevamente: ",
               end="")
         nombre = fu.pedir_string(6)
     n_raza = fe.pedir_raza()
     raza = None
     if n_raza == 1:
         raza = cl.Aprendiz()
     elif n_raza == 2:
         raza = cl.Maestro()
     elif n_raza == 3:
         raza = cl.Asesino()
     nuevo_planeta = Planeta(raza)
     cantidad_a_poblar = (nuevo_planeta.capacidad * 0.75) // 1
     nuevo_planeta.soldados = int(cantidad_a_poblar)
     self.planetas[nombre] = nuevo_planeta
     Galaxia.planetas[nombre] = (nuevo_planeta, self.nombre)
Beispiel #6
0
def cargar_data(dia_inicio):
    planetas = []
    for record in cargar_planetas():
        planetas.append(
            Planeta(record.nombre, record.angulo, record.distancia,
                    record.velocidad, record.sentido))

    sistema = SistemaSolar(planetas=planetas, dia=dia_inicio)

    min_vel = db.planeta.velocidad.min()
    min_vel = db(db.planeta.id > 0).select(min_vel).first()[min_vel]

    diasporanio = VUELTA_AL_SOL // min_vel

    for i in range(0, diasporanio * ANIOS_PRONOSTICO):
        data = sistema.do_step()
        db.clima_registro.insert(dia=data['dia'], clima=data['estado'])
        for planeta in sistema.planetas:
            db.planeta_posicion.insert(dia=sistema.dia, **planeta.__dict__())

    pronostico = sistema.pronostico_clima()
    db.clima_estadistica.truncate()
    for k, v in pronostico.items():
        db.clima_estadistica.insert(clima=k, valor=v)
Beispiel #7
0
        dphi = phi - phi_anterior
        dt = t - t_anterior

        vel_angular[i - 1] = dphi / dt

        t_anterior = t
        phi_anterior = phi
    vel_angular = np.round(vel_angular, 7)
    return vel_angular


'''--------------------------------------------------------------------------'''

condicion_inicial = np.array([10., 0, 0, VY0])

p = Planeta(condicion_inicial, 10**(-2.844))

t_final = 180. * 30
numero_pasos = 30000 + 1
dt = t_final / (float)(numero_pasos)

x = np.zeros(numero_pasos)
y = np.zeros(numero_pasos)
vx = np.zeros(numero_pasos)
vy = np.zeros(numero_pasos)
r = np.zeros(numero_pasos)

energia = np.zeros(numero_pasos)

perihelio = [[], [], []]
Beispiel #8
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from planeta import Planeta


condicion_inicial = [10, 0, 0, XXX]

p = Planeta(condicion_inicial)

'''
Complete el código a continuación.
'''
Beispiel #9
0
'''
Created on Oct 9, 2019

@author: romina
'''

"""
Programa para probar el pronostico
"""

from planeta import Planeta
from sistema_solar import SistemaSolar

phiv = 0        
phif = 0
phib = 0

vulcanos = Planeta("Vulcanos", phiv, 500, 1, -1)
ferengis = Planeta("Ferengis", phif, 2000, 3, -1)
betasoides = Planeta("Betasoides", phib, 1000, 5, 1)

sistema = SistemaSolar(planetas=(vulcanos, ferengis, betasoides), dia=0)

for _ in range(0, 360*10): # 360 es la cantidad de dias del planeta que mas tarda en dar una vuelta
    sistema.do_step()

print(sistema.pronostico_clima())
Beispiel #10
0
    peri_y = np.array([])
    for i in range(len(x) - 2):
        if x[i + 1]**2 + y[i + 1]**2 >= x[i]**2 + y[i]**2:
            if x[i + 1]**2 + y[i + 1]**2 >= x[i + 2]**2 + y[i + 2]**2:
                peri_x = np.append(peri_x, x[i + 1])
                peri_y = np.append(peri_y, y[i + 1])

    return peri_x, peri_y


#condiciones iniciales
vyo = 0.4  #0.4 para euler y rk4  0.05 para verlet
condicion_inicial = [10., 0., 0., vyo]
alpha = 10**(-2.231)  #231 ultimos 3 digitos antes de verificador

p = Planeta(condicion_inicial,
            alpha)  #agregar o quitar alpha para los casos 2 y 3

#se definen variables a usar
n = 1000000  #numero de pasos a realizar  #10000 sin alpha....100000 con alpha verlet
#   1000000 con alpha euler y rk4
t = np.zeros(n)  #genera vector tiempo a completar
dt = 0.05  #tamanho del paso
x = np.zeros(n)  #genera vector posicion x a completar
y = np.zeros(n)  #genera vector posicion y a completar
E = np.zeros(n)  #genera vector energia total a completar

#se completan las variables para graficar
x, y, t, E = ec_mov(p, t, dt)
peri_x, peri_y = perihelio(x, y)

print 'n orbitas =', len(peri_x)  #identifica numero de orbitaciones
Beispiel #11
0
'''=========================================================
@Autor: Rodrigo Barreto

Objetivo: Módulo criado para testar as funções
do módulo Planeta


========================================================='''
from planeta import Planeta
import json
import planeta as pl

# Teste 1: Listando todos os planetas

p = Planeta()

print("=====================================")
print("Teste 1: Listando todos os planetas:")
print()
pl.showAllPLanets(p)

# Teste 2: Buscando um planeta por nome

print("=====================================")
print("Teste 2: Buscando um planeta por nome")
print("")
namePlanet = "Yavin IV"
planet = pl.getPlanetByName(p, namePlanet)
pl.showPlanet(planet)

print("")
Beispiel #12
0
def orbitar(CI, solucion, prt=True):
    '''
    Esta función  es cool, porque le entregas las condiciones iniciales (CI)
    en forma de x0,y0,vx0,vy0, además de un string con el tipo de solución
    que quieres, como 'euler', 'rk4' o 'verlet' y nos devuelve las coordenadas
    x,y y la energia total del planeta. Además de un ploteo de la órbita, apropi-
    adamente labelado y un ploteo de la energía vs el tiempo.
    La ultima parte es para que plotee, el valor default es que
    plotee (true or false).
    Ejemplo de uso:
        orbitar([10,0,0,0.1],'verlet')
        x=[0,0.1,...]
        y=[0,0.3,...]
        energia=[7,8,...]
    '''
    if solucion == 'euler':
        n = 2500  #grande y dsps se arregla
    if solucion == 'rk4':
        n = 5000  #grande y dsps se arregla
    if solucion == 'verlet':
        n = 800
    Aiur = Planeta(CI)  #se crea el planeta
    if solucion == 'verlet_reloaded':  #caso especial para la ultima parte
        n = 6000
        Aiur = Planeta(CI, alpha=alpha2)  #si es el verlet bkn se parcha
    dt = 1  #error si es muy chico
    tmax = n * dt
    x = []  #listas vacias a llenar
    y = []
    pylon = []  #energia

    x = np.append(x, CI[0])  #llenamos con el primer termino
    y = np.append(y, CI[1])
    pylon = np.append(pylon, Aiur.energia_total())

    for i in range(tmax):  #aca se hace la iteracion del paso
        if solucion == 'euler':
            Aiur.avanza_euler(dt)
        if solucion == 'rk4':
            Aiur.avanza_rk4(dt)
        if solucion == 'verlet' or solucion == 'verlet_reloaded':
            Aiur.avanza_verlet(dt)
        xn, yn, vxn, vyn = Aiur.y_now
        x = np.append(x, xn)
        y = np.append(y, yn)
        pylon = np.append(pylon, Aiur.energia_total())
        times = np.linspace(0, tmax, tmax + 1)
    if prt == True:
        fig1 = plt.figure(1)  #aca se plotea, muy standar
        fig1.clf()
        if solucion == 'euler':
            plt.plot(x, y, 'r', label='Trayectoria metodo Euler')
            plt.title('Trayectoria metodo Euler')
        if solucion == 'rk4':
            plt.plot(x, y, 'r', label='Trayectoria metodo RK4')
            plt.title('Trayectoria metodo RK4')
        if solucion == 'verlet' or solucion == 'verlet_reloaded':
            plt.plot(x, y, 'r', label='Trayectoria metodo Verlet')
            plt.title('Trayectoria metodo Verlet')

        plt.xlabel('X')
        plt.ylabel('Y')
        plt.savefig('verlet_rld.png')
        plt.draw()
        plt.show()

        fig2 = plt.figure(2)
        fig2.clf()
        plt.plot(times, pylon, 'g')
        plt.xlabel('Tiempo')
        plt.ylabel('Energia')
        plt.title('Tiempo vs Energia')
        plt.savefig('verlet_rld_energia.png')
        plt.draw()
        plt.show()
    return x, y, pylon
Beispiel #13
0
import matplotlib.pyplot as plt
import scipy as sp
from planeta import Planeta
import scipy.stats
import numpy as np
'''
PARTE3
Ahora considero el caso alfa no cero, mi rut es 189563752 y se usara verletvelocity para integrar la ecuacion de movimiento.
Luego se determinara la posicion del perihelio y la velocidad angular de precesion. Finalmente se ploteara el grafico de la energia en funcion
del tiempo y de la trayectoria.

'''

vy0 = 0.3
condicion_inicial = sp.array([10, 0, 0, vy0])
p = Planeta(condicion_inicial, 10**(-2.375))
t_final = 180 * 30  #factor 30 por las orbitas
pasos = 40000
dt = t_final / (float)(pasos)

x = sp.zeros(pasos)
y = sp.zeros(pasos)
vx = sp.zeros(pasos)
vy = sp.zeros(pasos)
r = sp.zeros(pasos)
energia = sp.zeros(pasos)
perihelio = [[], [], []]  # se trabajara con dt,dy y dx
''' Condiciones iniciales'''
[x[0], y[0], vx[0], vy[0]] = condicion_inicial
r[0] = sp.sqrt(x[0]**2 + y[0]**2)
energia[0] = p.energia_total()
 nuevo_planeta = {}
 for line in planetas_file:
     datos_planeta = (dato.strip() for dato in
                      line.strip("\n").split(","))
     for dato in orden:
         nuevo_planeta[dato] = datos_planeta.__next__()
     if nuevo_planeta["raza"] == "Aprendiz":
         raza = Aprendiz()
     elif nuevo_planeta["raza"] == "Maestro":
         raza = Maestro()
     elif nuevo_planeta["raza"] == "Asesino":
         raza = Asesino()
     else:
         raise ValueError
     galaxia = game.galaxias[nuevo_planeta["galaxia"]]
     galaxia.planetas[nuevo_planeta["nombre"]] = Planeta(raza)
     planeta = galaxia.planetas[nuevo_planeta["nombre"]]
     planeta.magos = int(nuevo_planeta["magos"])
     planeta.soldados = int(nuevo_planeta["soldados"])
     planeta.tasa_minerales = int(nuevo_planeta["tasa_minerales"])
     planeta.tasa_deuterio = int(nuevo_planeta["tasa_deuterio"])
     planeta.nivel_ataque = int(nuevo_planeta["nivel_ataque"])
     planeta.nivel_economia = int(nuevo_planeta["nivel_economia"])
     if nuevo_planeta["conquistado"] == "True":
         planeta.conquistado = True
         galaxia.planetas_conquistados.add(nuevo_planeta["nombre"])
     if nuevo_planeta["torre"] == "True":
         planeta.torre = Edificio(150, 300, 1000, 2000)
     if nuevo_planeta["cuartel"] == "True":
         planeta.cuartel = Edificio(200, 500, 0, 5000)
     recoleccion = nuevo_planeta["ultima_recoleccion"]
Beispiel #15
0
 def test_crear_planeta_distancia_negativa_ok(self):
     Planeta(nombre="Tierra", angulo=0, distancia=-100,
     velocidad=1, sentido=1)
Este script utiliza la clase Planeta para resolver la órbita de un planeta de
masa 1 kg, orbitando un cuerpo central de masa M = 1.498 x 10^10 kg. El
movimiento es determinado usando el método de Verlet. En este script se añade
el parámetro correspondiente a la corrección relativista para órbitas cercanas
al cuerpo central. Al final se presentan los resultados en forma de gráficos de
la órbita y de la energía en el tiempo.
'''

from planeta import Planeta
import numpy as np
import matplotlib.pyplot as plt

#Solucion a trayectoria
condicion_inicial = [10.0, 0.0, 0.0, 0.3]

Mercury = Planeta(condicion_inicial, 10**(-2.350))
x_pos = [Mercury.y_actual[0]]
y_pos = [Mercury.y_actual[1]]
energia = [Mercury.energia_total()]
dt = 0.01
Mercury.avanza_rk4(dt)
for i in range(600000):
    x_pos.append(Mercury.y_actual[0])
    y_pos.append(Mercury.y_actual[1])
    energia.append(Mercury.energia_total())
    Mercury.avanza_verlet(dt)

x_pos = np.array(x_pos)
y_pos = np.array(y_pos)
energia = np.array(energia)