知道兩個點,及半徑,求圓與直線的交點
阿新 • • 發佈:2019-01-24
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)