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

如何计算旧矩形内点在新矩形中的对应位置?

计算旧矩形内点在新矩形中的对应相对位置问题

问题场景

我有三类坐标数据:旧矩形rectangleOld、新矩形rectangleNew以及旧矩形内的点pointIntoRectangleOld,具体数据如下:

rectangleOld = [
  [-23374.69715123405, 6706811.7857385],
  [-23516.832747730223, 6706811.7857385],
  [-23516.832747730223, 6706948.18295946],
  [-23374.69715123405, 6706948.18295946],
  [-23374.69715123405, 6706811.7857385]
];

pointIntoRectangleOld = [-23440.522912441458,6706879.939226517];

rectangleNew = [
  [-22869.755094112752, 6706693.921604385],
  [-23011.890690608925, 6706693.921604385],
  [-23011.890690608925, 6706830.318825345],
  [-22869.755094112752, 6706830.318825345],
  [-22869.755094112752, 6706693.921604385],
]

我需要计算该点在新矩形中对应的位置,使其与在旧矩形中的相对位置完全一致。我用Java开发,尝试了以下代码但没成功:

double lat1=Double.parseDouble(coordinateOldx);
double lat2=Double.parseDouble(plantPosX);
double xPosPlant=lat1-lat2;
double long1=Double.parseDouble(coordinateOldy);
double long2=Double.parseDouble(plantPosY);
double yPosPlant=long1-long2;
System.out.println(xPosPlant);
System.out.println(yPosPlant);
            
double latnew=Double.parseDouble(coordinateNewx);
latnew=latnew + xPosPlant;
double longNew=Double.parseDouble(coordinateNewy);
longNew=longNew + yPosPlant;

latNew和longNew应该是目标点的x/y坐标,但这种基于单个顶点的偏移计算方式无效。

解决方案

核心逻辑是计算点在旧矩形内的相对比例,再将该比例映射到新矩形的边界上,具体步骤如下:

1. 确定旧矩形的边界范围

先提取旧矩形的x、y轴极值:

  • x轴:最小值oldMinX = -23516.832747730223,最大值oldMaxX = -23374.69715123405
  • y轴:最小值oldMinY = 6706811.7857385,最大值oldMaxY = 6706948.18295946

2. 计算点在旧矩形内的相对比例

分别计算x、y方向上的比例值(范围0~1,0对应边界最小值,1对应边界最大值):

// 旧点坐标
double oldPointX = -23440.522912441458;
double oldPointY = 6706879.939226517;

// 旧矩形边界
double oldMinX = -23516.832747730223;
double oldMaxX = -23374.69715123405;
double oldMinY = 6706811.7857385;
double oldMaxY = 6706948.18295946;

// 计算相对比例
double xRatio = (oldPointX - oldMinX) / (oldMaxX - oldMinX);
double yRatio = (oldPointY - oldMinY) / (oldMaxY - oldMinY);

3. 确定新矩形的边界范围

同理提取新矩形的x、y轴极值:

  • x轴:最小值newMinX = -23011.890690608925,最大值newMaxX = -22869.755094112752
  • y轴:最小值newMinY = 6706693.921604385,最大值newMaxY = 6706830.318825345

4. 映射得到新点坐标

用新矩形的边界和计算出的相对比例,推导目标点坐标:

// 新矩形边界
double newMinX = -23011.890690608925;
double newMaxX = -22869.755094112752;
double newMinY = 6706693.921604385;
double newMaxY = 6706830.318825345;

// 计算新点坐标
double newPointX = newMinX + xRatio * (newMaxX - newMinX);
double newPointY = newMinY + yRatio * (newMaxY - newMinY);

结果验证

代入数值计算可得:

  • xRatio ≈ 0.537,yRatio = 0.5
  • 新点坐标:newPointX ≈ -22935.56,newPointY ≈ 6706762.12

该结果能保证点在新矩形中的相对位置与旧矩形完全一致。

内容的提问来源于stack exchange,提问作者DarioS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:23:12