01:03 

Заболекарь
Мегакрендель: заколебарь, жаболекарь, зомболекарь, лежебокарь
изображение

URL
Комментарии
2018-08-09 в 10:03 

ez0
Как здорово! а что это?

2018-08-09 в 10:22 

Вилли Шварцкопф
Жертва научной фантастики.
присоединюсь к вопросу! (минутное залипание на гифку привело к мысли, что связи между точками образуется в порядке нарастающей дистанции... по крайней мере, на глаз. и до тех пор, пока каждая точка не будет иметь хотя бы одну связь. но как это называется, я не знаю))

2018-08-09 в 13:45 

Заболекарь
Мегакрендель: заколебарь, жаболекарь, зомболекарь, лежебокарь
ez0, Вилли всё правильно предположил)

Вилли Шварцкопф, да, это действительно в порядке нарастающей дистанции, пока не будет хотя бы одна связь у каждой точки. Это в двух измерениях, а в трёх выглядит так:

изображение

А так для шести (ужато, чтобы пролезло на дайри):

изображение

URL
2018-08-09 в 14:59 

Вилли Шварцкопф
Жертва научной фантастики.
А где такой алгоритм применяется? какая-нибудь хитрая теория графов?

первое мое правильное предположение за пару месяцев... :')

2018-08-09 в 17:58 

Заболекарь
Мегакрендель: заколебарь, жаболекарь, зомболекарь, лежебокарь
Вилли Шварцкопф, хз, мне просто захотелось нарисовать. Алгоритм дуболомный совершенно, для чего-то серьёзного наверняка получше есть. Вот весь код:


from sys import argv
import numpy as np
import matplotlib.pyplot as plt

try:
   name = argv[1]
except:
   print("Please provide a name for the sample")
   exit()

N = 200
STEP = 0.001
try:
   DIMS = int(argv[2])
except:
   print("Invalid dimension number or no dimension number, defaulting to 2")
   DIMS = 2

xy = np.random.uniform(size=(N, DIMS))

connected = set()
connections = set()

# plotting

fig = plt.figure(frameon=False)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.plot(*(xy.T[0:2]), "k.")
ax.set_aspect("equal", "box")

frame_no = 0
max_dist = 0.0
red_circles = [ax.plot(*xy[i][0:2], "ro")[0] for i in range(N)]
changed = True

while len(connected) < N:

   print(f"max_dist = {max_dist:3.3f}")

   for i in range(N):
      for j in range(N):
         if i < j:
            vw = xy[[i,j]]
            v, w = vw
            dist = np.linalg.norm(v-w)
            if dist < max_dist and (i, j) not in connections:
               changed = True
               connected |= {i, j}
               connections |= {(i, j)}
               ax.plot(*(vw.T[0:2]), "k-", alpha=0.25)
               
   for i in connected:
      if red_circles[i] != None:
         red_circles[i].remove()
         red_circles[i] = None

   if changed:
      fig.savefig(f"{name}{frame_no}.png", format="png", bbox_inches="tight")
   
   frame_no += 1
   max_dist += STEP
   changed = False
   
print("Every point is connected to some other point")

URL
2018-08-09 в 18:02 

Заболекарь
Мегакрендель: заколебарь, жаболекарь, зомболекарь, лежебокарь
Вилли Шварцкопф, поделись своей печальной историей с неправильными предположениями.

URL
     

Эх, разум, да ещё разум

главная