判断平面内一个点 是否在两个点所确定的长轴椭圆内

    # 点到两个端点所确定的直线的距离 classic formula is:
    # # d = [(x2-x1)*(y1-y)-(x1-x)*(y2-y1)] / sqrt((x2-x1)**2 + (y2-y1)**2)
    #
    xD = (x2 - x1)
    yD = (y2 - y1)
    detaX = x1 - X
    detaY = y1 - Y
    norm2 = sqrt(xD ** 2 + yD ** 2)  # 注意norm2是一个数而不是numpy数组,因为xD, yD都是一个数。单个数字运算math比numpy快
    b = thre
    dist = xD * detaY - detaX * yD  # 常数与numpy数组(X,Y是坐标数组)的运算,broadcast
    dist /= norm2
    dist = np.abs(dist)
    ratiox = np.abs(detaX / (xD + 1e-8))
    ratioy = np.abs(detaY / (yD + 1e-8))
    ratio = np.where(ratiox < ratioy, ratiox, ratioy)
    ratio = np.where(ratio > 1, 1, ratio)  # 不用 np.ones_like(ratio)也可以正常运行,并且会快一点点
    ratio = np.where(ratio > 0.5, 1 - ratio, ratio)
    oncurve_dist = b * np.sqrt(1 - np.square(ratio * 2))  # oncurve_dist计算的是椭圆边界上的点到长轴的垂直距离

    sigma = thre  # todo: sigma of PAF 对于PAF的分布,设其标准差为多少最合适呢

    guass_dist[dist >= b] = 0

    return guass_dist

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值