def __init__(self): self.tickrate = 60 self.ticks_per_update = 1 self.ticks_passed = 0 self.running = True self.resolution = 10 self.screenSize = Vector(800, 600) self.canvas = None self.boardSize = self.screenSize / self.resolution
def test_print_vel_vector(self): vector = Vector.Vector(6.00, 6.00, -7.00) expected = "The velocity vector of the ball is:\n" + "(6.00, 6.00, -7.00)\n" with patch("sys.stdout", new = StringIO()) as mock_stdout: print_vel_vector(vector) self.assertEqual(mock_stdout.getvalue(), expected)
def get_incidence_angle(vel_vector: Vector): paddle_vector = Vector.Vector(vel_vector.x, vel_vector.y, 0) vector_scale1 = get_vector_scale(vel_vector) vector_scale2 = get_vector_scale(paddle_vector) if (vector_scale1 == 0): return (0.0) scalar_product = vector_scale2 / vector_scale1 return (degrees(acos(scalar_product)))
def test_print_vel_vector(self): ball_coordinates = Vector.Vector(31.00, 33.00, -30.00) t = 4 expected = "At time t + 4, ball coordinates will be:\n" + "(31.00, 33.00, -30.00)\n" with patch("sys.stdout", new = StringIO()) as mock_stdout: print_ball_coordinates(ball_coordinates, t) self.assertEqual(mock_stdout.getvalue(), expected)
def generate_polygon(cord_center_x, cord_center_y, radius): # Array of polygon points arr = [] # Number of polygon vertexes number_of_vertex = random.randrange(3, 10, 1) print('Number of vertexes') print(number_of_vertex) # Average rotation alfa alfa = 2 * pi / number_of_vertex # Rotation error alfa err_alfa = alfa / 100 * 10 # Radius error err_radius = radius / 100 * 10 # Rotation center center_point = Point(cord_center_x, cord_center_y) # First polygon point start_point = Point(get_random_position(radius, err_radius, cord_center_x), cord_center_y) main_vector = Vector(center_point, start_point) # arr.append(Point(round(main_vector.p2.x, 2), round(main_vector.p2.y, 2))) i = 0 while i < number_of_vertex: main_vector.rotate(alfa + err_alfa * random.randrange(-1, 1, 1)) round_x = round(main_vector.p2.x, 2) round_y = round(main_vector.p2.y, 2) point = Point(round_x, round_y) arr.append(point) print('Appended point: ' + str(1 + i)) point.print_point() i += 1 return arr
def get_ball_coordinates(vector_1: Vector, vel_vector: Vector, t: int): ball_coordinates = Vector.Vector(0, 0, 0) ball_coordinates.x = vel_vector.x * (t + 1) + vector_1.x ball_coordinates.y = vel_vector.y * (t + 1) + vector_1.y ball_coordinates.z = vel_vector.z * (t + 1) + vector_1.z return (ball_coordinates)
def get_velocity_vector(vector_1: Vector, vector_2: Vector): velocity_vector = Vector.Vector(0, 0, 0) velocity_vector.x = vector_2.x - vector_1.x velocity_vector.y = vector_2.y - vector_1.y velocity_vector.z = vector_2.z - vector_1.z return (velocity_vector)
from classes import Vector ## импорт необходимых модулей from functions import * Va = Vector() ## создаём экземпляры класса Vector Vb = Vector() i=1 ## устанавливаем флаг while i==1: ## выход из цикла при удачном вводе данных try: Va.X = float(input("\n Xa = ")) ## ввод координаты Х вектора 'а' i+=1 ## увеличиваем значение на 1 для выхода из цикла except Exception as err: ## обработка некорректного ввода данных WriteLogError2(err) ## импортируемая функция записи ошибок в журнал while i==2: ## далее еще 5 аналогичных блоков try except для ввода координат try: Vb.X = float(input("\t\t\t\t Xb = ")) i+=1 except Exception as err: WriteLogError2(err) while i==3: try: Va.Y = float(input("\n Ya = ")) i+=1 except Exception as err: WriteLogError2(err) while i==4: try:
class Game: def __init__(self): self.tickrate = 60 self.ticks_per_update = 1 self.ticks_passed = 0 self.running = True self.resolution = 10 self.screenSize = Vector(800, 600) self.canvas = None self.boardSize = self.screenSize / self.resolution def gameLoop(self): while self.running: self.ticks_passed += 1 for event in pygame.event.get(): self.on_event(event) if self.ticks_passed >= self.ticks_per_update: self.ticks_passed = 0 if not self.tick(): self.running = False self.render() pygame.display.update() self.clock.tick(self.tickrate) def on_event(self, event) -> None: if event.type == QUIT: self.running = False if event.type == KEYDOWN: self.on_key(event.key) if event.type == MOUSEBUTTONDOWN: self.on_mouse(event.pos) def on_key(self, key) -> None: if key == K_SPACE: self.board.change() if key == K_ESCAPE: self.running = False if key == K_t: self.board.force_update() if key == K_c: self.board.killall() def on_mouse(self, pos: tuple) -> None: x, y = pos x = floor(x / self.resolution) y = floor(y / self.resolution) self.board.update_dot((x, y)) def tick(self) -> bool: return self.board.update() def render(self) -> None: self.canvas.fill((255, 255, 255)) self.board.draw(self.canvas, self.resolution) def run(self) -> None: pygame.init() self.canvas = pygame.display.set_mode(self.screenSize.as_tuple()) pygame.display.set_caption('Conway Game of Life') self.clock = pygame.time.Clock() self.board = Board(self.boardSize) self.gameLoop() pygame.quit()
def scalar(p1, p2, p3, p4): line1 = Vector(p1, p2) line2 = Vector(p3, p4) return line1.x * line2.x + line1.y * line2.y
print_description() exit(MY_EXIT_SUCCESS) if (len(argv) != NB_ARGS): print(INVALID_NB_ARGS_MSG, file = stderr) exit(MY_EXIT_FAILURE) try: x0 = float(argv[1]) y0 = float(argv[2]) z0 = float(argv[3]) x1 = float(argv[4]) y1 = float(argv[5]) z1 = float(argv[6]) n = int(argv[7]) except ValueError: print(INCORRECT_TYPE_MSG, file = stderr) exit(MY_EXIT_FAILURE) if (n < 0): print(NEG_N_MSG, file = stderr) exit(MY_EXIT_FAILURE) vector_1 = Vector.Vector(x0, y0, z0) vector_2 = Vector.Vector(x1, y1, z1) vel_vector = get_velocity_vector(vector_1, vector_2) ball_coordinates = get_ball_coordinates(vector_1, vel_vector, n) incidence_angle = get_incidence_angle(vel_vector) ball_reach = ball_reach_paddle(vector_2.z, vector_2.z + vel_vector.z) print_vel_vector(vel_vector) print_ball_coordinates(ball_coordinates, n) print_incidence_angle(ball_reach, incidence_angle)