如何在 Corona SDK 中检查一个圆是否在另一个圆里面

我正在制作一款游戏,在这个游戏中,你需要停止一个飞行的圆,如果停止的时候它在另一个圆(不动且在中心)的内部,你就会得到一分。 我该如何检查它是否在另一个圆内部?

第一个图片输入图像说明

点赞
用户7026995
用户7026995

尝试

local abs = math.abs
local function distanceBetweenTwoPoints(x1, y1, x2, y2)
  return (((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)) ^ 0.5
end

-- (x1, y1) 为第一个圆心,r1 为半径
-- (x2, y2) 为第二个圆心,r2 为半径
local function circleOverlap(x1, y1, r1, x2, y2, r2)
  return (distanceBetweenTwoPoints(x1, y1, x2, y2) <= r2 + r1)
end

local function oneCircleInsideOther(x1, y1, r1, x2, y2, r2)
  return (distanceBetweenTwoPoints(x1, y1, x2, y2) <= abs(r2 - r1))
end

一些测试

print(circleOverlap(0, 0, 1, 0, 0, 2)) -- true
print(circleOverlap(0, 1, 1, 0, 3, 1)) -- false
print(circleOverlap(1, 1, 1, 3, 3, 1)) -- false
print(circleOverlap(5, 10, 5, 12, 10, 2)) -- true

print(oneCircleInsideOther(0, 0, 1, 0, 0, 2)) -- true
print(oneCircleInsideOther(0, 1, 1, 0, 3, 1)) -- false
print(oneCircleInsideOther(1, 1, 1, 3, 3, 1)) -- false
print(oneCircleInsideOther(5, 10, 5, 12, 10, 2)) -- false
2016-11-07 18:57:47
用户1355986
用户1355986

借鉴前面的答案:

-- (x1, y1) 是第一个圆的中心点坐标和半径 r1
-- (x2, y2) 是第二个圆的中心点坐标和半径 r2
-- 如果圆 2 在圆 1 内部,则返回 true
local function circleInside(x1, y1, r1, x2, y2, r2)
  return (distanceBetweenTwoPoints(x1, y1, x2, y2)+ r2 < r1)
end
2016-11-07 19:07:31