102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481

Группировка точек

21.06.2021, 09:11. Показов 13156. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Есть 3D карта допустим гор, я её обрезаю по высоте и получаю координаты вершин гор. И хочу решить такую задачу.

Вход - массив вида:
Python
1
2
3
list_coord = [[1, 1, 1], [2, 1, 1], [1, 1, 1], [12, 11, 11],
              [1, 2, 2], [7, 6, 6], [13, 12, 12],
              [11, 13, 13], [6, 6, 6], [6, 7, 7], [8, 8, 8]]
Выход - количество вершин гор
Python
1
2
3
dct = [{'Объект 1': [[1, 1, 1], [2, 1, 1], [1, 1, 1], [1, 2, 2]]}, 
       {'Объект 2': [[7, 6, 6], [6, 6, 6], [6, 7, 7], [7, 6, 7]]}, 
       {'Объект 3': [[12, 11, 11], [11, 13, 13], [13, 12, 12]]}]

Все вершины разделены между собой как минимум кругом пустоты радиусом 5-10 точек

Мои мысли
Запустить цикл по list_coord, и если точка не находится в диапазоне +- 3 то добавляем её в новый массив, в итоге на выходе должен был быть массив с тремя координатами, но что то не получается доделать логику

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
count_point =[list_coord[0]]
 
for i in list_coord:
 
    for j in count_point:
        x, y = j[0], j[1]
        x_min, x_max = i[0] - 3, i[0] + 3
        y_min, y_max = i[1] - 3, i[1] + 3
 
        if not (x_min < x < x_max and y_min < y < y_max) and i not in count_point:
            count_point.append(i)
            
 
print(count_point)
>> [[1, 1, 1], [12, 11, 11], [11, 13, 13], [13, 12, 12], [7, 6, 6], [6, 6, 6], [6, 7, 7], [8, 8, 8]]
Тут ошибка в том что первый раз он добавляет [1, 1, 1], дальше всё ок, похожие массивы он пропускает, потом добавляет [12, 11, 11] и начинает заново сравнивать list_coord с count_point[0] и соответственно записывает все остальные значения массива, как это можно исправить?

Не по теме:

p.s. формулировки мыслей конечно ужасные если что спрашивайте

0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2021, 09:11
Ответы с готовыми решениями:

Даны действительные числа (xi, yi), i = 1,2, . n - координаты точек на плоскости. Определить количество точек, попада
Даны действительные числа (xi, yi), i = 1,2, ... n - координаты точек на плоскости. Определить количество точек, попадающих в...

Группировка + сложение
Доброго всем дня господа ) возможно как то сгруппировать одинаковые элементы по названию (индексу в подсписке) и сложить их значения по...

