精华内容
下载资源
问答
  • 讨论各种情况,直线不存在,相交。平行。重合,无穷多个点。 代码: #include #include #include #include using namespace std; int main() { int a,b,c,aa,bb,cc; while(~scanf("%d%d%d%d%d%d",&a,&b...

    You are given two set of points. The first set is determined by the equation A1x + B1y + C1 = 0, and the second one is determined by the equation A2x + B2y + C2 = 0.

    Write the program which finds the number of points in the intersection of two given sets.

    Input

    The first line of the input contains three integer numbers A1, B1, C1 separated by space. The second line contains three integer numbers A2, B2, C2 separated by space. All the numbers are between -100 and 100, inclusive.

    Output

    Print the number of points in the intersection or -1 if there are infinite number of points.

    Example
    Input
    1 1 0
    2 2 0
    
    Output
    -1
    
    Input
    1 1 0
    2 -2 0
    
    Output

    1




    思路就是用乘法逃过除数为零的尴尬。讨论各种情况,直线不存在,相交。平行。重合,无穷多个点。

    代码:

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<math.h>
    using namespace std;
    int main()
    {
        int a,b,c,aa,bb,cc;
        while(~scanf("%d%d%d%d%d%d",&a,&b,&c,&aa,&bb,&cc))
        {
            if(!a&&!b&&c||!aa&&!bb&&cc)
            {
                printf("0\n");
                return 0;
            }
            if(a*bb==b*aa)
            {
                if(!a&&!aa)
                {
                    if(b*cc==c*bb)
                        printf("-1\n");
                    else
                        printf("0\n");
    
                }
                else
                {
                    if(a*cc==c*aa)
                        printf("-1\n");
                    else
                        printf("0\n");
    
                }
            }
            else
                printf("1\n");
        }
    }


    展开全文
  • 3. 仔细考虑怎么设计数据结构来表示线,选择都各有优劣,须权衡取舍 4. 不要假设斜率和y轴截距是整数 5. 了解浮点表示法的限制,切记不要用==检查个浮点数是否相等,而应该检查两者差值是否小于某个极小值 ...

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

    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;
    	}
    }
    


    展开全文
  • 给出两条直线(每条直线给出其上两个点),要求判断出这两条直线的关系:平行,同线或相交。如果相交还要求出交点坐标。 【输入描述】: 第一行一个数T,表示T组数据; 每组数据输入一行,8个数,分别表示ax,ay,bx,...

                                       直线与直线相交

    【题目描述】:

    给出两条直线(每条直线给出其上两个点),要求判断出这两条直线的关系:平行,同线或相交。如果相交还要求出交点坐标。

    【输入描述】:

    第一行一个数T,表示T组数据;

    每组数据输入一行,8个数,分别表示ax,ay,bx,by,cx,cy,dx,dy,四个点的横纵坐标,其中前两个点表示一条直线,后两个点表示另一条直线。

    【输出描述】:

    对于每组数据输出一行;

    如果平行输出“NONE”;如果共线输出“LINE”;如果相交输出交点的横纵坐标(精确到小数点后两位)。

    【样例输入】:

    5
    0 0 4 4 0 4 4 0
    5 0 7 6 1 0 2 3
    5 0 7 6 3 -6 4 -3
    2 0 2 27 1 5 18 5
    0 3 4 0 1 2 2 5

    【样例输出】:

    2.00 2.00
    NONE
    LINE
    2.00 5.00
    1.07 2.20

    【时间限制、数据范围及描述】:

    时间:1s 空间:64M

    T<=10,000

    -10000<=所有点坐标<=10000

    直线与直线有三种关系,相交平行和共线。
            

    那么首先应该需要判断关系,就是跨立实验。用叉积判断两条直线是否相交(先取一条直线,看另外两点是否在其两边,再取另一条直线操作) 如果两次实验结果都是0,说明点相互在一条直线上,完成共线判断。
          不然的话如果通过叉积算出两条直线极角相等,则说明两线平行,完成平行判断。
           所以最后不平行不共线,就一定相交了!

    算个解析式,求个交点即可了!
            但这里有一点需要特别注意,直线有可能和y轴平行(这样算k的时候分母为0,会炸掉),所以需要特别判断一下。当然与X轴平行时无所谓的
    因为k可以为0,就不用管了。 

    具体可以参考本蒟蒻写的程序

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int t;
    int x1,y1,x2,y2,x3,y3,x4,y4;
    
    int chaji(int a,int  b,int  c,int d)
    {  return a*d-b*c;  }  //算叉积 
    
    void jiaodian(){//计算解析式并找交点 
      double k1,k2,b1,b2,x,y;// (x1,y1)和(x2,y2)--y=k1x+b1 (x3,y3)和(x4,y4)--y=k2x+b2 
      k1=(double)(((y2-y1)*1.0)/((x2-x1)*1.0));//解析式 
      b1=(double)(y1-k1*x1);
      k2=(double)(((y4-y3)*1.0)/((x4-x3)*1.0));
      b2=(double)(y3-k2*x3);   
      x=(double)((b2-b1)/(k1-k2));//求交点 
      y=(double)(x*k1+b1);
      if(x1==x2)//特殊判断  
      {x=(double)(x1);
       y=(double)(k2*x1+b2);}
      if(x3==x4)
       {x=(double)(x3);
        y=(double)(k1*x3+b1);}
        printf("%.2f %.2f\n",x,y);
       return;
        }
    int main(){
        //freopen("test2.in","r",stdin);
        //freopen("test2.out","w",stdout);
        cin>>t;
        while(t--)
        {  cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;
           if(chaji(x2-x1,y2-y1,x3-x1,y3-y1)==0&&chaji(x2-x1,y2-y1,x4-x1,y4-y1)==0)
            cout<<"LINE"<<endl;//共线判断 
           else if(chaji(x2-x1,y2-y1,x4-x3,y4-y3)==0) 
            cout<<"NONE"<<endl;//平行判断 
           else 
           jiaodian();//相交交点 
        }
        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&plus;&plus; 根据两点式方法求直线并求两条直线的交点

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

    Intersecting Lines--POJ1269&lpar;判断两条直线的关系 &amp&semi;&amp&semi; 求两条直线的交点&rpar;

    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&lpar;两条直线交点&rpar;

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

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

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

    求空间内两条直线的最近距离以及最近点的坐标&lpar;C&plus;&plus;&rpar;

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

    POJ1269&colon;Intersecting Lines(判断两条直线的关系)

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

    两条直线(蓝桥杯)二分枚举&plus;RMQ

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

    随机推荐

    解决&OpenCurlyDoubleQuote;Dynamic Web Module 3&period;0 requires Java 1&period;6 or newer&period;”错误

    一.问题描述 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与数据绑定&lpar;Xamarin&rpar;

    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&period;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 ...

    展开全文
  • 分析: 题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定...先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线: p1p2q1 共线 且 p
  • 给定直角坐标系上的两条直线,确定这两条直线会不会相交。 线段以斜率和截距的形式给出,即double s1,double s2,double y1,double y2,分别代表直线1和2的斜率(即s1,s2)和截距(即y1,y2),请返回一个bool,...
  • 两条线段是否相交

    2016-11-12 22:31:28
    可以通过叉积来判断两条线段是否相交,ab×ac与ab×ad的结果为异号,并且cd×ca与cd×cb的结果为异号,则两条直线相交。 点c、d分别在线段A所在直线的两侧,同时点a、b分别在B所在直线的两侧,则可以确定A与B相交. ...
  • 利用eigen库内矩阵运算函数,写了LinesPositionRelationship3D类。实现了确定三维空间任意两条直线位置关系并获得在平行和交错条件下的两直线距离的功能。该类是在确定空间两圆柱轴线关系下的副产品。
  • 分析: 题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点...先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。 判断共线: p1p2q1 共线 且 p...
  • 程序员面试金典——7.3判断直线相交 Solution1:我的答案,虽然能AC,但不是很讲究,吸收教训 class CrossLine { public: bool checkCrossLine(double s1, double s2, double y1, double y2) { // write code ...
  • 7.3 Given two lines on a Cartesian plane, determine whether ...那么我们首先要写个直线的类来表示直线,最常见的表示方法为y=kx+b,k为斜率,b为与y轴的交点,然后我们来考虑什么情况下两条直线相交,首先,...
  • 判断两直线是否相交 并 求两直线交点 首先判断两直线的向量v⃗\vec vv与w⃗\vec ww的叉积是否为0,若为0说明向量作为邻边构成的平行四边形面积为0,说明向量平行或重合,则两直线无交点。 否则就相交,然后根据...
  • 每组数据为两行,包含8个整数,分别表示四个坐标,(X1,Y1)至(X4,Y4),0,Yi,前两个坐标和后两个坐标分别确定一条直线,计算这两条直线是否相交? 输出 两条直线相交,输出Yes,若不相交,输出No,每个...
  • 链表相交实际上是两条链表汇成一条链表,不可能出现和直线一样的相交,因为链表中节点的指针只能指向一个对象,所以相交的结果是两条链表在某一个节点汇成一条链表。清楚了这个问题,接下来就该思考如何求得这个相交...
  • 本文中假设这两条直线不共线,即这两条直线既不重合也不相交。 1.如果这两条直线是以两个端点的形式给出,那么假设直线l0的两端点为:P0、P1;直线l1的两端点为Q0、Q1,;求两直线的最短距离? 直线l0我们可以用...
  • (算法题)两条相交的线

    千次阅读 2020-08-14 22:33:34
    同学面试华为手撕算法...(Leetcode 1035)我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。 现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他
  • 具体数学---直线相交

    2019-10-08 15:00:35
    两条,可以分为4个区域。那么n条直线最多可以把一个平面空间分为多少各区域?针对这个问题,我们任然是采用三步走。 简单 公式或者递推 通项公式 Step 1 看看简单情况, n=0→T(0)=1n=0 \rightarrow T(0)=...
  • const double EPS = 1e-5; // 计算精度const int CROSS = 0; // 两直线相交const int COLINE = 1; // ...
  • 两条直线的交点,最常见的写法是列出两条直线的方程,联立求解。 但这种办法的弊端很大: 1 )算法是坐标系相关的,要考虑直线是水平还是垂直,写出很多判断条件,增加了程序的不稳定性 2)即使两直线都是斜的...
  • abxac * abxad >= 0 说明以ab线段为准,c,d点都在同一侧,说明个线段不会相交 cdxca * cdxcb >=0 说明以cd线段为准,a,b点都在同一侧,说明个线段不会相交 交点为o 然后根据线段定义 以a为起点,b-a为u, t...
  • opencv求解两条直线的交点

    千次阅读 2018-12-09 11:46:16
    假设现在有一个点集,需要拟合出最能够表达点集轮廓的几条直线,并求直线之间的交点。 从点集中拟合直线可以采用的方法:随机抽样一致性(RANSAC),霍夫变换(though transform) c++ 程序代码 /** @brief 计算直线...
  • 所以思路就是判断两条线段是否相交,然后for一下就好了啊 那么怎么判断两条线段相交呢 1.好像普遍用叉积的方法吧【T^T】 叉积:矢量的矢量积 记作a×b,其模等于由a和b作成的平行四边形的面积,方向与平行...
  • Opencv学习笔记-----求取两条直线的交点坐标

    万次阅读 多人点赞 2016-12-15 12:06:07
    在一个2维平面中有两直线(点到点、(点到点,这两条直线的交点用行列式表示如下: 行列式可变形写作: 该交点是由4个点、两两一组确定的线段所在位置的直线的交点 根据贝塞尔参数可以将两直线定义为: 其中...
  • (顺逆时针是指向量平移至起点相连,从某个方向旋转到另一个向量小于180度)。如下图: 在上图中,OA×OB = 2 > 0, OB在OA的逆时针方向;OA×OC = -2 < 0,OC在OA的顺势针方向。即叉乘结果大于0,后一个在...
  • 2)平面中的两条直线的相对位置有三种情况,相交、平行、重合; 假设有两条直线,他的方程为a1x+b1y=c1;a2x+b2y=c2,判断两条直线的位置关系的代码如下: //----------------- //a1x+b1y=c1 //a2x+b2y=c2 //----...
  • 题目写太久现在都快忘记题意是什么了。 赤果果的WA了五六七发,后来改的快和kuangbin的题解一样了。...给你若干条线段,问你能不能画出一条直线,让所有的线段投影在这条直线上至少有一个点是重合的。
  • 两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交。 那给定两条直线怎么判断他们的位置关系呢。还是用到向量的叉积 例题:POJ1269 题意:这道题是给定四个点p1, p2, p3, p4,直线L1,L2分别穿过前两个和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,432
精华内容 4,972
关键字:

两条直线相交的表示方法