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