Группировка файлов
main.py: import Collections S = Collections.CStack() for i in range(0, 10): S.push(i) S.println() for i in range(0,...

58
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
23.06.2021, 13:17
Лучший ответ Сообщение было отмечено u235 как решение

Решение

Студворк — интернет-сервис помощи студентам
RSAX, нет, тут сетка нерегулярная. Нужна триангуляция.

Добавлено через 5 часов 44 минуты
RSAX, Вот код, который строит триангулированые сетки по вашим данным:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import matplotlib.pyplot as plt
import matplotlib.tri as tri
 
 
t=[[0.0789702838086786, 0.026726748654913795, -0.33899998664855957],[0.07952999876630526, 0.026726748654913795, -0.33899998664855957],[0.07985346391344544, 0.02664790970030836, -0.33799999952316284],[0.08041152781569287, 0.02664790970030836, -0.33799999952316284],[0.0809695917179403, 0.02664790970030836, -0.33799999952316284],[0.0789702838086786, 0.026166138141604005, -0.33899998664855957],[0.07929540001119802, 0.026088952884101083, -0.33799999952316284],[0.07961721410295897, 0.02601176762659816, -0.3370000123977661],[0.08017362694982716, 0.02601176762659816, -0.3370000123977661],[0.08049048073615488, 0.025934580068765693, -0.335999995470047],[0.0810452424784379, 0.025934580068765693, -0.335999995470047],[0.08160000422072093, 0.025934580068765693, -0.335999995470047],[0.07929540001119802, 0.025529996067893804, -0.33799999952316284],[0.07961721410295897, 0.025454464507493394, -0.3370000123977661],[0.08017362694982716, 0.025454464507493394, -0.3370000123977661],[0.08049048073615488, 0.025378930696048088, -0.335999995470047],[0.0810452424784379, 0.025378930696048088, -0.335999995470047],[0.08160000422072093, 0.025378930696048088, -0.335999995470047],[0.025088755109876883, -0.10439716224391743, -0.3370000123977661],[0.02564516795674507, -0.10439716224391743, -0.3370000123977661],[0.02620158080361325, -0.10439716224391743, -0.3370000123977661],[0.026757993650481437, -0.10439716224391743, -0.3370000123977661],[0.02731440649734962, -0.10439716224391743, -0.3370000123977661],[0.027870819344217805, -0.10439716224391743, -0.3370000123977661],[0.02842723219108599, -0.10439716224391743, -0.3370000123977661],[0.028983645037954173, -0.10439716224391743, -0.3370000123977661],[0.02954005788482236, -0.10439716224391743, -0.3370000123977661],[0.030096470731690545, -0.10439716224391743, -0.3370000123977661],[0.030652883578558728, -0.10439716224391743, -0.3370000123977661],[0.031209296425426913, -0.10439716224391743, -0.3370000123977661],[0.0317657092722951, -0.10439716224391743, -0.3370000123977661],[0.032322122119163285, -0.10439716224391743, -0.3370000123977661],[0.032878534966031464, -0.10439716224391743, -0.3370000123977661],[0.03343494781289965, -0.10439716224391743, -0.3370000123977661],[0.033991360659767836, -0.10439716224391743, -0.3370000123977661],[0.03454777350663602, -0.10439716224391743, -0.3370000123977661],[0.03510418635350421, -0.10439716224391743, -0.3370000123977661],[0.035660599200372387, -0.10439716224391743, -0.3370000123977661],[0.03621701204724057, -0.10439716224391743, -0.3370000123977661],[0.03677342489410876, -0.10439716224391743, -0.3370000123977661],[0.037329837740976944, -0.10439716224391743, -0.3370000123977661],[0.03788625058784513, -0.10439716224391743, -0.3370000123977661],[0.02635707779177199, -0.10557733248619632, -0.33899998664855957],[0.026916792749398656, -0.10557733248619632, -0.33899998664855957],[0.027395457102187472, -0.10526589892460925, -0.33799999952316284],[0.0279535210044349, -0.10526589892460925, -0.33799999952316284],[0.028511584906682323, -0.10526589892460925, -0.33799999952316284],[0.028983645037954173, -0.10495446536302219, -0.3370000123977661],[0.02954005788482236, -0.10495446536302219, -0.3370000123977661],[0.0301857766134246, -0.10526589892460925, -0.33799999952316284],[0.030652883578558728, -0.10495446536302219, -0.3370000123977661],[0.031209296425426913, -0.10495446536302219, -0.3370000123977661],[0.0317657092722951, -0.10495446536302219, -0.3370000123977661],[0.032322122119163285, -0.10495446536302219, -0.3370000123977661],[0.032878534966031464, -0.10495446536302219, -0.3370000123977661],[0.03343494781289965, -0.10495446536302219, -0.3370000123977661],[0.033991360659767836, -0.10495446536302219, -0.3370000123977661],[0.03454777350663602, -0.10495446536302219, -0.3370000123977661],[0.03510418635350421, -0.10495446536302219, -0.3370000123977661],[0.035660599200372387, -0.10495446536302219, -0.3370000123977661],[0.03621701204724057, -0.10495446536302219, -0.3370000123977661],[0.03677342489410876, -0.10495446536302219, -0.3370000123977661],[0.02635707779177199, -0.1061379429995061, -0.33899998664855957],[0.026916792749398656, -0.1061379429995061, -0.33899998664855957],[0.027395457102187472, -0.10582485574081653, -0.33799999952316284],[0.0279535210044349, -0.10582485574081653, -0.33799999952316284],[0.028511584906682323, -0.10582485574081653, -0.33799999952316284],[0.028983645037954173, -0.10551176848212696, -0.3370000123977661],[0.02954005788482236, -0.10551176848212696, -0.3370000123977661],[0.0301857766134246, -0.10582485574081653, -0.33799999952316284],[0.030652883578558728, -0.10551176848212696, -0.3370000123977661],[0.031209296425426913, -0.10551176848212696, -0.3370000123977661],[0.0317657092722951, -0.10551176848212696, -0.3370000123977661],[0.032322122119163285, -0.10551176848212696, -0.3370000123977661],[0.032878534966031464, -0.10551176848212696, -0.3370000123977661],[0.03343494781289965, -0.10551176848212696, -0.3370000123977661],[0.033991360659767836, -0.10551176848212696, -0.3370000123977661],[0.03454777350663602, -0.10551176848212696, -0.3370000123977661],[0.03510418635350421, -0.10551176848212696, -0.3370000123977661],[0.035660599200372387, -0.10551176848212696, -0.3370000123977661],[0.03621701204724057, -0.10551176848212696, -0.3370000123977661],[0.03677342489410876, -0.10551176848212696, -0.3370000123977661],[0.030743840515672024, -0.10638381255702381, -0.33799999952316284],[0.03130190441791945, -0.10638381255702381, -0.33799999952316284],[0.031859968320166875, -0.10638381255702381, -0.33799999952316284],[0.0324180322224143, -0.10638381255702381, -0.33799999952316284],[0.03297609612466172, -0.10638381255702381, -0.33799999952316284],[0.03343494781289965, -0.10606907160123173, -0.3370000123977661],[0.033991360659767836, -0.10606907160123173, -0.3370000123977661],[0.03454777350663602, -0.10606907160123173, -0.3370000123977661],[0.03510418635350421, -0.10606907160123173, -0.3370000123977661]]
t=np.array(t)
points=t[:,:2]
x = points[:, 0]
y =points[:, 1]
triang = tri.Triangulation(x, y)
fig1, ax1 = plt.subplots()
ax1.set_aspect('equal')
 
max_radius = 0.02
triangles = triang.triangles
 
 
xtri = x[triangles] - np.roll(x[triangles], 1, axis=1)
ytri = y[triangles] - np.roll(y[triangles], 1, axis=1)
maxi = np.max(np.sqrt(xtri**2 + ytri**2), axis=1)
triang.set_mask(maxi > max_radius)
 
ax1.triplot(triang, color="red")
plt.show()



Дальше осталось прикрутить что-то типа:

scipy.sparse.csgraph.connected_component s()
для вычисления числа кластеров.

Не по теме:

p.s. Как снять отметку "решение"? случайно нажал..

1
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
23.06.2021, 13:30  [ТС]

Не по теме:

u235, ваш ответ близок к решению, пусть остаётся отметка)


Спасибо большое за код, уже час искал ответ!
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
23.06.2021, 13:34  [ТС]
u235, из скрина №1 3D получилось вот такое, я правильно понял что это некий перевод из 3D в 2D и связывание точек в треугольники с условием что связанная точка лежит в радиусе 0.02?
Миниатюры
Группировка точек   Группировка точек  
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
23.06.2021, 13:59  [ТС]
u235, а DBSCAN хорошая идея использовать? В scipy.sparse.csgraph.connected_component s() я что передаю, точки triang.x и .y или triang.triangles?

Тут просто массив NxN размера должен быть как я понимаю

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from scipy.sparse import csr_matrix
from scipy.sparse.csgraph import connected_components
 
