С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11

Поиск соседей (точек, фигур)

26.02.2014, 20:58. Показов 3819. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вечер, не добрый, уже 7-й...
Поднял геометрию вспомнил "все" , что забыл...
Много гуглил и читал.
посмотрел различные готовые алгоритмы, но так и не осилил задачу с которой столкнулся...
Пишу программу для вычисления некоторых данных по исходным.
На входе точки типа [(y1,x1),(y2,x2)....(N)] да Y приходит первым в координатах точки.
На этом изображении приблизительно обрисовал ситуацию. Точки пляшут по осям х и у. На выходе нужно получить вложенные массивы с фигурами [[1,2,3,4],[4,3,5,6]...[N]] на изображении я отметил фигуры которые нужно получить и в каком виде, пересекаться стороны фигур не могут, они все прилегают друг к другу, либо сторонами либо точками как в случае с крайней-верхней правой фигурой. Собрать нужно все четырехугольники отмеченые красными границами.
Сам я начинающий пишу по факту только пол года... Подскажите может кто сталкивался, или приблизительно ззнает вообще в какую сторону смотреть, что именно почитать, может и в правду есть какойто готовый алгоритм который просто нужно на питоне сформулировать. Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2014, 20:58
Ответы с готовыми решениями:

Построение фигур из массива точек
Изобразить рыбок и воздушного змея с помощью выпуклых дельтоидов. помогите, пожалуйста. на питоне 3

Поиск не нулевых соседей для заданной точки в двумерном массиве
Доброго всем времени суток!!! Вопрос заключается в следующем: Есть массив А размерностью MxN состоящий полностью из 0 и 1. Нужно...

