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

      

     

  • 相关阅读:
    js对象深拷贝
    数组去重
    css布局之双飞翼布局
    css布局之圣杯布局
    在浏览器中输入URL并回车后都发生了什么?
    浮动和清除浮动
    Javascript 构造函数模式、原型模式
    Javascript之对象组合继承
    js可以随意拖拽的div的实现
    博客美化 之博客的魔方效果
  • 原文地址:https://www.cnblogs.com/lzeffort/p/5958622.html
Copyright © 2011-2022 走看看