graph = [[0, 1, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1], [0, 0, 0, 0, 0]]
graph = csr_matrix(graph)
print(graph)
 
  (0, 1)    1
  (0, 2)    1
  (1, 2)    1
  (3, 4)    1
 
n_components, labels = connected_components(csgraph=graph, directed=False, return_labels=True)
 
n_components >> 2
labels >> array([0, 0, 0, 1, 1], dtype=int32)
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
23.06.2021, 14:03
По первому посту - да, все верно.
По поводу DBSCAN - это не совсем то, мне кажется, это более ресурсоемкое решение.
может что-то еще есть в networkx.

Добавлено через 4 минуты
RSAX, для экономии памяти лучше использовать разреженные матрицы, а не полные NxN
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
24.06.2021, 08:24
RSAX, вот что получилось:
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.tri import Triangulation
import scipy as sp
 
 
coord=[[0.0789702838086786, 0.026726748654913795, -0.33899998664855957],[0.07952999876630526, 0.026726748654913795, -0.33899998664855957],[0.07985346391344544, 0.02664790970030836, -0.33799999952316284],[0.08041152781569287, 0.02664790970030836, -0.33799999952316284],[0.0809695917179403, 0.02664790970030836, -0.33799999952316284],[0.0789702838086786, 0.026166138141604005, -0.33899998664855957],[0.07929540001119802, 0.026088952884101083, -0.33799999952316284],[0.07961721410295897, 0.02601176762659816, -0.3370000123977661],[0.08017362694982716, 0.02601176762659816, -0.3370000123977661],[0.08049048073615488, 0.025934580068765693, -0.335999995470047],[0.0810452424784379, 0.025934580068765693, -0.335999995470047],[0.08160000422072093, 0.025934580068765693, -0.335999995470047],[0.07929540001119802, 0.025529996067893804, -0.33799999952316284],[0.07961721410295897, 0.025454464507493394, -0.3370000123977661],[0.08017362694982716, 0.025454464507493394, -0.3370000123977661],[0.08049048073615488, 0.025378930696048088, -0.335999995470047],[0.0810452424784379, 0.025378930696048088, -0.335999995470047],[0.08160000422072093, 0.025378930696048088, -0.335999995470047],[0.025088755109876883, -0.10439716224391743, -0.3370000123977661],[0.02564516795674507, -0.10439716224391743, -0.3370000123977661],[0.02620158080361325, -0.10439716224391743, -0.3370000123977661],[0.026757993650481437, -0.10439716224391743, -0.3370000123977661],[0.02731440649734962, -0.10439716224391743, -0.3370000123977661],[0.027870819344217805, -0.10439716224391743, -0.3370000123977661],[0.02842723219108599, -0.10439716224391743, -0.3370000123977661],[0.028983645037954173, -0.10439716224391743, -0.3370000123977661],[0.02954005788482236, -0.10439716224391743, -0.3370000123977661],[0.030096470731690545, -0.10439716224391743, -0.3370000123977661],[0.030652883578558728, -0.10439716224391743, -0.3370000123977661],[0.031209296425426913, -0.10439716224391743, -0.3370000123977661],[0.0317657092722951, -0.10439716224391743, -0.3370000123977661],[0.032322122119163285, -0.10439716224391743, -0.3370000123977661],[0.032878534966031464, -0.10439716224391743, -0.3370000123977661],[0.03343494781289965, -0.10439716224391743, -0.3370000123977661],[0.033991360659767836, -0.10439716224391743, -0.3370000123977661],[0.03454777350663602, -0.10439716224391743, -0.3370000123977661],[0.03510418635350421, -0.10439716224391743, -0.3370000123977661],[0.035660599200372387, -0.10439716224391743, -0.3370000123977661],[0.03621701204724057, -0.10439716224391743, -0.3370000123977661],[0.03677342489410876, -0.10439716224391743, -0.3370000123977661],[0.037329837740976944, -0.10439716224391743, -0.3370000123977661],[0.03788625058784513, -0.10439716224391743, -0.3370000123977661],[0.02635707779177199, -0.10557733248619632, -0.33899998664855957],[0.026916792749398656, -0.10557733248619632, -0.33899998664855957],[0.027395457102187472, -0.10526589892460925, -0.33799999952316284],[0.0279535210044349, -0.10526589892460925, -0.33799999952316284],[0.028511584906682323, -0.10526589892460925, -0.33799999952316284],[0.028983645037954173, -0.10495446536302219, -0.3370000123977661],[0.02954005788482236, -0.10495446536302219, -0.3370000123977661],[0.0301857766134246, -0.10526589892460925, -0.33799999952316284],[0.030652883578558728, -0.10495446536302219, -0.3370000123977661],[0.031209296425426913, -0.10495446536302219, -0.3370000123977661],[0.0317657092722951, -0.10495446536302219, -0.3370000123977661],[0.032322122119163285, -0.10495446536302219, -0.3370000123977661],[0.032878534966031464, -0.10495446536302219, -0.3370000123977661],[0.03343494781289965, -0.10495446536302219, -0.3370000123977661],[0.033991360659767836, -0.10495446536302219, -0.3370000123977661],[0.03454777350663602, -0.10495446536302219, -0.3370000123977661],[0.03510418635350421, -0.10495446536302219, -0.3370000123977661],[0.035660599200372387, -0.10495446536302219, -0.3370000123977661],[0.03621701204724057, -0.10495446536302219, -0.3370000123977661],[0.03677342489410876, -0.10495446536302219, -0.3370000123977661],[0.02635707779177199, -0.1061379429995061, -0.33899998664855957],[0.026916792749398656, -0.1061379429995061, -0.33899998664855957],[0.027395457102187472, -0.10582485574081653, -0.33799999952316284],[0.0279535210044349, -0.10582485574081653, -0.33799999952316284],[0.028511584906682323, -0.10582485574081653, -0.33799999952316284],[0.028983645037954173, -0.10551176848212696, -0.3370000123977661],[0.02954005788482236, -0.10551176848212696, -0.3370000123977661],[0.0301857766134246, -0.10582485574081653, -0.33799999952316284],[0.030652883578558728, -0.10551176848212696, -0.3370000123977661],[0.031209296425426913, -0.10551176848212696, -0.3370000123977661],[0.0317657092722951, -0.10551176848212696, -0.3370000123977661],[0.032322122119163285, -0.10551176848212696, -0.3370000123977661],[0.032878534966031464, -0.10551176848212696, -0.3370000123977661],[0.03343494781289965, -0.10551176848212696, -0.3370000123977661],[0.033991360659767836, -0.10551176848212696, -0.3370000123977661],[0.03454777350663602, -0.10551176848212696, -0.3370000123977661],[0.03510418635350421, -0.10551176848212696, -0.3370000123977661],[0.035660599200372387, -0.10551176848212696, -0.3370000123977661],[0.03621701204724057, -0.10551176848212696, -0.3370000123977661],[0.03677342489410876, -0.10551176848212696, -0.3370000123977661],[0.030743840515672024, -0.10638381255702381, -0.33799999952316284],[0.03130190441791945, -0.10638381255702381, -0.33799999952316284],[0.031859968320166875, -0.10638381255702381, -0.33799999952316284],[0.0324180322224143, -0.10638381255702381, -0.33799999952316284],[0.03297609612466172, -0.10638381255702381, -0.33799999952316284],[0.03343494781289965, -0.10606907160123173, -0.3370000123977661],[0.033991360659767836, -0.10606907160123173, -0.3370000123977661],[0.03454777350663602, -0.10606907160123173, -0.3370000123977661],[0.03510418635350421, -0.10606907160123173, -0.3370000123977661]]
coord=np.array(coord)
points=coord[:,:2]
x = points[:, 0]
y =points[:, 1]
triang = Triangulation(points[:, 0], points[:, 1]) #триангуляция набора точек
 
