Форум сайта python.su
0
Доброго времени суток
Вопрос такой, точнее проблема: немогу понять как работать с несколькими елементами одного класса, которые должны хранится в памяти
В книгах ВСЕ примеры только для одного елемента класа, и даже похожей задачи я не встречал ((((
Например:
Надо сгенерировать 20 сфер (class sphere) с разным размером и раставить их по столу.
class sphere(x, y, size)
1. Генерация координат сферы и ее размер (радиус)
2. Проверка не накладывается новосозданая сфера на предыдущие
Математически растояние между центрами сфер (x1-x2)^2+(y1-y2)^2=L^2
условие L>=R1=R2
Если можна, хотелось бы видеть код с подробным обьяснением.
Заранее спасибо
Офлайн
857
Сфера - это фигура в пространстве.
>>> 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 для этого.
Проверка не накладывается новосозданая сфера на предыдущие
Отредактировано py.user.next (Дек. 20, 2014 12:03:16)
Офлайн
58
Чтобы было явно, то лучше собрать базовый класс, который будет уже работать с объектами (экземплярами Sphere): Класс Table (наследуется от list). Метод append и insert переопределены для определения пересечения сфер.
В качестве элементов на этот класс должны уже передаваться предложенные py.user.next экземпляры класса Sphere.
Офлайн