求圆外一点做圆切线的切点坐标(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日
下一篇 2022年6月1日

相关推荐