Я пытался упаковать в многоугольник как можно больше кругов. Найдя эту упаковку контролируемого круга с помощью Python,
я подумал, что было бы полезно изменить функцию checkBorders на ту, которая подходит лучше.
Я попробовал решить эту проблему, используя физику и силы: когда мяч пересекает конец, мы находим нормаль этого края и отскакиваем мяч назад под тем же углом.
Однако мой код, похоже, вообще не работает, может кто-нибудь помочь с этим?
Спасибо!
Это то, что у меня есть на данный момент
def checkBorders(self, ball):
pointy = Point(ball.x, ball.y)
polygon = Polygon(self.POLY)
is_inside = polygon.contains(pointy)
if not is_inside:
min_distance = float('inf')
closest_edge = None
for i in range(len(self.POLY)):
p1, p2 = np.array(self.POLY), np.array(self.POLY[(i + 1) % len(self.POLY)])
edge = p2 - p1
edge_normalized = self._normalize(edge)
ball_to_p1 = np.array(ball.position) - p1 ####
projection = np.dot(ball_to_p1, edge_normalized) * edge_normalized
distance = np.linalg.norm(ball_to_p1 - projection)
if distance < min_distance:
min_distance, closest_edge = distance, (p1, p2)
normal = np.array([closest_edge[1][1] - closest_edge[0][1],
closest_edge[0][0] - closest_edge[1][0]])
normal = self._normalize(normal) # Normalize the edge normal
# Calculate the reflection vector
dot_product = np.dot(ball.velocity, normal)
ball.velocity = ball.velocity - 2 * dot_product * normal
ball.update()
Подробнее здесь: https://stackoverflow.com/questions/787 ... ar-polygon
Как сделать упаковку кругов в неправильном многоугольнике ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как организовать минификацию и упаковку css и js файлов для ускорения сайта?
Anonymous » » в форуме CSS - 0 Ответы
- 9 Просмотры
-
Последнее сообщение Anonymous
-