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

已知点到另外两点的距离,求该点的XY坐标(R语言实现)

用R语言实现三边测量求解未知点坐标

这是典型的**三边测量(trilateration)**问题,已知两个参考点坐标及相关距离时,可通过坐标平移推导求解未知点(点3)的坐标,且通常存在两个对称解(三点共线时仅一个解)。以下是具体的R语言实现:

实现步骤与代码

# 定义已知参数(替换为你的实际数据)
x1 <- 2  # 点1的X坐标
y1 <- 3  # 点1的Y坐标
x2 <- 7  # 点2的X坐标
y2 <- 5  # 点2的Y坐标
d1 <- 4  # 点3到点1的距离
d2 <- 5  # 点3到点2的距离
d12 <- sqrt((x2 - x1)^2 + (y2 - y1)^2)  # 点1到点2的距离,若已知可直接赋值

# 计算平移坐标系下的X坐标(将点1移至原点,点2移至X轴)
x_prime <- (d1^2 - d2^2 + d12^2) / (2 * d12)

# 验证是否存在有效解
y_prime_sq <- d1^2 - x_prime^2
if (y_prime_sq < -1e-9) {
  stop("错误:给定距离无法构成三角形,无解")
} else if (abs(y_prime_sq) < 1e-9) {
  # 三点共线,仅一个解
  x3 <- x1 + x_prime * (x2 - x1)/d12
  y3 <- y1 + x_prime * (y2 - y1)/d12
  cat("三点共线,唯一解:(", round(x3, 4), ",", round(y3, 4), ")\n")
} else {
  # 存在两个对称解
  y_prime <- sqrt(y_prime_sq)
  # 解1
  x3_1 <- x1 + x_prime * (x2 - x1)/d12
  y3_1 <- y1 + y_prime * (y2 - y1)/d12
  # 解2
  x3_2 <- x1 + x_prime * (x2 - x1)/d12
  y3_2 <- y1 - y_prime * (y2 - y1)/d12
  
  cat("解1:(", round(x3_1, 4), ",", round(y3_1, 4), ")\n")
  cat("解2:(", round(x3_2, 4), ",", round(y3_2, 4), ")\n")
}

关键说明

  • 代码通过坐标平移简化计算:先将点1移至原点、点2移至X轴,求解后再平移回原坐标系
  • 若y_prime_sq为负,说明距离参数矛盾,无法构成三角形,无有效解
  • 若y_prime_sq趋近于0,说明三点共线,仅存在一个解
  • 正常情况下会得到两个关于点1-点2连线对称的解,需结合实际场景的空间信息判断哪个是目标点

内容的提问来源于stack exchange,提问作者Rodrigo Augusto Santinelo Pere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:01:42