POJ·Intersecting Lines
程序员文章站
2022-07-07 18:55:59
...
初见安~这里是传送门:POJ P1269 Intersecting Lines
Sol
依然是一个计算几何的入门题。首先题意是:给你n组数据,每组两条直线,问你是平行,相交还是重合。相交的话输出交点。
挺简单的哈。就是把两直线的解析式求出来,k相等为平行,k和b同时相等为重合。
但是计算几何就是卡细节。因为解析式有一个致命的条件就是。也就是说对于垂直于x轴的直线你只能特判。这样一波下来细节就有点多。
要点就这么多了。上代码——
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
typedef double ld;
int T;
signed main() {
scanf("%d", &T);
ld x1, y1, x2, y2, k1, k2, b1, b2, x, y;
puts("INTERSECTING LINES OUTPUT");
while(T--) {
bool flag1 = false, flag2 = false;
x = y = 0.0;
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
if(x1 != x2) k1 = (y2 - y1) / (x2 - x1), b1 = y1 - x1 * k1;
else flag1 = true, b1 = x1;//分别求解析式
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
if(x1 != x2) k2 = (y2 - y1) / (x2 - x1), b2 = y1 - x1 * k2;
else flag2 = true, b2 = x1;
if(flag1 && flag2) {//两条线都垂直于x轴
if(b1 == b2) puts("LINE");
else puts("NONE");
}
else if(flag1) x = b1, y = k2 * x + b2, printf("POINT %.2lf %.2lf\n", x, y);
else if(flag2) x = b2, y = k1 * x + b1, printf("POINT %.2lf %.2lf\n", x, y);
else if(k1 == k2 && b1 == b2) puts("LINE");//正常判重合和平行
else if(k1 == k2) puts("NONE");
else {
x = (b2 - b1) / (k1 - k2), y = k1 * x + b1;
printf("POINT %.2lf %.2lf\n", x, y);
}
}
puts("END OF OUTPUT");
}
超级基础的题目++
迎评:)
——End——
上一篇: Parallel GC
下一篇: AES 秘钥长度问题:java.security.InvalidKeyException: Illegal key size or default parameters
推荐阅读
-
kuangbin专题专题四 Frogger POJ - 2253
-
kuangbin专题 专题一 简单搜索 棋盘问题 POJ - 1321
-
kuangbin专题 专题一 简单搜索 Prime Path POJ - 3126
-
POJ:1017-Packets(贪心+模拟,神烦)
-
poj1637 Sightseeing tour(混合图欧拉回路)
-
POJ1862 Stripies 贪心 B
-
POJ2431 优先队列+贪心 - biaobiao88
-
POJ3233Matrix Power Series(矩阵快速幂)
-
4 Values whose Sum is 0 POJ - 2785
-
POJ:2393-Yogurtfactory 编程题