max_radius = 0.02 # максимальное расстояние, cut off
triangles = triang.triangles
xtri = x[triangles] - np.roll(x[triangles], 1, axis=1)
ytri = y[triangles] - np.roll(y[triangles], 1, axis=1)
maxi = np.max(np.sqrt(xtri**2 + ytri**2), axis=1) #максимальная длина стороны треугольника
triang.set_mask(maxi > max_radius) #фильтрация треугольников по длине стороны
num_nodes=np.max(triang.edges)+1 # число вершин
 
graph=sp.sparse.csr_matrix((np.ones(triang.edges.shape[0]),(triang.edges[:,0],triang.edges[:,1])), shape=(num_nodes,num_nodes))
n, labels=sp.sparse.csgraph.connected_components(graph.toarray(), directed=False)
 
fig1, ax1 = plt.subplots()
ax1.set_aspect('equal')
 
for i in range(n):
    ax1.scatter(triang.x[labels==i], triang.y[labels==i], s=0.5)
    print(f'Компонент {i}: \n x,y={triang.x[labels==i], triang.y[labels==i]}')
plt.show()
Миниатюры
Группировка точек  
1
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
25.06.2021, 10:44  [ТС]
u235, Такой ещё вопрос, просто алгоритм интересен, без кода, что я могу сделать с исходным массивом облака точек, чтобы хоть как то разграничить объекты и подготовить их к кластеризации?

На скринах площадь 70х50см, на ней лежат допустим яблоки, использовать визуализацию нельзя, поэтому opencv вряд ли поможет
Миниатюры
Группировка точек   Группировка точек   Группировка точек  

Группировка точек   Группировка точек   Группировка точек  

Группировка точек   Группировка точек   Группировка точек  

0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
25.06.2021, 10:48  [ТС]
По оси Z просто отрезать не получается так чтобы остались только верхушки объектов, потому что если камера наклонена хоть на 1 см отрезается слишком много у объектов по краям
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
25.06.2021, 11:12
RSAX, я бы перевел сначала все на регулярную сетку, т.е. получил картинку. Отфильтровал шумы и выполнил поиск локальных максимумов cv2.minMaxLoc() или что-то подобное. OpenCV прекрасно работает и без визуализации, например, у меня на телефоне из консоли Termux.
Если надо будет разделять уже бинаризированные объекты, то есть Watershed segmentation
см. https://scikit-image.org/docs/... tershed-py
Если надо выровнять "освещение", то см. функцию imclearborder из Matlab/Octave (использует морфологию, можно сделать аналог в OpenCV) , нужно просто поделить изображение на оценку фона (размытое изображение или после imclearborder)
2
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
25.06.2021, 14:18  [ТС]
u235, а я вот чего придумал, а если брать максимум массива, делать запись - кластер 1, далее удалять все точки вокруг него в радиусе который мне нужен и снова искать максимум?
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
25.06.2021, 17:05
RSAX, да, можно и так. Можно просто поиск локальных максимумов в numpy/scipy

Добавлено через 1 час 27 минут
См. функции scipy.signal.find_peaks и scipy.signal.argrelmax для поиска локальных максимумов.
1
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
02.07.2021, 11:16  [ТС]
u235, Можешь глянуть если есть время иерархическую кластеризацию, вот такой вот код, работает почти в 10 раз быстрее

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy
import scipy.cluster.hierarchy as hcluster
 
data = [[i[0], i[1]] for i in arr]
 
# clustering
thresh = 0.05
clusters = hcluster.fclusterdata(data, thresh, criterion="distance")
 
