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)
知道两个点,及半径,求圆与直线的交点
最新推荐文章于 2023-02-26 11:22:28 发布