知道两个点,及半径,求圆与直线的交点

local point1 = {
	['x'] = -1,
	['y'] = 0,
}

local point2= {
	['x'] = -1,
	['y'] = 1,
}

-- 获取斜截式直线(垂直x的直线不适用斜截式,因为斜率无限大)
local GetKB = function(p1, p2)
	if p1.x == p2.x then return end
	local k, b
	k = (p2.y - p1.y)/(p2.x - p1.x)
	b = p1.y - (p1.x * (p2.y - p1.y) / (p2.x - p1.x))
	if p1.y == p2.y then k = 0 end
	return k, b
end

-- 获取以P1为圆心,r为半径的圆与p1 ,p2组成直线的交点
local GetPoints = function(p1, p2, r)
	if p1.x == p2.x and p1.y == p2.y then return end --传入两个相同的点求不了
	local x1, y1, x2, y2
	local m, n = p1.x, p1.y -- 圆心坐标m, n
	if p1.x ~= p2.x then
		local k, b = GetKB(p1, p2)
		local A, B, C -- 转换一元二次方程Ax^2 + Bx + C = 0
		A = 1 + k * k
		B = 2 * k * (b - n) - 2 * m
		C = m * m + (b - n) * (b - n) - r * r
		x1 = (-B + math.sqrt(math.pow(B, 2) - 4 * A * C)) / (2 * A)
		y1 = k * x1 + b
		x2 = (-B - math.sqrt(math.pow(B, 2) - 4 * A * C)) / (2 * A)
		y2 = k * x2 + b
	else
		x1 = m
		x2 = m
		y1 = n + r
		y2 = n - r
	end
	local point1 , point2 = {}, {}
	point1.x, point1.y= x1, y1
	point2.x, point2.y= x2, y2
	print("x1:", x1)
	print("y1:", y1)
	print("x2:", x2)
	print("y2:", y2)
	return point1, point2
end

GetPoints(point1, point2, 1)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zuig2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值