Среди множества точек выбрать подмножество точек, лежащих внутри одной из фигур
Среди множества точек , расположенных в трехмерном пространстве , выбрать подмножество точек, лежащих внутри одной из объемных фигур. ( я...

15
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 08:56
Ваша задача не формализована.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 12:11  [ТС]
Да действительно может у меня не правильно получилось объяснить... вот еще изображение...
на входе приходят точки в виде матрицы [(y1,x1)(y2,x2)(y3,x3)...(N)] на выходе нужна матрица с непересекающимися четырехугольниками. На реальных данных точки лежат не так ровно как на рисунке. по оси х скачут выше-ниже так-же и по у оси. Так же фигуры могут уходить в кось оси как напримере нижних реальных данных.
Вот 6 реальных точек:
(560.119214896677, 1020.435036229498)
(561.240814896865, 1000.751336229562)
(562.548614897398, 981.311836229583)
(570.403614896914, 1019.095536229613)
(570.432814896671, 999.496236229611)
(571.849114897294, 980.76763622958)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 12:24
pySef, объяснить у вас получилось, я сказал - задача не формализована.
Какие точки подаются на вход (совсем произвольные или нет), какие четырёхугольники на выходе.

Из близких задач я могу назвать триангуляцию, решение - триангуляция Делоне. Там треугольники, но из двух соседних треугольников можно составить четырёхугольник, можно в этом направлении порыть.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 12:27  [ТС]
произвольные, но в таком виде что получается сетка, тоесть наглядно видно фигуры, и их равное количество (фигур) нет таких точек которые оставались бы в стороне, четырехугольники разносторонние все, бывает что и квадраты, а бывают и прямоугольники. Спасибо.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 12:31
Незашто пока.
Не торопитесь, формализация - задача не простая. Особенно когда "просто видно".
Цитата Сообщение от pySef Посмотреть сообщение
и их равное количество (фигур)
равное чему?
Цитата Сообщение от pySef Посмотреть сообщение
четырехугольники равносторонние все, бывает что и квадраты, а бывают и прямоугольники.
Прямоугольник - это не равностороннее, равностороннее - это ромб.

Не торопитесь, подумайте аккуратно, тут действительно не просто.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 12:43  [ТС]
Спасибо за оперативность, я опубликовал и ответ и сразу же отредактировал, раЗносторонние они (четырехугольники)

Добавлено через 1 минуту
эти данные приходят из автокада в xml файле, к сожалению скрина с автокада пока не могу предоставить, только через неделю смогу скинуть наглядный вид возможных ситуаций.

Добавлено через 6 минут
количество равное, имеется в виду , что из точек этих получается в точности определенное кол-во фигур 4х угольных, не пересекающихся, прилегающих друг к другу, тоесть 5 точек на входе не может быть так как из 5 точек получается 1 фигура и одна точка в стороне... такого слава богу быть не может, я пробовал пускать лучи от нижней клайней точки (и удалять после обхода всех искомых точек, точку запроса) и брать следующюю точку запроса и идти снизу в верху по оси у, тоесть мерить расстояние от точки запроса ко всем остальным и три самых минимальных вектора мне довали соседей но лишь в определенных ситуациях менял кол-во точек и появлялись баги... могу скинуть код который есть, но он не работает больше чем с 4 равными фигурами.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 12:49
Цитата Сообщение от pySef Посмотреть сообщение
количество равное, имеется в виду , что из точек этих получается в точности определенное кол-во фигур 4х угольных, не пересекающихся, прилегающих друг к другу, тоесть 5 точек на входе не может быть так как из 5 точек получается 1 фигура и одна точка в стороне...
Когда у вас 4 точки - конечно, количество фигур опрелелённое. А вот когда 101 - уже неопределённое, учитывая, что одна точка может быть вершиной неизвестного числа четырёхугольников.
Надеюсь, вы не думаете, что число точек у вас кратно 4? 9 точек прекрасно раскладываются в 4 квадрата. Если располагаются хорошо.
Так что вопрос "чему равное" число фигур остаётся открытым. Не торопитесь.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 12:57  [ТС]
нет, конечно же о кратности я не думаю, так как вы правильно заметили из нечетного кол-ва точек в полне приемлимое кол-во фигур, их количество динамическое в зависимости от местности, это геодезист отстреливает местность, и стреляет по4 точки и перемещается по всей территории (которую необходимо замерить) в итоге получается площадка "ровная" в состав которой определенное количество 4х угольных фигур входит. Уточните пожалуйсто если я опять не смог ответить. Тогда я попробую нарисовать пару вариантов.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 13:02
Не надо ничего рисовать.
Опишите словами, чётко, как геодезист ставит туда точки.
Если "примерно" квадраты - так и скажите, с понятием "примерно равно" вполне уже можно работать.
Если ещё есть направление осей - вообще хорошо.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 13:10  [ТС]
Да "примерно" ровные четырехугольники, как если взять лист в клетку и ровно его обрезать по границам квадратов то получиться как раз та самая местность с квадратами (только идеальная) на которые он делит всю местность, по факту он работает не на плоскости так как есть и высоты о которых я умолчал, но они сейчас и не нужны, они будут записываться в массив фигуры(так как каждая высота закреплена за точкой) и я буду брать самую высокую для дальнейших вычислений. лежат эти точки по х и по у, как на моих предыдущих рисунках, вид сверху на местность.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 13:16
Примерно ровные четырёхугольники или квадраты?

Добавлено через 2 минуты
Может, у вас и сторона этого квадрата известна?
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 13:50  [ТС]
примерно равные четырехугольники, это могут быть как квадраты так и прямоугольники так и ромбы если вколь оси Y лежит местность, стороны не известны так как фигуры надо расчитывать уже в дальнейшем по тому же пифагору, неровность этих четырех угольников из за того, что...:
Геодезист устанавливает в произвольном месте свой аппарат (Leica). У него есть помошник со штативом в руках который ходит по местности "как пьяный" и по ходу местности устанавливает штатив(поэтому и фигуры разносторонние четырехугольники), а геодезист стреляет в этот штатив, на пике штатива установлена алмазная головка, она принимает сигнал непосредственно с девайса геодезиста, и в девайс на флэху пишутся координаты точки установки того самого штатива.

Добавлено через 20 секунд
эти координаты и есть входящие точки

Добавлено через 3 минуты
есть еще координаты точки балтийского моря, но тут помоему только высоты разницу имеют, ниже выше уровня моря. От нее отталкиваться даже и не знаю, стоит ли..
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.02.2014, 13:57
Я понимаю, что четырёхугольники разносторонние, если строго говорить.
Вы не ответили:
Являются ли они примерно квадратами? Подо что мы их подгонять будем?
Являются ли они хотя бы примерно одинаковыми по размеру?

Я всё пытаюсь подвести вас к формализации задачи, а вы сопротивляетесь. Я устал, я ухожу.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
27.02.2014, 14:44  [ТС]
Простите меня, видимо я сам до конча не съел то с чем имею дело, под квадраты не получиться я думаю, нужно под примерные прямоугольники подгонять, под них и будем подгонять. Да фигуры примерно являются одинаковыми.

Добавлено через 20 минут
Вот то , что понаписал я:

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#! /usr/bin/env python3
#-*- coding:utf-8 -*-
 
from xml.etree import ElementTree as ET
from math import sqrt
 
def get_points_from_xml_file(xml_file):
    """ function after parse file.xml returns an array of points of the form:
        [[(y1,x1)z1],[(y2,x2)z2]...[...n]] where z is a height """
    points = []
    cache = []
    with open(xml_file, 'r', encoding='utf-8') as file:
        tree = ET.parse(file)
    ROOT = tree.getroot()
    CgPoints = ROOT[-1]
    for point in CgPoints:
        cache.append(point.text)
    for str_point in cache:
        str_point = list(str_point.split())
        point = []
        for fl in str_point:
            fl = float(fl)
            point.append(fl)
        a = tuple(point[:2])  # get tuple with (y,x)
        b = point[-1]         # get height z
        points.append([a,b])  # adding to array with all points [(y,x),z]
    return points
 
def get_vectors(query_point, points):
    """функция получает точку запроса, т.е. x == крайней левой, и y == самый нижний по границе x
       и возвращает все вектора от точки запроса ко всем остальным
        имеющимся точкам за исключением точки запроса
        ... теперь ... функция возвращает четырехугольники"""
 
    points.remove(query_point)
    vectors = []
    quad = []
    x1 = query_point[0][1] #для тестовых [0] точек а для реальных надо заглянуть глубже в кортеж x1 = query_point[0][1]
    y1 = query_point[0][0] #y1 = query_point[0][0]
    for point in points:
        x2 = point[0][1] #x2 = point[0][1]
        y2 = point[0][0] #y2 = point[0][0]
 
        if point[1] >= query_point[1]:
            #это услови для проверки чтобы лучи векторов летели строго вверх и в право
            #тоесть если х точки запроса меньше икса искомой точки в которую летит луч
            #значит она находиться правее, либо правее и выше точки запроса"""
            length_of_the_vector = sqrt((x1-x2)**2 + (y1-y2)**2)
            vectors.append([query_point, point, length_of_the_vector])
    vectors = sorted(vectors, key=lambda vector: vector[-1]) # все массивы с длинами векторов отсортированные по длинам векторов
    first_3_vectors = vectors[:3]
    quad.append(query_point)
    for point in first_3_vectors:
        quad.append(point[1])
    if len(quad) == 4:
        return quad, points
    else:
        return None
 
#
xml_file = '2Cubes.xml'
points = get_points_from_xml_file(xml_file)
 
 
 
quads = []
while points:
    i = min(points)
    v = get_vectors(i, points)
    if v is not None:
        quad = v[0]
        points = v[1]
        quads.append(quad)
    else:
        continue
 
for i,e  in enumerate(quads):
    print(i, e)
2Cubes.xml

Добавлено через 22 минуты
Вы просто пытаетесь найти зацепку от которой дальше плясать, так вот ее нет, все эти фигуры разные и единственное чем они похожи, они все четырехугольные. Я поэтому сюда и написал что уперся в тупик, и не знаю что общего между ними найти, и даже если искать к-ближайших соседей мне не удается определить схожесть между объектами (точками). Благодарен за попытку.
0
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 11
28.02.2014, 15:55  [ТС]
Разобрался. Тема закрыта!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2014, 15:55
Помогаю со студенческими работами здесь

Построение фигур из массива точек
Изобразить вишню: плоды – восьмиугольники, листья – параллелограммы, ветка – линии. Помогите, пжлста

Построение фигур из массива точек
Помогите, пожалуйста, на node js изобразить рыбок и воздушного змея с помощью выпуклых дельтоидов. Как это должно быть?

Построение фигур из массива точек
С помощью метода Polygon изобразить по точкам вытянутый шестиугольник. Заранее спасибо

Построение фигур из массива точек
Изобразить рыбок и воздушного змея с помощью выпуклых дельтоидов. Помогите на node js

Нахождение точек пересечения 2-х фигур
Необходимо, используя компонент TImage, нарисовать 2-ва любых примитива и найти точки их пересечения. Может у кого-нибудь есть...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru