精华内容
下载资源
问答
  • 方法很简单,句就可以,经过本人呕心沥血思考,终于想出这么简单的句判断直线相交,真心了不起直线相交,真心了不起直线相交,真心了不起
  • 如何判断两条直线是否相交

    千次阅读 2020-02-24 18:44:18
    两条直线相交只有两种情况 第一种:两条直线斜率不相同(斜率不存在的情况算做一种斜率) 第二种:两斜率相同且截距也相同,即重合(如果这相同的斜率都是斜率不存在,那么后者的相同就是与x轴的交点也相同) 函数...

    之前写过一篇如何判断两条线段是否相交,我们紧接这个主题,再来谈谈如何判断两条直线是否相交

    如何判断两条直线是否相交

    总体来上,判断直线是否相交比判断线段是否相交容易多了

    两条直线相交只有两种情况
    第一种:两条直线斜率不相同(斜率不存在的情况算做一种斜率)
    第二种:两斜率相同且截距也相同,即重合(如果这个相同的斜率都是斜率不存在,那么后者的相同就是与x轴的交点也相同)

    函数代码

    bool judge(int Ax1,int Ay1,int Ax2,int Ay2,int Bx1,int By1,int Bx2,int By2)
    {
        if((Ax2-Ax1==0&&Bx2-Bx1!=0)||(Ax2-Ax1!=0&&Bx2-Bx1==0))
        {
            return 1;
        }
        if(Ax2-Ax1==0&&Bx2-Bx1==0)
        {
            return Ax1==Bx1?1:0;
        }
        double k1=(Ay2-Ay1)*1.0/(Ax2-Ax1);
        double k2=(By2-By1)*1.0/(Bx2-Bx1);
        if(k1!=k2)
            return 1;
        if(Ay1-k1*Ax1==By1-k2*Bx1)
            return 1;
        return 0;
    }
    

    函数代码我们可以划分为4的小步骤

    第一步:有且仅有一条直线垂直x轴
    两条直线中,如果只有一条直线垂直于x轴(斜率不存在),那么这两条直线一定相交

    if((Ax2-Ax1==0&&Bx2-Bx1!=0)||(Ax2-Ax1!=0&&Bx2-Bx1==0))
        {
            return 1;
        }
    

    第二步:两条直线都垂直于x轴
    此时当且仅当两条直线于x轴交点相同时才相交(重合)

    if(Ax2-Ax1==0&&Bx2-Bx1==0)
        {
            return Ax1==Bx1?1:0;
        }
    

    现在开始的第三部和第四步就是斜率都存在的情况了
    第三步:两条直线的斜率不相等
    此时一定相交

        if(k1!=k2)
            return 1;
    

    第四步:两条直线斜率不相等
    此时只有两条直线的截距相等才会相交

        if(Ay1-k1*Ax1==By1-k2*Bx1)
            return 1;
        return 0;
    
    展开全文
  • 下面是修正后的/// /// 计算两条直线的交点/// /// L1的点1坐标/// L1的点2坐标/// L2的点1坐标/// L2的点2坐标/// public static PointF GetIntersection(PointF lineFirstStar, PointF lineFirstEnd, PointF ...

    PS:从其他地方看到的源码是有问题的。下面是修正后的

    ///

    /// 计算两条直线的交点

    ///

    /// L1的点1坐标

    /// L1的点2坐标

    /// L2的点1坐标

    /// L2的点2坐标

    ///

    public static PointF GetIntersection(PointF lineFirstStar, PointF lineFirstEnd, PointF lineSecondStar, PointF lineSecondEnd)

    {

    /*

    * L1,L2都存在斜率的情况:

    * 直线方程L1: ( y - y1 ) / ( y2 - y1 ) = ( x - x1 ) / ( x2 - x1 )

    * => y = [ ( y2 - y1 ) / ( x2 - x1 ) ]( x - x1 ) + y1

    * 令 a = ( y2 - y1 ) / ( x2 - x1 )

    * 有 y = a * x - a * x1 + y1 .........1

    * 直线方程L2: ( y - y3 ) / ( y4 - y3 ) = ( x - x3 ) / ( x4 - x3 )

    * 令 b = ( y4 - y3 ) / ( x4 - x3 )

    * 有 y = b * x - b * x3 + y3 ..........2

    *

    * 如果 a = b,则两直线平等,否则, 联解方程 1,2,得:

    * x = ( a * x1 - b * x3 - y1 + y3 ) / ( a - b )

    * y = a * x - a * x1 + y1

    *

    * L1存在斜率, L2平行Y轴的情况:

    * x = x3

    * y = a * x3 - a * x1 + y1

    *

    * L1 平行Y轴,L2存在斜率的情况:

    * x = x1

    * y = b * x - b * x3 + y3

    *

    * L1与L2都平行Y轴的情况:

    * 如果 x1 = x3,那么L1与L2重合,否则平等

    *

    */

    float a = , b = ;

    int state = ;

    if (lineFirstStar.X != lineFirstEnd.X)

    {

    a = (lineFirstEnd.Y - lineFirstStar.Y) / (lineFirstEnd.X - lineFirstStar.X);

    state |= ;

    }

    if (lineSecondStar.X != lineSecondEnd.X)

    {

    b = (lineSecondEnd.Y - lineSecondStar.Y) / (lineSecondEnd.X - lineSecondStar.X);

    state |= ;

    }

    switch (state)

    {

    case : //L1与L2都平行Y轴

    {

    if (lineFirstStar.X == lineSecondStar.X)

    {

    //throw new Exception("两条直线互相重合,且平行于Y轴,无法计算交点。");

    return new PointF(, );

    }

    else

    {

    //throw new Exception("两条直线互相平行,且平行于Y轴,无法计算交点。");

    return new PointF(, );

    }

    }

    case : //L1存在斜率, L2平行Y轴

    {

    float x = lineSecondStar.X;

    float y = (lineFirstStar.X - x) * (-a) + lineFirstStar.Y;

    return new PointF(x, y);

    }

    case : //L1 平行Y轴,L2存在斜率

    {

    float x = lineFirstStar.X;

    //网上有相似代码的,这一处是错误的。你可以对比case 1 的逻辑 进行分析

    //源code:lineSecondStar * x + lineSecondStar * lineSecondStar.X + p3.Y;

    float y = (lineSecondStar.X - x) * (-b) + lineSecondStar.Y;

    return new PointF(x, y);

    }

    case : //L1,L2都存在斜率

    {

    if (a == b)

    {

    // throw new Exception("两条直线平行或重合,无法计算交点。");

    return new PointF(, );

    }

    float x = (a * lineFirstStar.X - b * lineSecondStar.X - lineFirstStar.Y + lineSecondStar.Y) / (a - b);

    float y = a * x - a * lineFirstStar.X + lineFirstStar.Y;

    return new PointF(x, y);

    }

    }

    // throw new Exception("不可能发生的情况");

    return new PointF(, );

    }

    C++ 根据两点式方法求直线并求两条直线的交点

    Line.h #pragma once //Microsoft Visual Studio 2015 Enterprise //根据两点式方法求直线,并求两条直线的交点 #include"B ...

    Intersecting Lines--POJ1269(判断两条直线的关系 && 求两条直线的交点)

    http://poj.org/problem?id=1269 我今天才知道原来标准的浮点输出用%.2f   并不是%.2lf  所以wa了好几次 题目大意:   就给你两个线段 然后求这两个线段所在的 ...

    求两条直线相交点 AS3代码

    ,); ,); ,); ,); var p:Point = new Point(); trace(checkPoint()) function checkPoint() { if (p1Start.x ...

    AS3 求两条直线的交点

    //粘贴到帧上运行即可 var p1Start:Point = new Point(0,0); var p1End:Point = new Point(50,50); var p2Start:Poin ...

    poj 1269(两条直线交点)

    Intersecting Lines Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13481   Accepted: 59 ...

    判断两条直线的位置关系 POJ 1269 Intersecting Lines

    两条直线可能有三种关系:1.共线     2.平行(不包括共线)    3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...

    求空间内两条直线的最近距离以及最近点的坐标(C++)

    关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...

    POJ1269:Intersecting Lines(判断两条直线的关系)

    题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...

    两条直线(蓝桥杯)二分枚举+RMQ

    算法提高 两条直线   时间限制:1.0s   内存限制:256.0MB        问题描述 给定平面上n个点. 求两条直线,这两条直线互相垂直,而且它们与x轴的夹角为45度,并且n个点中离这两条 ...

    随机推荐

    解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误

    一.问题描述 1.错误截图如下. 2.设计的问题 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.6, 结果每次使用Maven > Update project的时候JDK ...

    允许Sublime编辑器在Ubuntu上输入中文

    Sublime Text是一款功能非常强大的轻量级代码编辑器,有关功能介绍和使用可以看我另一篇文章的描述http://www.cnblogs.com/jaxu/p/5037547.html 不过,在U ...

    soui中subscribeEvent订阅控件消息与宏订阅注意事项

    同一个控件,subscribeEvent与宏定义不能同时响应,优先响应sub 所以,同一个控件的同一个消息,要想在多个地方响应,就必须sub方式订阅

    Android--ListView与数据绑定(Xamarin)

    ListView 控件是一个条目容器, 用于显示集合对象(如数组, List, ObservableCollection等)的每一个条目, 并提供滚动功能. 列表视 ...

    深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

    最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, ...

    Caffe使用:如何将一维数据或其他非图像数据转换成lmdb

    caffe事儿真多,数据必须得lmdb或者leveldb什么的才行,如果数据是图片的话,那用caffe自带的convert_image.cpp就行,但如果不是图片,就得自己写程序了.我也不是计算机专业 ...

    Codevs 3287 货车运输

    题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过 ...

    php-fpm.conf两个至关重要的参数

    这里规定了PHP-CGI的连接.发送和读取的时间,300秒足够用了,因此我的服务器很少出现504 Gateway Time-out这个错误.最关键的是php-fpm.conf的设置,这个会直接导致50 ...

    WPF自定义控件(一)——Button

    接触WPF也有两个多月了,有了一定的理论基础和项目经验,现在打算写一个系列,做出来一个WPF的控件库.一方面可以加强自己的水平,另一方面可以给正在学习WPF的同行一个参考.本人水平有限,难免有一些错误 ...

    【HDOJ】1171 Big Event in HDU

    母函数,先要算搞清楚组合数可能的最大值.非常大.N种设备的最大VAL*最大数量. #include #include #define ...

    展开全文
  • 具体数学---直线相交

    2019-10-08 15:00:35
    两条,可以分为4区域。那么n条直线最多可以把一平面空间分为多少各区域?针对这问题,我们任然是采用三步走。 简单 公式或者递推 通项公式 Step 1 看看简单情况, n=0→T(0)=1n=0 \rightarrow T(0)=...

    UTF8gbsn

    Intro

    0条直线的空间含有1个区域。一条直线把一个空间划分为2个。两条,可以分为4个区域。那么n条直线最多可以把一个平面空间分为多少各区域?针对这个问题,我们任然是采用三步走。

    1. 简单

    2. 公式或者递推

    3. 通项公式

    Step 1

    看看简单情况,

    • n = 0 → T ( 0 ) = 1 n=0 \rightarrow T(0)=1 n=0T(0)=1

    • n = 1 → T ( 1 ) = 2 n=1 \rightarrow T(1)=2 n=1T(1)=2

    • n = 2 → T ( 2 ) = 4 n=2 \rightarrow T(2)=4 n=2T(2)=4

    • n = 3 → T ( 3 ) = 7 n=3 \rightarrow T(3)=7 n=3T(3)=7

    • T ( n ) = ? T(n)=? T(n)=?

    Step 2

    第二步是为了分析问题的某种形式的解。可以是递推公式等。但是怎么分析这个问题。假如我们有n-1条直线已经存在这个平面里。当第n条直线出现,和其他直线相交的时候。我们发现,只要和其中一条直线相交,那么这条直线左边的空间将被分为2半。也就是说,只要只要相交就会有一个空间区域被分开为两个。那么n-1直线和第n条直线有多少个交点?n-1个交点。而最终直线出发的那个空间也会被分为2半。这样我们可以说,只要有n-1交点,那么就会有n个区域被分成两半

    T ( n ) ⩽ T ( n − 1 ) + n T(n) \leqslant T(n-1)+n T(n)T(n1)+n

    上界证明了,那么看看下界。第n条直线,和前面n-1条直线,只要不平行。必定也就是至少有n-1个交点。所以

    T ( n ) ⩾ T ( n − 1 ) + n T(n) \geqslant T(n-1)+n T(n)T(n1)+n

    故而

    T ( n ) = T ( n − 1 ) + n T(n) = T(n-1)+n T(n)=T(n1)+n

    Step 3

    我们来看看通项公式

    T ( n ) = n + T ( n − 1 ) = n + n − 1 + T ( n − 2 ) = n + n − 1 + n − 2 + ⋯ + 1 + 1 T(n)=n+T(n-1)=n+n-1+T(n-2)=n+n-1+n-2+\cdots+1+1 T(n)=n+T(n1)=n+n1+T(n2)=n+n1+n2++1+1

    使用高斯求和公式,我们可以得到

    T ( n ) = n ( n + 1 ) 2 + 1 T(n)=\frac{n(n+1)}{2}+1 T(n)=2n(n+1)+1

    The End

    变种问题,假如直线不是笔直的直线。而是呈锐角的折线。那么n条折线最多可以把一个平面空间划分为多少个区域?

    在这里插入图片描述

    根据前面的介绍我们观察到

    在这里插入图片描述

    没一条折线减少2个区域。而且是最少减少2个区域。只有如第一幅图的布局才会让相交点最少。这样减少的区域才最少。我们可以得到

    Z n = L 2 n − 2 n = 2 n ( 2 n + 1 ) / 2 + 1 − 2 n = 2 n 2 − n + 1 ,  for  n ⩾ 0 \begin{aligned} \mathrm{Z}_{\mathrm{n}}=& \mathrm{L}_{2 \mathrm{n}}-2 \mathrm{n}=2 \mathrm{n}(2 \mathrm{n}+1) / 2+1-2 \mathrm{n} \\ &=2 \mathrm{n}^{2}-\mathrm{n}+1, \quad \text { for } \mathrm{n} \geqslant 0 \end{aligned} Zn=L2n2n=2n(2n+1)/2+12n=2n2n+1, for n0

    展开全文
  • 问题很简单,但要注意以下点:1. 多提问,说明自己的假设条件2. 尽量设计并使用数据结构,注重面向对象设计3. 仔细考虑怎么设计数据结构来表示一线,选择都各优劣,须权衡取舍4. 不要假设斜率和y轴截距是...

    这个问题很简单,但要注意以下几点:

    1. 多提问,说明自己的假设条件

    2. 尽量设计并使用数据结构,注重面向对象设计

    3. 仔细考虑怎么设计数据结构来表示一条线,选择都各有优劣,须权衡取舍

    4. 不要假设斜率和y轴截距是整数

    5. 了解浮点表示法的限制,切记不要用==检查两个浮点数是否相等,而应该检查两者差值是否小于某个极小值

    public class LineIner {

    public double slope;

    public double yIntercept;

    static double Eplison = 0.000001;

    public LineIner(double k, double b) {

    slope = k;

    yIntercept = b;

    }

    public boolean intersect(LineIner line2) {

    return Math.abs(slope - line2.slope) > Eplison || Math.abs(slope - line2.slope) < Eplison;

    }

    }

    展开全文
  • 求空间中两条直线的交点 求交点坐标的问题完全可以用数学的方法求得结果的表达公式来解决啊 设P1(x1,y1,z1),P2(x2,y2,z2) L2:P3(x3,y3,z3),P4(x4,y4,z4) 记xi-xj=xij,ij是下标 (或xij,yij,zij表示该直线的方向...
  • 假设现在点集,需要拟合出最能够表达点集轮廓的几条直线,并求直线之间的交点。从点集中拟合直线可以采用的方法:随机抽样一致性(RANSAC),霍夫变换(though transform)c++ 程序代码/** @brief 计算直线的交点@...
  • 两条直线的交点坐标

    千次阅读 2020-08-07 18:13:36
    业务中需要计算两条折线图的交点坐标,假设折线图仅交点的情况,先求出x轴位置差最小(绝对值)的坐标,再分别拿前一节点,求出坐标,如果没有求出,则取下一节点进行计算 交点坐标方法(涉及求线段交点的...
  • 我们首先解释一下,两条线段相交的概念是指,存在一点,这点同时在两条线段上。方法一(解方程法):容易知道,线段$A_1A_2$上的点的集合为$A = A_1 * (1 - r_1) + A_2 * r_1$,其中$r_1 \i...
  • N条直线,两两相交,其交点各不不同,则产生的交点数目为N数中取2数的组合; 同时,也只有这种情况下(两两相交,也交点不同),分割的平面数最多, 数目为: 2 + (N-1)(N+2)/2. 这里求最少平面数没有意义,因为...
  • 判断两条线段/直线相交,并求交点

    千次阅读 2014-07-31 08:10:36
    1.矢量的概念:如果一线段的端点是次序之分的,我们把这种线段成为向线段(directed segment)。如果向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 2.矢量加减法:设二维
  • 计算几何-判断两条线段是否相交

    千次阅读 2018-04-30 13:59:48
    原理:如果两条线段相交,那么必须跨立,就是以一条线段为标准,另一条线段的两端点一定在这条线段的两段 也就是说a b两点在线段cd的两端,c d两点在线段ab的两端struct point() { double x,y; }; double multi...
  • 一、题目描述   二、思路: ... (3)直线n,与其他的n-1条直线最多n-1交点  归纳:n条直线互不平行且无三线共点的交点数最多为:Max = 1 +2 +……+(n-1)=n(n-1)/2;    n条直线有多少种...
  • 直线和线段相交平面相交直线-平面相交两平面相交平面相交实现intersect2D_2Segments()inSegment()intersect3D_SegmentPlane()intersect3D_2Planes()参考文献几何图元的相交是许多计算机图形学和建模应用中的重要...
  • 判断两条线段相交

    千次阅读 2018-04-30 23:54:01
    Tip :注意是线段相交~算法牢骚:主要是看错题.......来人,加BUFF)前提:线段AB,线段CD,矩形A,矩形B,直线AB快速排斥就是以线段AB作为矩形A的对线,线段CD作为矩形B的对线,看两个矩阵A,...
  • 两条平行线怎样相交

    万次阅读 2015-12-23 09:26:37
    欧几里德几何认为两条平行的直线永远无法相交,爱因斯坦站在宇宙空间的角度猜测两条平行线可能能相交,但到底如何相交,爱因斯坦也没有给出证明,科学家们至今也无法证明。   欧几里德是站在二维平面的角度证明...
  • 1、在同一个平面里,两条直线相交()个交点,形成()个角。2、两条直线相交直角时,这两条直线(),其中一条直线叫做另一条直线的(),交点又叫()。3、过直线外一点,可以画()条直线与已知直线垂直,可以画()条...
  • 看了一道水题,发现这个两个问题值得记录一下。...那么加一条直线 他最多与前n条直线有n交点 于是被它穿过的区域都被一分为二 那么增加的区域数就是穿过的区域 数 也就是这条直线自身被分成的段数 就是n+1
  • 两个二维向量v1(x1, y1)和v2(x2, y2)的外积v1×v2=x1y2-y1x2。如果由v1到v2是顺时针转动,外积为负,反之为正,为0表示二者方向相同(平行)。此外,文中涉及行例式和方程组的概念,请参阅线性代数的相关内容。 为...
  • 直线射线线段的相交判断

    万次阅读 2017-06-29 15:37:36
    本文主要介绍计算机图形学中线型对象的一些几何关系判断,包括直线、射线和线段。
  • 如何判断两条线段相交

    千次阅读 2011-11-23 00:26:13
    1.矢量的概念:如果一线段的端点是次序之分的,我们把这种线段成为向线段(directed segment)。如果向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 2.矢量加减法:设二维矢量P =
  • 计算直线的交点数

    2021-01-15 19:35:20
    平面上n条直线,且无三线共点,问这些直线能多少种不同交点数。 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。 输入 输入数据包含多测试实例,每测试实例占一行,每行包含一正整数n(n<=20),n...
  • FWIW,以下功能(在C中)都检测线交叉并确定交点。它基于Andre LeMothe的“ Windows游戏编程大师的诀窍...例如:(4 *(4 - 1)+ 12 *(7 - 1))/(17 * 4 + 12 * 10) = 844 / 0.88 = 0.44 那让我困惑了几个小时。:
  • 检测两个三角形是否重叠面积/相交的方法

    万次阅读 多人点赞 2017-02-15 23:12:58
    为什么要写这篇文章呢? 在宾夕法尼亚大学的路径规划公开课第二周... 而且, 自己拍脑袋想的东西不一定完善, 方法总是漏洞. 所以, 最后还是去Stack Overflow上寻找的答案, 选择了一高票答案自己研究了一下分享在这里.
  • 两条直线:4块; 三条直线:7块; 四条直线:11块;  方法一:当N=1时:f[N]=2; 当N大于1时,f[N]=f[N-1]+N。  方法二:f=(N/2)* (N+1)+1。 扩展:。。。。平面上nX型不明物体,使得划分形成的平面...
  • 判断两条线段是否相交

    千次阅读 2016-04-22 18:47:36
    条线段然后让你判断有几个交点。   所以思路就是判断两条线段是否相交,然后 for 一下就好了啊     那么怎么判断两条线段相交呢   1.   好像普遍用叉积的方法吧【 T^T 】 叉积: 矢量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,131
精华内容 3,652
关键字:

两条直线相交有几个角