zoukankan      html  css  js  c++  java
  • 计算几何练习题――直线交点

    描述

    给定直线上L1上的两点P1,P2(P1和P2不重合)和直线L2上的两点P3,P4(P3和P4不重合),判断直线L1和L2是否相交。如果相交则需要求出交点。我们这里所说的直线相交是指有且只有一个点P,它既落在L1上又落在L2上。

    输入

     

    输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1,P2的坐标值,第二行为P3,P4的坐标值,比如下面的数据
    1
    0 0 1 1
    2 2 3 3
    表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(1,1),P3(2,2),P4(3,3)

    输出

     

    判断每组数据中的直线L1和L2是否相交,如果相交输出交点的坐标,并保留2位小数,如果不想交输出NO。每组数据输出占一行。注意这里的坐标格式为:

    (x,y)
    其中x,y为交点坐标,中间不含任何空格。

    样例输入

    2
    0 0 1 1
    2 2 3 3
    0 0 1 1
    0 1 1 0

    样例输出

    NO
    (0.50,0.50)

    题解:http://blog.csdn.net/abcjennifer/article/details/7584628

    code:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int main()
    {
        int t;
        double x0,y0,x1,y1,x2,y2,x3,y3,a0,a1,b0,b1,c0,c1;
        cin>>t;
        for(int i=0; i<t; i++)
        {
            cin>>x0>>y0>>x1>>y1>>x2>>y2>>x3>>y3;
            a0 = y0 - y1;
            b0 = x1 - x0;
            c0 = x0*y1 - x1*y0;
    
        a1 = y2-y3;
        b1 = x3-x2;
        c1 = x2*y3-x3*y2;
            double result = (a0*b1 - a1*b0);
            if((int)result == 0)
            {
                printf("NO
    ");
            }else{
               double x = (b0*c1 - b1*c0)/result;
               double y = (a1*c0 - a0*c1)/result;
               printf("(%.2f,%.2f)
    ",x,y);
            }
        }
     return 0;
    }
    

      

     

  • 相关阅读:
    HDU 1536 sg-NIM博弈类
    Codeforces Round #361 (Div. 2)
    计蒜课复赛 联想电脑
    codevs3044 线段树+扫描线
    yii设置返回数据为JSON格式
    mysql中的查询优化
    计算两个经纬度间的距离
    一维数组打乱顺序shuffle函数
    array_filter可以去除数组中value为空的键值
    二维数组按某值分组求和
  • 原文地址:https://www.cnblogs.com/lzeffort/p/5958622.html
Copyright © 2011-2022 走看看