旋转和平移多边形

Rotating and translating a polygon

我在尝试对矩形应用旋转和平移然后在 leaflet 上可视化时遇到了一个问题。我正在尝试将我的矩形旋转 180°,然后将其向下平移。

问题是,经过此转换后,新矩形似乎变形了(沿 y 轴变大),尽管它应该是相同的大小。

我在这里复制了我的代码以及结果的照片。如果有任何见解,我将不胜感激。

library(sf)
library(leaflet)

rect <- rbind(c(-1, -5), c(1, -5), c(1, 5), c(-1, 5), c(-1, -5))
rect_poly<- st_polygon(list(rect))

angle <- pi
rotation_matrix <- matrix(c(cos(angle), sin(angle), -sin(angle), cos(angle)), 2, 2)
rect_rot<- st_polygon(list(rect))*rotation_matrix  + c(0, -50)

leaflet() %>%
  addPolygons(data = rect_poly) %>%
  addPolygons(data = rect_rot)

确实“看起来”拉长了。但这与你的轮换没有任何关系。例如,如果您将它们并排放置,它们的长度相同:

library(sf)
library(leaflet)

rect <- rbind(c(-1, -5), c(1, -5), c(1, 5), c(-1, 5), c(-1, -5))
rect_poly<- st_polygon(list(rect))

angle <- pi
rotation_matrix <- matrix(c(cos(angle), sin(angle), -sin(angle), cos(angle)), 2, 2)
rect_rot<- st_polygon(list(rect %*% rotation_matrix)) + c(4, 0)

leaflet() %>%
  addPolygons(data = rect_poly) %>%
  addPolygons(data = rect_rot)

也许这是传单问题,超出了我的经验。

注意: 旋转应该是矩阵乘法,而不是元素乘法。

这取决于 projection system leaflet 用途。
如果你使用简单的笛卡尔CRS,就没有失真:

leaflet(options = leafletOptions(crs = leafletCRS(crsClass = "L.CRS.Simple"))) %>%
  addPolygons(data = rect_poly) %>%
  addPolygons(data = rect_rot)