# plotting
plt.scatter(*numpy.transpose(data), c=clusters)
plt.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
plt.title(title)
plt.show()
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
02.07.2021, 11:30  [ТС]
Осталась наверное последняя проблема разделить вот такой 1 объект на 3
Миниатюры
Группировка точек   Группировка точек  
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
02.07.2021, 15:06
RSAX, вот пример сегментации. https://scikit-image.org/docs/... tershed-py
Но если бы вы нашли локальные максимумы, подобная сегментация возможно и не потребовалась бы.
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
02.07.2021, 16:05  [ТС]
u235, утром смотрел данный пример(даже вкладка открыта XD), но так и не понял как туда 2D массив закинуть, вместо np.logical_or(mask_circle1, mask_circle2), что за тип ему нужен
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
02.07.2021, 17:08
RSAX, тип логический: np.bool там где области - true, где пусто - false
Ну и сетка регулярная (надеюсь вы это сделали?), по сути на входе черно-белая картинка.
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
05.07.2021, 08:45  [ТС]
u235, Ну вот, у меня такая сетка сейчас, я правильно понимаю что мне надо создать массив условно 1280х720, создать его со значениями [0, 0], далее создать переменную типа bool_arr = [i != 0 for i in frame], на выходе получу массив np.bool и дальше нужно его засунуть в image = np.logical_or(bool_arr)?
Миниатюры
Группировка точек  
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
05.07.2021, 14:30  [ТС]
создать его со значениями [0, 0], далее создать переменную типа
не правильно тут написал, создать его со значениями [0, 0], далее взять значения всех моих треугольников, и перебрать пустой массив и сравнить его с треугольниками

Добавлено через 27 минут
А по поводу локальных максимумов, предлагаете что нибудь такое использовать? На моих данные не особо корректно работает, параметры естественно менял

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
 
points = np.array([[0.08198248, 0.25999721, 0.07041999],
                   [0.19091977, 0.05404123, 0.25826508],
                   [0.8842875, 0.90132467, 0.50512316],
                   [0.33320528, 0.74069399, 0.36643752],
                   [0.27789568, 0.14381512, 0.13405309],
                   [0.73586202, 0.4406952, 0.52345838],
                   [0.76639731, 0.70796547, 0.70692905],
                   [0.09164532, 0.53234394, 0.88298593],
                   [0.96164975, 0.60700481, 0.22605181],
                   [0.53892635, 0.95173308, 0.22371167]])
 
local_maxima = []
 
# distance in x / y to define region of interest around current center coordinate
radius = 0.25
 
for i in range(points.shape[0]):
    # radial mask with radius radius, could be beautified via numpy.linalg
    mask = np.sqrt((points[:, 0] - points[i, 0]) ** 2 + (points[:, 1] - points[i, 1]) ** 2) <= radius
    # if current z value equals z_max in current region of interest, append to result list
    if points[i, 2] == np.max(points[mask], axis=0)[2]:
        local_maxima.append(tuple(points[i]))
 
print(len(local_maxima))
Добавлено через 3 часа 28 минут
Думаю локальный максимум не сможет подойти, т.к. объекты могут различаться почти в 2 раза, и два маленьких не смогут быть распознаны из за ограничения радиуса поиска максимума
0
102 / 85 / 25
Регистрация: 21.05.2019
Сообщений: 481
05.07.2021, 15:43  [ТС]
u235, Ещё я использовал триангуляцию не на 2D а на 3D, и тут она получше работает, думаю есть шансы на поиск лок макс, надо только понять как отбросить лишнее

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import numpy as np
import scipy.spatial
import matplotlib.tri as mtri
import matplotlib.pyplot as plt
 
t = np.array(arr)
 
x = [i[0] for i in t]
y = [i[1] for i in t]
 
# Create the Delaunay tessalation using scipy.spatial
pts = np.vstack([x, y]).T
tess = scipy.spatial.Delaunay(pts)
 
# Create the matplotlib Triangulation object
x = tess.points[:, 0]
y = tess.points[:, 1]
tri = tess.vertices # or tess.simplices depending on scipy version
triang = mtri.Triangulation(x=pts[:, 0], y=pts[:, 1], triangles=tri)
 
