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

基于Christoph公式的四边形转矩形变换Delphi实现M/N公式报错咨询

四边形转矩形变换实现问题解答

坐标参数定义与顶点排序规则

  • 公式中的X1/Y1~X4/Y4对应输入凸四边形的四个顶点坐标
  • 顶点必须按顺时针/逆时针连续顺序排列,推荐顺序为:左上→右上→右下→左下,禁止顶点交叉排列、跳序排列,排序错误是触发根号参数为负的最常见原因
  • 若输入为非凸四边形、存在三个及以上顶点共线的退化四边形,本身不存在合法的矩形投影映射结果,也会出现根号参数为负的报错

M、N解析公式(可直接用于Delphi实现)

先提前置校验逻辑:若计算过程中出现分母为0、根号参数小于0的情况,直接判定输入四边形不合法,终止计算即可。

第一步:定义输入顶点

假设按顺序排列的四个凸四边形顶点为:(x1, y1)、(x2, y2)、(x3, y3)、(x4, y4)

第二步:计算中间参数

dx1 := x2 - x3;
dx2 := x4 - x3;
dx3 := x1 - x2 + x3 - x4;
dy1 := y2 - y3;
dy2 := y4 - y3;
dy3 := y1 - y2 + y3 - y4;
den := dx1 * dy2 - dx2 * dy1;
// 校验分母是否为0,为0则四边形退化
if den = 0 then Exit;

第三步:计算M、N相关参数

mNumer := dy2 * dx3 - dx2 * dy3;
nNumer := dx1 * dy3 - dy1 * dx3;
sqrtVal := 1 - 4 * mNumer * nNumer / (den * den);
// 校验根号参数合法性
if sqrtVal < 0 then Exit;
sqrtRes := Sqrt(sqrtVal);

第四步:得到M、N结果

M := (1 + sqrtRes) * den / (2 * nNumer);
N := (1 + sqrtRes) * den / (2 * mNumer);

注:如果映射后的矩形坐标出现反向/越界的情况,可以将1 + sqrtRes替换为1 - sqrtRes调整符号即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:48:00