Lua中外接圆圆心与半径获取:我的函数出错了怎么办?
Lua外接圆函数问题修复
你的代码存在两个核心问题,导致运行后无法得到预期结果甚至报错:
- 缺少返回值:函数计算出圆心坐标和半径后,没有通过
return语句将结果返回给调用者,调用时无法获取这些数据。 - 未处理三点共线场景:当三个点在同一直线上时,分母
d会等于0,执行除法操作会触发运行时错误。
以下是修正后的代码:
local function getCircumcircle(x1, y1, x2, y2, x3, y3) local d = 2 * (x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) -- 处理三点共线的情况,用极小值判断避免浮点精度误差 if math.abs(d) < 1e-9 then return nil, "三点共线,无法确定外接圆" end local t1, t2, t3 = x1*x1+y1*y1, x2*x2+y2*y2, x3*x3+y3*y3 local x = (t1*(y2-y3) + t2*(y3-y1) + t3*(y1-y2)) / d local y = (t1*(x3-x2) + t2*(x1-x3) + t3*(x2-x1)) / d local radius = math.sqrt((x1-x)*(x1-x) + (y1-y)*(y1-y)) -- 返回圆心坐标和半径 return x, y, radius end
关键说明:
- 返回值处理:函数最后通过
return x, y, radius将圆心(x,y)和半径返回,调用者可以通过cx, cy, r = getCircumcircle(...)直接获取结果。 - 共线判断:使用
math.abs(d) < 1e-9替代直接判断d == 0,避免浮点运算精度问题导致的误判,共线时返回错误提示。 - 几何计算精度:涉及浮点运算的几何场景,用极小阈值判断相等是通用的避坑手段。
内容的提问来源于stack exchange,提问作者darkfrei
相关产品推荐
相关产品推荐

