import math
def get_tangent_line(tx, ty, ox, oy, r):
# 求点T到圆心O的距离
distance = math.sqrt((tx-ox) ** 2 + (ty-oy) ** 2)
# print('distance', distance)
# 点T到切点P的距离
length = math.sqrt(distance ** 2 - r ** 2)
# print('length', length)
if distance <= r:
print("输入的数值不在范围内")
return
# 点到圆心的单位向量
cx = abs(ox - tx) / distance
cy = abs(oy - ty) / distance
# print('cx', cx)
# print('cy', cy)
# 计算切线与圆心连线的夹角
angle = math.asin(r / distance)
print('angle', angle)
# 向正反两个方向旋转单位向量
q1x = cx * math.cos(angle) - cy * math.sin(angle)
q1y = cx * math.sin(angle) + cy * math.cos(angle)
q2x = cx * math.cos(-angle) - cy * math.sin(-angle)
q2y = cx * math.sin(-angle) + cy * math.cos(-angle)
# 得到新座标y
q1x = q1x * length + tx
q1y = q1y * length + ty
q2x = q2x * length + tx
q2y = q2y * length + ty
return [q1x, q1y, q2x, q2y]
文章出处登录后可见!
已经登录?立即刷新