# Plotting
z = [i[2] for i in t]
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(triang, z)
plt.show()
Python
1
2
arr = [[-0.2384903,   0.28638432, -0.52100003], [-0.23179091,  0.28418559, -0.51700002], [-0.22692253,  0.28418559, -0.51700002], [-0.22046956,  0.28528494, -0.51899999], [-0.21518661,  0.28638432, -0.52100003], [-0.24017692,  0.28570513, -0.52200001], [-0.23345869,  0.28351582, -0.51800001], [-0.22813963,  0.2829685 , -0.51700002], [-0.22370311,  0.28351582, -0.51800001], [-0.21967019,  0.28461046, -0.51999998], [-0.21518661,  0.28515781, -0.52100003], [-0.20773969,  0.28844177, -0.52700001], [-0.24017692,  0.28447627, -0.52200001], [-0.23345869,  0.28229637, -0.51800001], [-0.22813963,  0.2817514 , -0.51700002], [-0.22370311,  0.28229637, -0.51800001], [-0.21967019,  0.2833863 , -0.51999998], [-0.21518661,  0.2839313 , -0.52100003], [-0.21025782,  0.2855662 , -0.52399999], [-0.20728272,  0.28829107, -0.52899998], [-0.24017692,  0.2832474 , -0.52200001], [-0.23345869,  0.28107692, -0.51800001], [-0.22813963,  0.28053431, -0.51700002], [-0.22370311,  0.28107692, -0.51800001], [-0.21967019,  0.28216215, -0.51999998], [-0.21559964,  0.2832474 , -0.52200001], [-0.21149139,  0.28433263, -0.52399999], [-0.20813387,  0.28650311, -0.528     ], [-0.2384903 ,  0.28147828, -0.52100003], [-0.23223924,  0.27985747, -0.51800001], [-0.22736145,  0.27985747, -0.51800001], [-0.22248366,  0.27985747, -0.51800001], [-0.21886614,  0.28147828, -0.52100003], [-0.21437077,  0.28201854, -0.52200001], [-0.21065907,  0.28363932, -0.52499998], [-0.20806641,  0.28688093, -0.53100002], [-0.23513117,  0.27917593, -0.51899999], [-0.22980034,  0.27863803, -0.51800001], [-0.22492255,  0.27863803, -0.51800001], [-0.22089435,  0.27971384, -0.51999998], [-0.2168285 ,  0.28078968, -0.52200001], [-0.21272496,  0.28186548, -0.52399999], [-0.20937686,  0.28401713, -0.528     ], [-0.23726379,  0.27902526, -0.52100003], [-0.23101979,  0.27741858, -0.51800001], [-0.22657856,  0.27795413, -0.51899999], [-0.2221185 ,  0.27848968, -0.51999998], [-0.21805736,  0.27956081, -0.52200001], [-0.21395853,  0.28063191, -0.52399999], [-0.21061985,  0.28277415, -0.528     ], [-0.23986355,  0.27939834, -0.52399999], [-0.2331359 ,  0.27726552, -0.51999998], [-0.22780037,  0.27673233, -0.51899999], [-0.22334266,  0.27726552, -0.51999998], [-0.21928623,  0.27833195, -0.52200001], [-0.2151921 ,  0.27939834, -0.52399999], [-0.21186284,  0.28153116, -0.528     ], [-0.24821244,  0.28347325, -0.53399998], [-0.23649032,  0.27710308, -0.52200001], [-0.23068759,  0.27604137, -0.51999998], [-0.22579097,  0.27604137, -0.51999998], [-0.22131916,  0.27657224, -0.52100003], [-0.21765925,  0.27816477, -0.52399999], [-0.21394286,  0.27975733, -0.52700001], [-0.2113596 ,  0.28294241, -0.53299999], [-0.23908537,  0.27745968, -0.52499998], [-0.23235775,  0.27534573, -0.52100003], [-0.22701513,  0.27481721, -0.51999998], [-0.22254567,  0.27534573, -0.52100003], [-0.21889282,  0.2769312 , -0.52399999], [-0.21518349,  0.27851669, -0.52700001], [-0.21221546,  0.28115916, -0.53200001], [-0.24215232,  0.27832832, -0.52899998], [-0.23448093,  0.27517149, -0.523     ], [-0.22867822,  0.27411922, -0.52100003], [-0.22420168,  0.27464536, -0.52200001], [-0.22012639,  0.27569762, -0.52399999], [-0.2168348 ,  0.27780219, -0.528     ], [-0.21346787,  0.27990676, -0.53200001], [-0.24090698,  0.27708298, -0.52899998], [-0.23369569,  0.27446405, -0.52399999], [-0.22788828,  0.27341649, -0.52200001], [-0.22382711,  0.27446405, -0.52399999], [-0.2197283 ,  0.27551164, -0.52600002], [-0.21640843,  0.27760676, -0.52999997], [-0.24398335,  0.27792337, -0.53299999], [-0.23582595,  0.27427336, -0.52600002], [-0.22955606,  0.27270905, -0.523     ], [-0.22506068,  0.27323048, -0.52399999], [-0.22180675,  0.27531621, -0.528     ], [-0.21806682,  0.27688052, -0.53100002], [-0.24272859,  0.27666861, -0.53299999], [-0.23503365,  0.27355415, -0.52700001], [-0.2287614 ,  0.27199691, -0.52399999], [-0.22468143,  0.27303508, -0.52600002], [-0.22139922,  0.27511137, -0.52999997], [-0.21804171,  0.27718768, -0.53399998], [-0.23592561,  0.27334695, -0.52899998], [-0.22963455,  0.2717968 , -0.52600002], [-0.22553572,  0.27283023, -0.528     ], [-0.2222347 ,  0.27489713, -0.53200001], [-0.23681759,  0.27313037, -0.53100002], [-0.23050767,  0.27158725, -0.528     ], [-0.22639001,  0.27261597, -0.52999997], [-0.22307016,  0.27467346, -0.53399998], [-0.23181739,  0.27188031, -0.53100002], [-0.22767147,  0.27290433, -0.53299999], [-0.23143575,  0.27164957, -0.53299999], [-0.15836202,  0.20225762, -0.53200001], [-0.16369571,  0.19987172, -0.52899998], [-0.15781427,  0.19873824, -0.52600002], [-0.15286115,  0.19873824, -0.52600002], [-0.14987638,  0.20138304, -0.53299999], [-0.15937662,  0.19637353, -0.523     ], [-0.15415643,  0.19599806, -0.52200001], [-0.15038459,  0.19749996, -0.52600002], [-0.16307028,  0.19514231, -0.523     ], [-0.15784303,  0.19476919, -0.52200001], [-0.15292757,  0.19476919, -0.52200001], [-0.14914631,  0.19626168, -0.52600002], [-0.1461121 ,  0.19887352, -0.53299999], [-0.16152962,  0.19354033, -0.52200001], [-0.15661416,  0.19354033, -0.52200001], [-0.15169871,  0.19354033, -0.52200001], [-0.14790803,  0.1950234 , -0.52600002], [-0.14431379,  0.19687723, -0.53100002], [-0.17176128,  0.19415353, -0.52700001], [-0.16553271,  0.19267987, -0.523     ], [-0.16030075,  0.19231147, -0.52200001], [-0.1553853 ,  0.19231147, -0.52200001], [-0.15046984,  0.19231147, -0.52200001], [-0.14639089,  0.19341669, -0.52499998], [-0.14306374,  0.19562718, -0.53100002], [-0.17019708,  0.19254684, -0.52600002], [-0.16430149,  0.19144866, -0.523     ], [-0.15876716,  0.19071655, -0.52100003], [-0.15415643,  0.1910826 , -0.52200001], [-0.14924098,  0.1910826 , -0.52200001], [-0.14487849,  0.19181471, -0.52399999], [-0.14154661,  0.19401105, -0.52999997], [-0.1689588 ,  0.19130856, -0.52600002], [-0.16275848,  0.18985374, -0.52200001], [-0.15754065,  0.18949004, -0.52100003], [-0.15263461,  0.18949004, -0.52100003], [-0.14801211,  0.18985374, -0.52200001], [-0.14364491,  0.19058114, -0.52399999], [-0.14029891,  0.19276336, -0.52999997], [-0.1689588 ,  0.19007028, -0.52600002], [-0.16307028,  0.18898622, -0.523     ], [-0.15784303,  0.18862487, -0.52200001], [-0.15292757,  0.18862487, -0.52200001], [-0.14801211,  0.18862487, -0.52200001], [-0.14364491,  0.18934756, -0.52399999], [-0.13976949,  0.19079297, -0.528     ], [-0.17365846,  0.18990897, -0.52899998], [-0.16708279,  0.18811399, -0.52399999], [-0.16152962,  0.18739601, -0.52200001], [-0.15661416,  0.18739601, -0.52200001], [-0.15169871,  0.18739601, -0.52200001], [-0.14678325,  0.18739601, -0.52200001], [-0.14241134,  0.18811399, -0.52399999], [-0.1385265 ,  0.18954998, -0.528     ], [-0.17523443,  0.18902027, -0.52999997], [-0.1689588 ,  0.18759372, -0.52600002], [-0.16307028,  0.18652378, -0.523     ], [-0.15784303,  0.18616715, -0.52200001], [-0.15292757,  0.18616715, -0.52200001], [-0.14801211,  0.18616715, -0.52200001], [-0.14364491,  0.18688042, -0.52399999], [-0.13924006,  0.18759372, -0.52600002], [-0.13607402,  0.1900902 , -0.5329999 ],
[-0.1720872,  0.187064,  -0.528    ], [-0.16584921,  0.18564685, -0.52399999], [-0.16060784,  0.18529256, -0.523     ], [-0.15568297,  0.18529256, -0.523     ], [-0.15046984,  0.18493828, -0.52200001], [-0.14583322,  0.18529256, -0.523     ], [-0.14144719,  0.18600113, -0.52499998], [-0.13728351,  0.187064  , -0.528     ], [-0.17748109,  0.18758068, -0.53299999], [-0.17052064,  0.18546908, -0.52700001], [-0.16461564,  0.18441328, -0.52399999], [-0.15937662,  0.18406135, -0.523     ], [-0.15445175,  0.18406135, -0.523     ], [-0.14924098,  0.18370942, -0.52200001], [-0.144602  ,  0.18406135, -0.523     ], [-0.14047834,  0.18511715, -0.52600002], [-0.13629817,  0.18617294, -0.52899998], [-0.17748109,  0.18632592, -0.53299999], [-0.17052064,  0.18422845, -0.52700001], [-0.16461564,  0.1831797 , -0.52399999], [-0.15937662,  0.18283013, -0.523     ], [-0.15445175,  0.18283013, -0.523     ], [-0.14924098,  0.18248055, -0.52200001], [-0.14487849,  0.1831797 , -0.52399999], [-0.14047834,  0.18387887, -0.52600002], [-0.13604052,  0.18457802, -0.528     ], [-0.13255797,  0.1866755 , -0.53399998], [-0.1720872 ,  0.18333504, -0.528     ], [-0.16616572,  0.18229335, -0.52499998], [-0.16091492,  0.18194613, -0.52399999], [-0.15568297,  0.18159891, -0.523     ], [-0.15075809,  0.18159891, -0.523     ], [-0.14611206,  0.18194613, -0.52399999], [-0.14144719,  0.18229335, -0.52499998], [-0.1370235 ,  0.18298781, -0.52700001], [-0.13306333,  0.18437672, -0.53100002], [-0.26706914,  0.18416127, -0.53399998], [-0.26204069,  0.18416127, -0.53399998], [-0.17748109,  0.1838164 , -0.53299999], [-0.17084421,  0.18209205, -0.528     ], [-0.16492979,  0.18105743, -0.52499998], [-0.15968135,  0.18071256, -0.52399999], [-0.15474706,  0.18071256, -0.52399999], [-0.14981277,  0.18071256, -0.52399999], [-0.14487849,  0.18071256, -0.52399999], [-0.14047834,  0.18140231, -0.52600002], [-0.13604052,  0.18209205, -0.528     ], [-0.13206151,  0.18347153, -0.53200001], [-0.2673213 ,  0.18221913, -0.53200001], [-0.26231168,  0.18221913, -0.53200001], [-0.2577857 ,  0.18256164, -0.53299999], [-0.17781407,  0.18290415, -0.53399998], [-0.17116777,  0.18119157, -0.52899998], [-0.16492979,  0.1798215 , -0.52499998], [-0.15968135,  0.17947899, -0.52399999], [-0.15474706,  0.17947899, -0.52399999], [-0.14981277,  0.17947899, -0.52399999], [-0.14515497,  0.1798215 , -0.52499998], [-0.14047834,  0.18016403, -0.52600002], [-0.13604052,  0.18084906, -0.528     ], [-0.13206151,  0.18221913, -0.53200001], [-0.27233092,  0.18096672, -0.53200001], [-0.26431872,  0.18062657, -0.53100002], [-0.25980687,  0.18096672, -0.53200001], [-0.25527618,  0.18130688, -0.53299999], [-0.1746433 ,  0.18096672, -0.53200001], [-0.16835823,  0.17960607, -0.528     ], [-0.16245794,  0.17858557, -0.52499998], [-0.15751423,  0.17858557, -0.52499998], [-0.15257053,  0.17858557, -0.52499998], [-0.14734563,  0.17824541, -0.52399999], [-0.1429549 ,  0.17892575, -0.52600002], [-0.13826414,  0.17926591, -0.52700001], [-0.13380748,  0.17994623, -0.52899998], [-0.27712605,  0.18038993, -0.53399998], [-0.27056898,  0.17937651, -0.53100002], [-0.26556877,  0.17937651, -0.53100002], [-0.26056857,  0.17937651, -0.53100002], [-0.25653094,  0.18005212, -0.53299999], [-0.25198378,  0.18038993, -0.53399998], [-0.16867709,  0.17870088, -0.52899998], [-0.16245794,  0.17734965, -0.52499998], [-0.15751423,  0.17734965, -0.52499998], [-0.15257053,  0.17734965, -0.52499998], [-0.14762682,  0.17734965, -0.52499998], [-0.1429549 ,  0.17768747, -0.52600002], [-0.13826414,  0.17802528, -0.52700001], [-0.13406042,  0.17903869, -0.52999997], [-0.27838316,  0.17913281, -0.53399998], [-0.27181903,  0.17812646, -0.53100002], [-0.26631632,  0.17779099, -0.52999997], [-0.26181862,  0.17812646, -0.53100002], [-0.25730206,  0.17846191, -0.53200001], [-0.25324089,  0.17913281, -0.53399998], [-0.16774825,  0.17779099, -0.52999997], [-0.16152911,  0.17644919, -0.52600002], [-0.1562783 ,  0.17611372, -0.52499998], [-0.15162287,  0.17644919, -0.52600002], [-0.14666975,  0.17644919, -0.52600002], [-0.14171662,  0.17644919, -0.52600002], [-0.13728351,  0.17712009, -0.528     ], [-0.13306333,  0.17812646, -0.53100002], [-0.27608814,  0.17720951, -0.53200001], [-0.27005941,  0.17654329, -0.52999997], [-0.26506862,  0.17654329, -0.52999997], [-0.26056857,  0.17687641, -0.53100002], [-0.25604965,  0.17720951, -0.53200001], [-0.16995253,  0.1775426 , -0.53299999], [-0.16307683,  0.17554401, -0.52700001], [-0.15781427,  0.17521091, -0.52600002], [-0.15286115,  0.17521091, -0.52600002], [-0.14790803,  0.17521091, -0.52600002], [-0.14322668,  0.17554401, -0.5270000 ]]
Миниатюры
Группировка точек  
0
5525 / 2878 / 572
Регистрация: 07.11.2019
Сообщений: 4,773
06.07.2021, 07:28
RSAX, не нужна вам триангуляция 3d.
вот смотрите код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import numpy as np
from scipy import interpolate
from scipy.ndimage import maximum_filter
 
