【问题标题】:Rotating and translating a polygon旋转和平移多边形
【发布时间】:2021-03-24 16:58:12
【问题描述】:

我在尝试对矩形应用旋转和平移然后在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)

【问题讨论】:

    标签: r leaflet sf


    【解决方案1】:

    这取决于projection system leaflet 的用途。
    如果您使用简单的笛卡尔CRS,则不会出现失真:

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

    【讨论】:

      【解决方案2】:

      它确实“看起来”拉长了。但这与您的轮换无关。例如,如果您将它们彼此相邻放置,它们的长度相同:

      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)
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 2012-03-09
        • 1970-01-01
        • 2013-05-23
        相关资源
        最近更新 更多