воскресенье, 7 июня 2015 г.

Начал набрасывать генератор регионов.

   Зато пока сообразил, как сделать, чуть мозг не поломал, но вроде сдвинулось с мертвой точки, тьфу-тьфу-тьфу... Здорово помог MyPaint - редактор графический. Рисовал вручную точки, соединял их линиями, пытался прикинуть, как оно должно работать. Немножко отвлекся, нарисовал картинку, смотрите ниже. Код пока еще страшный, состоит только из генератора списка блоков. Наверное вынесу его в отдельную функцию - пригодится для расчета полей зрения и вообще... Сам класс региона я написал аж в двух вариантах, и оба пойдут в утиль. Еще надо написать определение связанных регионов. Код ниже:




def genRegions(self):
     
        tempRegionList = []
        # пробегаем блоки ландшафта, что бы создать центры роста регионов
        for currentBrick in self.brickList:
            # если блок еще не принадлежит какому-нибудь региону,
            if currentBrick.regions == []:
                currentPos = currentBrick.position
                currentH = currentBrick.h
                # берем индексы блоков, связанных с текущим блоком
                relList = list(currentBrick.relatedList)            
                for i in relList:                  
                    # получаем связанный блок по индексу,
                    addedBrick = self.brickList[i]
                    addedH = addedBrick.h
                    # если этот блок ландшафта уже принадлежит какому-то региону
                    # или разница в высоте слишком большая
                    if addedBrick.regions != [] or abs(addedH-currentH > self.maxH) :
                        # то прописываем в него имя текущего региона                
                        addedBrick.regions.append(currentBrick.index)
                    else:
                        # иначе
                        # то прописываем в него имя текущего региона
                        addedBrick.regions.append(currentBrick.index)  
                        # берем уже у этого блока связанные блоки из его списка
                        for relBrick in addedBrick.relatedList:
                            relPos = self.brickList[relBrick].position
                            relH = self.brickList[relBrick].h
                            # если уже этот блок нам не попадался
                            # и находится на допустимой дистанции
                            # и разница в выстоте не больше допустимой
                            if (relBrick not in relList
                            and self.getDistTo2(currentPos, relPos) < self.regionDist
                            and currentH - relH < self.maxH):
                                # добавляем его индекс в список
                                relList.append(relBrick)
                    print(currentBrick.index, '---', relList)
     
        return 0

Картинка. Сам знаю, что коряво, просто настроение пришло. В большом разрешении смотреть бессмысленно.


Комментариев нет:

Отправить комментарий