#  симуляция сканированных данных
def generate_points():
    x_min,x_max=0.0,0.3
    y_min,y_max=-0.05,0.2
    x=np.linspace(x_min, x_max, 1000)
    y=np.linspace(y_min, y_max, 1000)
    X,Y=np.meshgrid(x, y)
    num_points=5
    peaks_pos=((0.17,0.1), (0.19, 0.15), (0.1, 0.1), (0.24, 0.15), (0.25, 0.09))
    peaks_param=((0.3, 0.018), (0.25, 0.02), (0.32, 0.01), (0.28, 0.02),(0.33, 0.01))
    Z=0.1*X-0.15*Y
    for i in range(num_points):
        Z=Z+peaks_param[i][0]*np.exp(-((X-peaks_pos[i][0])**2+(Y-peaks_pos[i][1])**2)/(2*peaks_param[i][1]**2))
    # ax.plot_surface( X, Y, Z, cmap=cm.coolwarm)
    x_rnd=(x_max-x_min)*np.random.random(size=(100000,))+x_min
    y_rnd=(y_max-y_min)*np.random.random(size=(100000,))+y_min
    point = np.vstack((y_rnd, x_rnd))
    z_rnd=interpolate.interpn((y, x), Z, point.T)
    # ax.scatter(x_rnd,y_rnd,z_rnd)
    return((x_rnd, y_rnd, z_rnd))
    
 
