资讯专栏INFORMATION COLUMN

给定线段line1(x1,y1)(x2,y2)和线段line2(x3,y3)(x4,y4),求两线段

AaronYuan / 2738人阅读

摘要:我的思路两线段交点就是两条线段相等的时候,也就是这个点既满足又满足。因为给了两个点,所以我们想到用斜截式来求出直线的方程式。因为斜截式不满足即垂直于轴时。

我的思路
两线段交点就是两条线段相等的时候,也就是这个点既满足line1又满足line2。所以我们要先求出这两条线段所在直线的方程式。因为给了两个点,所以我们想到用斜截式(y=kx+b)来求出直线的方程式。然后求出交点。再判断这个点是否在两条线段上(即判断求出的x坐标是否在x1x2x3x4之间)。因为斜截式不满足k=0(即垂直于x轴时)。所以要在k=0时加一个判断。
大致流程
设交点坐标为(a,b)
求出两线段所在直线的方程式(需求k1、b1、k2、b2) --> 将(a,b)代入方程利用与k1、b1、k2、b2的关系求出(a,b) --> 判断特殊情况k=0 --> 判断(a,b)是否在两条线段上 --> 返回结果
let line1 = [{x1:0,y1:1},{x2:0,y2:-1}];
let line2 = [{x3:0,y3:-1},{x4:2,y4:1}];
function point(line1,line2){
    // 解构赋值取得 x1,y1,x2,y2,x3,y3,x4,y4
    let [{x1,y1},{x2,y2}] = line1;
    let [{x3,y3},{x4,y4}] = line2;
    // 利用公式推导出 k、b和x、y的关系。
    let k1 = (y1-y2)/(x1-x2);
    let b1 = y1 - (k1*x1);
    let k2 = (y3-y4)/(x3-x4);
    let b2 = y3 - (k2*x3);
    // a、b 为交点坐标
    let a;
    let b;
    // 判断 k=0 时
    if(x1==x2){
        k1,b1 = 0;
        a = x1;
        b = k2*a + b2;
    }
    if(x3==x4){
        k2,b2 = 0;
        a = x3;
        b = k1*a + b1;
    }
    // 判断 交点 是否在两条线段上
    if(((a>x1&&ax2)||a==x1||a==x2)&&((a>x3&&ax4)||a==x3||a==x4)&&x1!=x2&&x3!=x4){
        a = (b2-b1)/(k1-k2);
        b = k1*a + b1;
    }
    // 返回结果
    let str;
    if(a!==undefined&&b!==undefined){
        str = `交点为(${a},${b})`
    }else if((k1==k2)&&(b1==b2)&&(((x1==x3)&&(x2==x4))||((x1==x4)&&(x2==x3)))){
        str = "两线段重合"
    }else if(k1==k2){
        str = "两线段平行"
    }else{
        str = "两线段不相交"
    }
    return str;
}
console.log(point(line1,line2))

可能有些繁琐,希望有简单方法的可爱可以提出来。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102470.html

相关文章

  • 小猪乔治border-radius

    摘要:主要有以下几个步骤找一张小猪乔治的图片参考对图片中的部分进行分解,并逐一实现废话其实掌握了后,这些步骤都不难了,细心绘制就可以完成啦。我绘制的小猪乔治如图参考资料用画小猪佩奇,你就是下一个社会人 概述 之前看了一篇关于用CSS来画小猪佩奇的文章,抱着锻炼自己的心态造了个轮子,画了个佩奇的小弟乔治,效果可以看这里,源码在这里。 开发过程中也让我对border-radius这个属性有了更深...

    guqiu 评论0 收藏0
  • Canvas 涂鸦

    摘要:第二步,消除涂鸦锯齿的办法简单的绘制和图片保存完成了,但是在这种情况下,线条会有很明显的锯齿灵魂画手来了。在经过搜索查阅之后,发现有一个绘制办法可以降低锯齿的问题。橡皮擦的原理是,将橡皮绘制的路径覆盖到原来的画笔上。 第一步,我们先实现简单的绘制,并且在绘制之后将图片保存到本地 var canvas = document.getElementById(canvas), ...

    thekingisalwaysluc 评论0 收藏0
  • 传感与检测实验报告,差动变压器的特性测定,江南大学物联网自动化

    摘要:线性回归系数值线性回归系数值用来记录最大偏差寻找最大偏差最大偏差为求灵敏度灵敏度为求线性误差非线性误差为返回的系数公式返回常量系数系数公式求和求平方和返回对应项相乘后的和区间区间区间区间 ...

    taowen 评论0 收藏0
  • 【JS图形学基础】平面向量的计算运用实例

    摘要:平面向量的计算和运用实例相关概念有向线段具有方向的线段叫做有向线段,以为起点,为终点的有向线段记作或向量的模有向线段的长度叫做向量的模,记作零向量长度等于的向量叫做零向量,记作或。 平面向量的计算和运用实例 相关概念 有向线段:具有方向的线段叫做有向线段,以A为起点,B为终点的有向线段记作 或AB; 向量的模:有向线段AB的长度叫做向量的模,记作|AB|; 零向量:长度等于0的向量...

    khs1994 评论0 收藏0
  • Perfect Rectangle

    摘要:首先确定上下的边界,左右线段按照横坐标排序。检查填充满上图的情况就组成不了一个长方形。找重合和有空隙只需要把所有横坐标在的线段排序之后检查首位相连,且起点,终点。且最后成的面积等于小矩形的面积和。 Perfect Rectangle 题目链接:https://leetcode.com/problems... 扫描线,哪个方向都行。我是从左往右扫,矩阵按照左右的边来存。showImg(h...

    SolomonXie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<