CGL_2_A(判断直线的位置关系)

/**
 * create by dslming 2020/9/4
 * 依赖 three.js, sylvester.js
 * @note 所有输入输出的向量均使用THREE.Vector3, sylvester只是中间计算
 */


// 计算时判定的误差
const EP = 0.00001
const SylLine = Line
const SylVector = Vector


export function isZero(val, ep) {
    ep = ep || EP;
    return Math.abs(val) < ep;
}

export function isZeroVector(vector={x:0, y:0, z:0}) {
    // 将对象转为数组
    const vectorArr = Object.values(vector)
    for (var i = 0; i < vectorArr.length; i++) {
        if (!isZero(vectorArr[i]))
            return false;
    }
    return true;
}

/**
 * 判断两条线是否垂直
 * @param {*} v1 
 * @param {*} v2
 * @note 向量内积:a*b=|a||b|*cos(Y) 当cos为0时正交(90,-90垂直) 
 */
export function isOrthogonal(v1, v2) {
 if(isZeroVector(v1) || isZeroVector(v2)) return false

 const ret = v1.clone().dot(v2)
 if(Math.abs(ret-0)<EP) return true
 else return false
}

/**
 * 判断两条线是否平行
 * @param {*} v1 
 * @param {*} v2 
 */
export function isParallel(v1, v2) {
    if(isZeroVector(v1) || isZeroVector(v2)) return false

    let v = v1.clone().cross(v2)
    return isZeroVector(v);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值