圆弧的数学描述:圆心角、半径、起点终点坐标、顺逆弧判定

做数控这么多年,我始终觉得圆弧插补是运动控制里最「讲道理」的一个环节。你想想看,直线运动说白了就是两点一线,但圆弧不一样——它需要你同时管住两个轴的速度和位置,让它们配合着画出一个完美的弧线。今天我们就来把圆弧的数学底子彻底捋一遍。

圆弧的五个核心参数

要描述一段圆弧,其实只需要五个东西:起点坐标、终点坐标、圆心坐标、半径、以及方向(顺弧还是逆弧)。嗯,这里要注意,圆心坐标和半径不是独立的——知道圆心和起点,半径自然就出来了。

我个人习惯把圆弧参数分成两组:

  • 几何参数:起点 (X₀, Y₀)、终点 (X₁, Y₁)、圆心 (I, J)
  • 运动参数:半径 R、圆心角 θ、方向(G02/G03)

在实际的数控代码里,你看到的 G02/G03 后面跟着的 X、Y、I、J,其实就是这五个参数的变体。我在项目中遇到过不少新手,把 I、J 当成绝对坐标来写,结果机床画出来的弧线完全不对——I、J 是圆心相对于起点的偏移量,不是绝对坐标。

圆心角与弧长的关系

圆心角 θ 是圆弧对应的圆心张角,单位是弧度。它的计算公式很简单:

θ = arccos( ( (X₁-X₀)² + (Y₁-Y₀)² - 2R² ) / (-2R²) )

不过说实话,这个公式在实际代码里用得不多。我更常用的是向量法:

// 起点到圆心的向量
double ux = I, uy = J;
// 圆心到终点的向量
double vx = X₁ - (X₀ + I), vy = Y₁ - (Y₀ + J);
// 计算夹角
double dot = ux*vx + uy*vy;
double cross = ux*vy - uy*vx;
double theta = atan2(cross, dot);

为什么要用 atan2?因为它能直接给出带符号的角度,正负就代表了方向。这一点在顺逆弧判定时特别有用。

核心公式:弧长 L = R × |θ|

注意这里用的是绝对值。方向只决定走哪一侧,弧长永远是正的。

顺弧与逆弧的判定

G02 是顺圆弧(顺时针),G03 是逆圆弧(逆时针)。但问题来了——你怎么知道一段弧是顺时针还是逆时针?

我曾经被这个问题坑过一次。当时调试一台五轴机床,圆弧铣出来总是反的,查了半天发现是坐标系方向搞反了。后来我养成了一个习惯:先确定坐标系,再谈顺逆

判定方法其实很简单:

  1. 从起点看向终点,如果圆弧在右侧,就是顺弧(G02)
  2. 如果圆弧在左侧,就是逆弧(G03)

用数学语言说:

// 计算起点到终点的向量
double dx = X₁ - X₀, dy = Y₁ - Y₀;
// 计算起点到圆心的向量
double cx = I, cy = J;
// 叉积判断方向
double cross = dx*cy - dy*cx;
if (cross > 0) {
    // 逆时针(G03)
} else {
    // 顺时针(G02)
}

我的小技巧:在调试时,我会在起点位置画一个箭头,指向终点方向。然后看圆心在箭头的哪一侧——左侧就是逆弧,右侧就是顺弧。这个方法比背公式直观多了。

半径与圆心坐标的互推

有时候你只有起点、终点和半径,没有圆心坐标。这时候就需要用几何关系反推圆心。公式是这样的:

// 起点终点中点
double mx = (X₀ + X₁) / 2, my = (Y₀ + Y₁) / 2;
// 起点到终点的半长
double d = sqrt((X₁-X₀)² + (Y₁-Y₀)²) / 2;
// 圆心到中点的距离
double h = sqrt(R² - d²);
// 法线方向
double nx = -(Y₁ - Y₀) / (2*d), ny = (X₁ - X₀) / (2*d);
// 两个可能的圆心
double I₁ = mx + h*nx, J₁ = my + h*ny;
double I₂ = mx - h*nx, J₂ = my - h*ny;

这里会出现两个解,对应着优弧和劣弧。选择哪一个,取决于你的圆弧方向(G02/G03)和圆心角大小。我记得有一次做模具加工,客户给的图纸半径标错了,结果两个圆心解都不对——最后发现是图纸上的半径是外轮廓半径,而我们要走的是刀具中心轨迹。

避坑指南:当 R² < d² 时,说明给定的半径太小,无法连接起点和终点。这种情况下,数控系统通常会报错,或者自动把半径放大到刚好能连接的最小值。我曾经在批量加工时遇到过这个问题,一批零件全部报废——从那以后,我每次都会在代码里加一个半径合法性检查。

知识体系总览

下面这张图是我自己总结的圆弧参数关系,你可以把它当成一个快速参考:

圆弧插补参数 起点 (X₀,Y₀) 终点 (X₁,Y₁) 圆心 (I,J) 半径 R 方向 (G02/G03) 距离公式 偏移量 勾股定理 五个参数中,任意三个可推导出其余两个

说白了,圆弧的数学描述就是围绕这五个参数展开的。你只要掌握了它们之间的换算关系,不管是手工编程还是自动生成轨迹,都能做到心里有数。下一节我们会把这些参数真正用到插补算法里,看看 CNC 是怎么一步步走出圆弧的。

本章要点回顾

  • 圆弧需要五个参数:起点、终点、圆心、半径、方向
  • 圆心角用向量叉积计算,同时得到方向信息
  • 顺逆弧判定:叉积正负决定,但先确认坐标系
  • 半径反推圆心有两个解,注意优弧劣弧的选择
  • 始终检查半径是否大于弦长的一半

专注资料整理