Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 17

Tell us what’s happening:

i have a question in this project, do we use this function and graph to make calculations?? i don’t know the role the graph plays here is it to represent the velocity against time?

Your code so far

import math

GRAVITATIONAL_ACCELERATION = 9.81
PROJECTILE = "∙"
x_axis_tick = "T"
y_axis_tick = "⊣"

class Projectile:
    __slots__ = ('__speed', '__height', '__angle')

    def __init__(self, speed, height, angle):
        self.__speed = speed
        self.__height = height
        self.__angle = math.radians(angle)
        
    def __str__(self):
        return f'''
Projectile details:
speed: {self.speed} m/s
height: {self.height} m
angle: {self.angle}°
displacement: {round(self.__calculate_displacement(), 1)} m
'''

    def __calculate_displacement(self):
        horizontal_component = self.__speed * math.cos(self.__angle)
        vertical_component = self.__speed * math.sin(self.__angle)
        squared_component = vertical_component**2
        gh_component = 2 * GRAVITATIONAL_ACCELERATION * self.__height
        sqrt_component = math.sqrt(squared_component + gh_component)
        
        return horizontal_component * (vertical_component + sqrt_component) / GRAVITATIONAL_ACCELERATION
        
    def __calculate_y_coordinate(self, x):
        height_component = self.__height
        angle_component = math.tan(self.__angle) * x
        acceleration_component = GRAVITATIONAL_ACCELERATION * x ** 2 / (
                2 * self.__speed ** 2 * math.cos(self.__angle) ** 2)
        y_coordinate = height_component + angle_component - acceleration_component

        return y_coordinate
    
    def calculate_all_coordinates(self):
        return [
            (x, self.__calculate_y_coordinate(x))
            for x in range(math.ceil(self.__calculate_displacement()))
        ]

    @property
    def height(self):
        return self.__height

    @property
    def angle(self):
        return round(math.degrees(self.__angle))

    @property
    def speed(self):
        return self.__speed

    @height.setter
    def height(self, n):
        self.__height = n

    @angle.setter
    def angle(self, n):
        self.__angle = math.radians(n)

    @speed.setter
    def speed(self, s):
       self.__speed = s
    
    def __repr__(self):
        return f'{self.__class__}({self.speed}, {self.height}, {self.angle})'

class Graph:
    __slots__ = ('__coordinates')

    def __init__(self, coord):
        self.__coordinates = coord

    def __repr__(self):
        return f"Graph({self.__coordinates})"

    def create_coordinates_table(self):
        table = '\n  x      y\n'
        for x, y in self.__coordinates:
            table += f'{x:>3}{y:>7.2f}\n'

        return table


# User Editable Region

    def create_trajectory(self):
        
        rounded_coords = [(round(x), round(y)) for x,y in self.__coordinates]
        
        x_max = max(rounded_coords, key=lambda i: i[0])[0]
        y_max = max(rounded_coords, key=lambda j: j[1])[1]
        matrix_list = []
        return x_max, y_max
        
        

# User Editable Region


ball = Projectile(10, 3, 45)
print(ball)
coordinates = ball.calculate_all_coordinates()
graph = Graph(coordinates)
print(graph.create_trajectory())
   

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36

Challenge Information:

Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 17

the graph will be the trajectory, distance travelled on the x and height on the y

this is the only thing i can come up with, i am struggling to understand the whole external list part create a list of lists where the external list contains y_max +1 lists, each with inside x_max +1 elements, i have researched but i cannot find anything that helps solve it i have been told that the external list is the variable of the list which would be matrix_list but then if the external list was the variable the sentence wouldn’t make sense

why it wouldn’t make sense? you should have a list of lists where matrix_list contains y_max+1 lists, and each of those list x_max+1 elements

oh okay i read that wrong, what does the +1 mean? does it mean add an element? or list

it’s the number of elements. You have y_max that is an integer number but you need to have y_max+1 lists in there

so like this then?

matrix_list = [
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],  
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13],
            [0, 1, 2,4,5,6,7,8,9,10,11, 12,13]

something like that, yes, the number of items has to be programmatically determined (you can’t hardcode the numbers), and you need to follow the instructions on what to put inside them