# нерегулярный набор точек (исходные данные)
x,y,z=generate_points()
x_min=np.min(x)
x_max=np.max(x)
y_min=np.min(y)
y_max=np.max(y)
 
# преобразование в регулярные сетки (интерполяция):
x_grid, y_grid=np.meshgrid(np.linspace(x_min, x_max, 1000), np.linspace(y_min, y_max, 1000))
z_grid = interpolate.griddata((x, y), z, (x_grid, y_grid), method='cubic') #, fill_value=0.0
# тут можно сделать фильтрацию  z_grid для удаления ВЧ шумов
 
z_max=maximum_filter(z_grid, size=5)
pos=np.argwhere(z_grid == z_max)
print('положения максимумов:')
print(x_grid[0, pos[:,1]], y_grid[ pos[:,0],0])
Большая часть кода-генерация данных (раз вы своими данными не делитесь).
Далее нерегулярные наборы точек интерполируются в регулярные сетки.
z_grid - по сути картинка (осторожно! есть nanы по краям)
Ищем максимумы и все. (добавляется один ложный максимум с края связанный с наклоном "стола", который можно отфильтровать)
Все просто, главное перейти из наборов точек к регулярной картинке-матрице.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2021, 07:28
Помогаю со студенческими работами здесь

Группировка списка
Подскажите, пожалуйста, как мне сгруппировать такой список? ,,,,,] Что бы получилось Москва Значение1 Значение2 ...

Группировка в Pandas
Добрый день! Подскажите как выполнить группировку данных фрейма import pandas as pd, numpy as np np.random.seed(10) df =...

Группировка словаря
Помогите сгруппировать словарь с агрегированием в список from itertools import groupby works = # требуется #}, # ...

Группировка данных в массиве
Всем доброго дня Имеется вот такой массив: a = Надо объединить данные(для примера тут one,two,three) по именам, то есть в итоге...

Группировка логических операций в питоне
здравствуйте стал гуглить по сабжу как-то игнорирует первое слово, можете дать пример именно группировки логических операций в питоне ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Гайд, как ворваться в вайб-кодинг в мае 2026
Noname2331 17.05.2026
Простите за получившееся полотно текста, я даже не знаю, как его разбить на главы. Тут, что называется, ни добавить ни убавить, одна сцена одним дублем. На моих глазах недавно случилось чудо. Как. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru