Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2014 11:25:06

tadej
От: Львов
Зарегистрирован: 2014-12-20
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация нескольких елементов одного класса и работа с ними

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

class sphere(x, y, size)

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

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

Если можна, хотелось бы видеть код с подробным обьяснением.
Заранее спасибо

Офлайн

#2 Дек. 20, 2014 11:50:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Генерация нескольких елементов одного класса и работа с ними

Сфера - это фигура в пространстве.

>>> 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() сделать, хотя он не очень вписывается в общее понятие сферы. (Не всегда нужно со всеми сферами искать их пересечение с другими сферами.)



Отредактировано py.user.next (Дек. 20, 2014 12:03:16)

Офлайн

#3 Дек. 20, 2014 16:04:25

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Генерация нескольких елементов одного класса и работа с ними

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

В качестве элементов на этот класс должны уже передаваться предложенные py.user.next экземпляры класса Sphere.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version