C语言求两线段交点的算法,详解js实现线段交点的三种算法

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

引用

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

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

求直线交点时 我们可通过直线的一般方程

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

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

公式如下图:

20168994323808.png?20167994331

/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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值