У меня есть список словаря, который представляет центр и радиус окружности.
[{centre:(743,1105), radius: 41},
{centre:(743, 1106), radius: 48},
{centre:(899, 1443), radius: 48},
{centre:(900, 1442), radius: 40}]
Я хочу удалить замкнутые круги, основываясь на положении оси x.Если разность оси x двух окружностей больше 0 и меньше 3, будет удален тот, чей радиус больше.
def takeXAxis(input):
return input['centre'][0]
def sortCircles(circleDetails):
circleDetails.sort(key=takeXAxis)
def removeClosedCircle(circleDetails):
newCircleDetails = []
for i in range(len(circleDetails)):
j = i + 1
for j in range(len(circleDetails)):
...
Я очень плохо знаком с Python и не знаю, какзакончите это.
Добавлено
Это результат, который я надеюсь получить:
[{centre:(743,1105), radius: 41},
{centre:(900, 1442), radius: 40}]
Каждый элемент будет сравниваться.Например:
0 <= | 743 - 743 | <= 3, 48> 41, поэтому второй будет удален.
| 743 - 899 |> = 3, | 743 - 900 |> = 3, здесь ничего не произойдет.
0 <= | 899 - 900 | <= 3, 48> 40, поэтому третий будет удален.
Обновлено
Это решение, которое я придумала.Но это очень медленно.Кто-нибудь знает, как его оптимизировать?
def takeXAxis(input):
return input['centre'][0]
def removeaAdjacentCircle(circleDetails):
circleDetails.sort(key=takeXAxis)
newCircleDetails = []
indexOfRemovedCircle = []
for i in range(0, len(circleDetails)):
if i in indexOfRemovedCircle:
continue
for j in range(i + 1, len(circleDetails)):
delta = abs(circleDetails[i]['centre'][0] - circleDetails[j]['centre'][0])
if 0 <= delta <= 3:
if circleDetails[i]['radius'] - circleDetails[j]['radius'] >= 0:
indexOfRemovedCircle.append(i)
else:
indexOfRemovedCircle.append(j)
for i in range(0, len(circleDetails)):
if i in indexOfRemovedCircle:
continue
newCircleDetails.append(circleDetails[i])
return newCircleDetails