Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Мне нужна помощь с кодом на python

ndreii bobrowskij Ученик (82), открыт 1 неделю назад
задать начальные координаты и скорости двух шариков, чтобы после столкновения они разлетелись строго в углы (это на основе примеров sample2)
на библиотеке billiard4 которую я закреплю вместе с sample2
1 ответ
Анонимус Мудрец (14718) 1 неделю назад
 import billiard4 as billiard 
import math

# Константы
WIDTH = 800
HEIGHT = 600
RADIUS = 20

# Класс для шарика
class Ball:
def __init__(self, x, y, vx, vy):
self.x = x
self.y = y
self.vx = vx
self.vy = vy

def move(self):
self.x += self.vx
self.y += self.vy

def draw(self, canvas):
canvas.draw_circle((self.x, self.y), RADIUS, 1, "Red", "Red")

# Функция для обработки столкновения
def handle_collision(ball1, ball2):
# Вычисляем угол столкновения
angle = math.atan2(ball2.y - ball1.y, ball2.x - ball1.x)

# Устанавливаем новые скорости
ball1.vx = math.cos(angle + math.pi / 4) * 5 # Разлетается в угол (45 градусов)
ball1.vy = math.sin(angle + math.pi / 4) * 5

ball2.vx = math.cos(angle - math.pi / 4) * 5 # Разлетается в угол (-45 градусов)
ball2.vy = math.sin(angle - math.pi / 4) * 5

# Основная функция
def main():
# Создаем два шарика с начальными координатами и скоростями
ball1 = Ball(100, 100, 2, 3)
ball2 = Ball(200, 150, -2, -3)

# Создаем холст для рисования
canvas = billiard.Canvas(WIDTH, HEIGHT)

while True:
# Двигаем шарики
ball1.move()
ball2.move()

# Проверка на столкновение
distance = math.sqrt((ball1.x - ball2.x) ** 2 + (ball1.y - ball2.y) ** 2)
if distance < RADIUS * 2:
handle_collision(ball1, ball2)

# Очистка холста и рисование шариков
canvas.clear()
ball1.draw(canvas)
ball2.draw(canvas)

# Обновление холста
canvas.update()

# Запуск основной функции
if __name__ == "__main__":
main()
ndreii bobrowskijУченик (82) 1 неделю назад
а что куда вставить?
я просто плохо разбираюсь и не понимаю половину того что вы мне тут написали
ndreii bobrowskijУченик (82) 1 неделю назад
у меня просто так
Похожие вопросы