首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旋转和平移多边形

旋转和平移多边形
EN

Stack Overflow用户
提问于 2021-03-24 16:58:12
回答 2查看 187关注 0票数 1

当我试图将旋转和转换应用于一个矩形,然后在leaflet上将两者可视化时,我遇到了一个问题。我试图旋转我的长方形180°,然后向下平移它。

问题是,经过这一转换后,新的矩形似乎扭曲(沿y轴更大),尽管它应该是相同的大小。

在这里,我已经复制了我的代码和结果的照片。我会感谢你的任何见解。

代码语言:javascript
复制
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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-24 17:43:30

这取决于投影系统 leaflet使用的。

如果使用简单的笛卡尔CRS,就不会出现扭曲:

代码语言:javascript
复制
leaflet(options = leafletOptions(crs = leafletCRS(crsClass = "L.CRS.Simple"))) %>%
  addPolygons(data = rect_poly) %>%
  addPolygons(data = rect_rot)

票数 2
EN

Stack Overflow用户

发布于 2021-03-24 17:13:51

它确实“看起来”拉长。但这与你的轮换无关。例如,如果将它们放在一起,它们的长度是相同的:

代码语言:javascript
复制
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)

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66785779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档