• POJ 1269 计算几何 求直线交点


    题意:

    此题给出N组直线,每组2条直线。

    如果共线则输出LINE,相交则输入点坐标,否则输出NONE(平行)。

    题解:

    点积判断平行和相交,有向面积(分点公式)求交点(不知道写的对不对,至少能过这个题,貌似数据很弱的样子)。

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <algorithm>
     6 #include <cmath>
     7 
     8 #define EPS 1e-7
     9 
    10 using namespace std;
    11 
    12 struct PO
    13 {
    14     double x,y;
    15 }li[3][2];
    16 
    17 inline double cross(const PO &o,const PO &a,const PO &b)
    18 {
    19     return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);
    20 }
    21 
    22 inline void read()
    23 {
    24     for(int i=1;i<=2;i++)
    25         scanf("%lf%lf%lf%lf",&li[i][0].x,&li[i][0].y,&li[i][1].x,&li[i][1].y);
    26 }
    27 
    28 inline bool judge_parallel(PO s[],PO t[])
    29 {
    30     return fabs((s[1].y-s[0].y)*(t[1].x-t[0].x)-(s[1].x-s[0].x)*(t[1].y-t[0].y))<EPS;
    31 }
    32 
    33 inline bool judge_same(PO s[],PO t[])
    34 {
    35     return fabs((s[1].y-s[0].y)*(t[1].x-s[0].x)-(s[1].x-s[0].x)*(t[1].y-s[0].y))<EPS;
    36 }
    37 
    38 inline PO get_intersection(PO s[],PO t[])
    39 {
    40     PO ans;
    41     double k2=1.0;
    42     double k1=cross(s[0],t[1],t[0])/cross(s[1],t[0],t[1]);
    43     ans.x=(k2*s[0].x+k1*s[1].x)/(k1+k2);
    44     ans.y=(k2*s[0].y+k1*s[1].y)/(k1+k2);
    45     return ans;
    46 }
    47 
    48 inline void go()
    49 {
    50     if(judge_parallel(li[1],li[2]))
    51     {
    52         if(judge_same(li[1],li[2])) puts("LINE");
    53         else puts("NONE");
    54         return;
    55     }
    56     PO ans=get_intersection(li[1],li[2]);
    57     printf("POINT %.2lf %.2lf\n",ans.x,ans.y);
    58 }
    59 
    60 int main()
    61 {
    62     int cas; scanf("%d",&cas);
    63     puts("INTERSECTING LINES OUTPUT");
    64     while(cas--) read(),go();
    65     puts("END OF OUTPUT");
    66     return 0;
    67 }
  • 相关阅读:
    poj 3304 Segments 直线 线段求交
    poj 1077 Eight 八数码 A*算法
    UESTC 1447 Area 凸包+旋转卡壳 求最大四边形面积
    ACM计算几何题目推荐(第二期)
    poj 2398 Toy Storage 叉乘
    ACM计算几何题目推荐 (第一期)
    (转载)Telnet协议详解及使用C# 用Socket 编程来实现Telnet协议
    jquery 表情编辑器
    (读书笔记)Asp.net Mvc 与WebForm 混合开发
    (转载)精简说明C#最基本的Socket编程示例
  • 原文地址:https://www.cnblogs.com/proverbs/p/2855417.html
Copyright © 2020-2023  润新知