Как я могу сказать, что массив линий объектов приблизительно создает замкнутую область? - PullRequest
3 голосов
/ 24 января 2012

Я создаю приложение для рисования, где пользователь может стереть то, что он нарисовал.

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

История пользователя будет:

 - user would draw something that resembles an enclosed area
 - If it is an enclosed area, mark the area as ready to delete
 - User clicks on delete
 - the pixels inside the region are written with the delete color

Я видел это в других приложениях для рисования. Математика не моя область знаний. Я даже не уверен, где искать этот ответ.

В приложении уже есть возможность drawLine () на растровом изображении

1 Ответ

1 голос
/ 24 января 2012

Итак, судя по пересмотренному вопросу в комментариях: «учитывая последовательность отрезков, где каждый отрезок начинается там, где заканчивается предыдущий, образуют ли линии (примерно) замкнутый многоугольник?»это не должно быть слишком сложно.

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

Так что, если у вас есть n сегменты, образованные последовательностью точек p_0,...,p_n, вы можете рассмотретьЕвклидово расстояние между p_0 и p_n.Идея заключается в следующем:

if dist(p_0,p_n) < THRESHOLD
    create a new segment [p_n,p_0] closing off the polygon
    delete pixels in the enclosed region

dist(p_0,p_n) может быть реализовано как sqrt((p_0x - p_nx)^2 + (p_0y - p_ny)^2).Переменная THRESHOLD будет некоторой константой, определяющей, какую ошибку вы хотите допустить между первой и последней точкой.

...