You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:00:52