求向量与圆的交点

这篇博客探讨了在计算机几何领域中,如何在已知离散点集、插值距离d以及相邻两点v1、v2的情况下,找到以v0为圆心、d为半径的圆与v1、v2之间线段的交点。通过类似直线与圆相交的计算方法,并结合插值背景,确保仅插入一个点,并验证解是否位于v1、v2之间。
摘要由CSDN通过智能技术生成

背景为在离散点集中进行线性插值

  • 已知插值距离为d,v1、v2为离散点集当中的相邻两点,以v0为圆心,d为半径,圆在v1、v2之间的交点
  • 和直线段与圆相交的情况有点类似
  • 基于插值背景,已判断在v1、v2间能进行插值,且只插入一个点
  • 最后通过判断解是否在v1、v2之间来确定最终解
  • function VecCrossoverCircle(v1, v2, v0, d) {
        let x1, y1, x2, y2, x0, y0, r;
        x1 = v1.x;
        y1 = v1.y;
        x2 = v2.x;
        y2 = v2.y;
        x0 = v0.x;
        y0 = v0.y;
        r = d;
    
        //二次方程各项参数
        let a, b, c, delta, t1, t2;
        a = x1*x1 + x2*x2 + y1*y1 + y2*y2 - 2 * x1*x2 - 2 * y1*y2;
        b = 2 * (x0*x1 + x1*x2 + y0*y1 + y1*y2 - x0*x2 - y0*y2 - x1*x1 - y1*y1);
        c = x0*x0 + x1*x1 + y0*y0 + y1*y1 - 2 * x0*x1 - 2 * y0*y1 - r*r;
        delta = b*b - 4 * a*c;//判别式
    
        let cp1 = new Vector(), cp2 = new Vector();
        cp1.z = v0.z;
        cp2.z = v0.z;
    
        //即使只有一个交点也要先假设为两个
        t1 = (-b &
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值