What am I doing wrong here? hint appreciated
Please post your actual code and a link to the Step instead of a screenshot.
Also, please talk in your own words about how you are stuck and what you have tried
Tell us whatβs happening:
am i placing the x_axis_tick incorrectly? what is wrong here?
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 = [[" " for _ in range(x_max + 1)] for _ in range(y_max + 1)]
for x, y in rounded_coords:
matrix_list[-1 - y][x] = PROJECTILE
matrix_list = [f"{y_axis_tick} " + "".join(line) for line in matrix_list]
x_axis_line = " " * (len(y_axis_tick) + 1) + "".join(x_axis_tick for _ in range(x_max + 1))
matrix_list.append(x_axis_line)
return "\n" + "\n".join(matrix_list) + "\n"
# 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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
Challenge Information:
Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 23
Hi @zmasroor99
Here is a comparison of the original code and your code.
The code in blue is the original code, the code in red is your code.
The code in magenta is the overlap.
You appear to have altered the seed code.
Please reset the step to restore the code and try again.
Happy coding