如何在R语言中将多边形平移至新的中心位置
如何在R语言中平移多边形至指定新中心
问题描述
我需要一种快速移动多边形的方法,将基于原有中心的多边形平移到新的中心位置。以下是创建六边形多边形的代码:
library(sf) library(ggplot2) theta <- (0:6) * pi / 3 hexagon <- data.frame( x = sin(theta), y = cos(theta)) poly <- hexagon %>% st_as_sf(coords = c("x", "y")) %>% mutate(geometry = st_combine(geometry))%>% st_cast("POLYGON")
需要将该多边形平移至坐标为(10,10)的新中心(对应绘图中的红点):
poly %>% ggplot()+ geom_sf()+ geom_point(data=data.frame(x=10, y=10), aes(x, y), color="red")
解决方案
实现多边形平移的核心是计算平移向量(新中心坐标减去原多边形中心坐标),再通过sf包的空间变换完成平移:
步骤1:获取原多边形中心
用st_centroid()提取多边形的质心坐标:
original_centroid <- st_centroid(poly) original_coords <- st_coordinates(original_centroid)
步骤2:计算平移向量
定义目标中心后,算出需要移动的向量差:
new_centroid <- c(10, 10) translation_vec <- new_centroid - original_coords
步骤3:执行平移操作
有两种简洁的平移方式:
# 方法1:使用sf内置的st_translate函数 poly_translated <- st_translate(poly, translation_vec) # 方法2:直接对geometry对象做向量加法(更直观) poly_translated <- poly + translation_vec
验证平移结果
绘制原多边形、平移后的多边形和目标中心,确认位置正确:
ggplot() + geom_sf(data = poly, color = "blue", alpha = 0.3) + # 原多边形 geom_sf(data = poly_translated, color = "green") + # 平移后多边形 geom_point(aes(x = 10, y = 10), color = "red", size = 3) # 目标中心
完整可运行代码
library(sf) library(ggplot2) # 创建原六边形多边形 theta <- (0:6) * pi / 3 hexagon <- data.frame( x = sin(theta), y = cos(theta)) poly <- hexagon %>% st_as_sf(coords = c("x", "y")) %>% mutate(geometry = st_combine(geometry))%>% st_cast("POLYGON") # 计算平移向量并完成平移 new_centroid <- c(10, 10) original_coords <- st_coordinates(st_centroid(poly)) translation_vec <- new_centroid - original_coords poly_translated <- poly + translation_vec # 可视化验证 ggplot() + geom_sf(data = poly, color = "blue", alpha = 0.3) + geom_sf(data = poly_translated, color = "green") + geom_point(aes(x = 10, y = 10), color = "red", size = 3) + labs(title = "多边形平移效果", subtitle = "蓝色:原多边形 | 绿色:平移后多边形 | 红点:目标中心")
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

