Найти - Пользователи
Полная версия: Генерация нескольких елементов одного класса и работа с ними
Начало » Python для новичков » Генерация нескольких елементов одного класса и работа с ними
1
tadej
Доброго времени суток
Вопрос такой, точнее проблема: немогу понять как работать с несколькими елементами одного класса, которые должны хранится в памяти
В книгах ВСЕ примеры только для одного елемента класа, и даже похожей задачи я не встречал ((((
Например:
Надо сгенерировать 20 сфер (class sphere) с разным размером и раставить их по столу.

class sphere(x, y, size)

1. Генерация координат сферы и ее размер (радиус)
2. Проверка не накладывается новосозданая сфера на предыдущие

Математически растояние между центрами сфер (x1-x2)^2+(y1-y2)^2=L^2
условие L>=R1=R2

Если можна, хотелось бы видеть код с подробным обьяснением.
Заранее спасибо
py.user.next
Сфера - это фигура в пространстве.

>>> class Sphere:
...     def __init__(self, x, y, z, r):
...         self.o = x, y, z
...         self.r = r
...         assert r >= 0
...     
...     def __repr__(self):
...         return '{}<({};{};{}){}>'.format(
...             __class__.__name__,
...             self.o[0], self.o[1], self.o[2],
...             self.r)
...     
...     def center(self):
...         return self.o
...     
...     def radius(self):
...         return self.r
... 
>>> lst = [Sphere(i, i, i, i) for i in range(3)]
>>> lst
[Sphere<(0;0;0)0>, Sphere<(1;1;1)1>, Sphere<(2;2;2)2>]
>>> 
>>> s = lst[1]
>>> s.center(), s.radius()
((1, 1, 1), 1)
>>>

tadej
Проверка не накладывается новосозданая сфера на предыдущие
Просто функцию distance3d() делаешь, которая измеряет расстояние между двумя точками в пространстве, а потом проходишь по всем сферам, передавая их данные в эту функцию. Можно использовать itertools для этого.

Можно и метод intersect() сделать, хотя он не очень вписывается в общее понятие сферы. (Не всегда нужно со всеми сферами искать их пересечение с другими сферами.)
4kpt_II
Чтобы было явно, то лучше собрать базовый класс, который будет уже работать с объектами (экземплярами Sphere): Класс Table (наследуется от list). Метод append и insert переопределены для определения пересечения сфер.

В качестве элементов на этот класс должны уже передаваться предложенные py.user.next экземпляры класса Sphere.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB