Как вычислить координаты увеличенной фигуры в R?

#python #r #ggplot2 #coordinates #coordinate-transformation

Вопрос:

Примечание: Я работаю в R, но мой вопрос больше связан с логическим мышлением, чем с конкретным вопросом R.

Я создаю блестящее приложение, в котором пользователи рисуют фигуру на сетке 20 на 20, как черная фигура, показанная на рисунке ниже. Форма представлена в функции сервера таблицей, подобной той, что показана ниже. В таблице каждая сторона фигуры представлена строкой, указывающей точки, где начинается и заканчивается сторона, а именно ( x , y ) и ( xend , yend ).

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

пример формы, введенной пользователем, и желаемой формы, которая будет вычислена

Вы можете использовать следующий код для воспроизведения таблицы на вашем конце.

 structure(list(sideNo = 1:8, x = c(4L, 4L, 8L, 8L, 4L, 8L, 15L, 
18L), y = c(3L, 7L, 16L, 19L, 3L, 16L, 7L, 3L), xend = c(18L, 
15L, 15L, 18L, 4L, 8L, 15L, 18L), yend = c(3L, 7L, 16L, 19L, 
7L, 19L, 16L, 19L)), row.names = c(NA, -8L), class = c("tbl_df", 
"tbl", "data.frame"))
 

Комментарии:

1. Я бы сначала подумал об st_buffer sf этом, чтобы вычислить это, но, похоже, это не делает квадратные углы. Я бы избегал пользовательского кода, так как форма объектов может стать довольно сложной, поэтому функции буфера могут быть простым способом. Одним из решений может быть перемещение фигуры 4 раза (вверх, вниз, влево, вправо) и объединение этих четырех фигур? например:

2. что-то вроде этого: p<-st_polygon(list(cbind(c(0,1,1,0,0),c(0,0,1,1,0)))); a<-list(p c(1,1),p-c(0,1), p c(-1,1), p, p c(-1,0), p c(1,0),p c(1,-1),p c(0,-1), p c(-1,-1), p c(0,1)); plot(Reduce(st_union,a))