js求两圆交点_详解js实现线段交点的三种算法

本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊引用已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交)算法一: 求两条线段所在直线的交点, 再判断交点是否在两条线段上.求直线交点时 我们可通过直线的一般方程 ax+by+c=0求得(方程中的abc为系数,不是前面提到的端点,另外也可用点斜式方程和斜截式方程,...
摘要由CSDN通过智能技术生成

本文讲的内容都很初级, 主要是面向和我一样的初学者, 所以请各位算法帝们轻拍啊

引用

已知线段1(a,b) 和线段2(c,d) ,其中a b c d为端点, 求线段交点p .(平行或共线视作不相交)

算法一: 求两条线段所在直线的交点, 再判断交点是否在两条线段上.

求直线交点时 我们可通过直线的一般方程 ax+by+c=0求得(方程中的abc为系数,不是前面提到的端点,另外也可用点斜式方程和斜截式方程,此处暂且不论).

然后根据交点的与线段端点的位置关系来判断交点是否在线段上.

公式如下图:

function segmentsIntr(a, b, c, d){

/** 1 解线性方程组, 求线段交点. **/

// 如果分母为0 则平行或共线, 不相交

var denominator = (b.y - a.y)*(d.x - c.x) - (a.x - b.x)*(c.y - d.y);

if (denominator==0) {

return false;

}

// 线段所在直线的交点坐标 (x , y)

var x = ( (b.x - a.x) * (d.x - c.x) * (c.y - a.y)

+ (b.y - a.y) * (d.x - c.x) * a.x

- (d.y - c.y) * (b.x - a.x) * c.x ) / denominator ;

var y = -( (b.y - a.y) * (d.y - c.y) * (c.x - a.x)

+ (b.x - a.x) * (d.y - c.y) * a.y

- (d.x - c.x) * (b.y - a.y) * c.y ) / denominator;

/** 2 判断交点是否在两条线段上 **/

if (

// 交点在线段1上

(x - a.x) * (x - b.x) <= 0 && (y - a.y) * (y - b.y) <= 0

// 且交点也在线段2上

&& (x - c.x) * (x - d.x) <= 0 && (y - c.y) * (y - d.y) <=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值