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

点集的圆拟合质量评估(支持Java/Kotlin/JS/C等语言)

二维点集拟合圆的质量量化方案

核心量化指标(非矩阵版)

以下是几个无需复杂数学知识就能理解和实现的拟合质量评估指标:

  • 平均距离误差
    计算每个点到拟合圆圆心的距离与圆半径的偏差绝对值,再取平均值。数值越小,说明点集整体贴合拟合圆的程度越高。
    步骤:

    1. 对每个点(x,y),计算到圆心(cx, cy)的距离 d = √[(x - cx)² + (y - cy)²]
    2. 计算该点的偏差绝对值 |d - r|(r为拟合圆半径)
    3. 将所有偏差绝对值求和后除以点的总数,得到平均误差
  • 最大距离误差
    找出所有点偏差绝对值中的最大值。这个值能反映拟合圆对离群点的适配情况,数值越小说明点集与拟合圆的贴合度越均匀。

  • 均方根误差(RMSE)
    先将每个点的偏差平方后求和,除以点的总数再开平方。该指标会放大较大偏差的权重,更关注离群点对拟合效果的影响,数值越小拟合质量越好。

多语言实现示例

JavaScript

// 输入:拟合结果{cx, cy, r},点集points = [{x,y}, ...]
function calculateCircleFitQuality(cx, cy, r, points) {
  let sumAbsError = 0;
  let sumSquaredError = 0;
  let maxError = 0;
  
  for (const point of points) {
    const dx = point.x - cx;
    const dy = point.y - cy;
    const distance = Math.sqrt(dx*dx + dy*dy);
    const error = Math.abs(distance - r);
    
    sumAbsError += error;
    sumSquaredError += error * error;
    if (error > maxError) maxError = error;
  }
  
  const avgError = sumAbsError / points.length;
  const rmse = Math.sqrt(sumSquaredError / points.length);
  
  return { avgError, maxError, rmse };
}

C++

#include <vector>
#include <cmath>
#include <algorithm>

struct Point { double x, y; };
struct FitQuality { double avgError, maxError, rmse; };

FitQuality calculateCircleFitQuality(double cx, double cy, double r, const std::vector<Point>& points) {
    double sumAbsError = 0.0;
    double sumSquaredError = 0.0;
    double maxError = 0.0;
    
    for (const auto& point : points) {
        double dx = point.x - cx;
        double dy = point.y - cy;
        double distance = sqrt(dx*dx + dy*dy);
        double error = fabs(distance - r);
        
        sumAbsError += error;
        sumSquaredError += error * error;
        if (error > maxError) maxError = error;
    }
    
    int n = points.size();
    FitQuality quality;
    quality.avgError = sumAbsError / n;
    quality.rmse = sqrt(sumSquaredError / n);
    quality.maxError = maxError;
    
    return quality;
}

Kotlin

data class Point(val x: Double, val y: Double)
data class FitQuality(val avgError: Double, val maxError: Double, val rmse: Double)

fun calculateCircleFitQuality(cx: Double, cy: Double, r: Double, points: List<Point>): FitQuality {
    var sumAbsError = 0.0
    var sumSquaredError = 0.0
    var maxError = 0.0
    
    points.forEach { point ->
        val dx = point.x - cx
        val dy = point.y - cy
        val distance = kotlin.math.sqrt(dx*dx + dy*dy)
        val error = kotlin.math.abs(distance - r)
        
        sumAbsError += error
        sumSquaredError += error * error
        if (error > maxError) maxError = error
    }
    
    val n = points.size
    val avgError = sumAbsError / n
    val rmse = kotlin.math.sqrt(sumSquaredError / n)
    
    return FitQuality(avgError, maxError, rmse)
}

算法来源说明

这些量化指标属于几何拟合误差的基础统计度量,是工程领域评估曲线拟合质量的通用方法,广泛应用于计算机视觉、测绘、机械检测等场景,核心逻辑通过点到拟合圆的距离偏差衡量贴合程度,无需依赖复杂矩阵运算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:55:09