求圆外一点做圆切线的切点坐标(python)

求圆外一点做圆切线的切点坐标(python)

 

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]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年6月1日 下午12:10
下一篇 2022年6月1日 下午12:13

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!