poj1269 intersecting lines【计算几何】
Your program will repeatedly read in four points that define two lines in the x-y plane and determine how and where the lines intersect. All numbers required by this problem will be reasonable, say between -1000 and 1000.
Input
Output
Sample Input
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
Sample Output
INTERSECTING LINES OUTPUT
POINT 2.00 2.00
NONE
LINE
POINT 2.00 5.00
POINT 1.07 2.20
END OF OUTPUT
求交点的水题
列一下直线的解析式推一下公式就行了
需要注意的是如果用斜率式要注意斜率不存在的情况 啊我好菜我都不记得直线别的解析式要怎么搞了
嗯觉得我写题目的速度实在是太慢了 今天过来也没有要读题结果这种水题还写了这么久
#include <iostream>
#include<stdio.h>
#include<math.h>
#define inf 0x3f3f3f3f
using namespace std;
struct point{
double x, y;
};
struct line{
point st, ed;
double k, b;
};
double getk(line a)
{
point ed = a.ed, st = a.st;
if(ed.x == st.x)return inf;
double k = (ed.y - st.y)/ (ed.x - st.x);
return k;
}
double getb(line a)
{
point ed = a.ed, st = a.st;
if(ed.x == st.x)return -inf;
double b = st.y - st.x * a.k;
return b;
}
point inter(line a, line b)
{
point p1 = a.st, p2 = a.ed, p3 = b.st, p4 = b.ed;
point in;
in.x = (p2.x - p1.x) * (p4.x - p3.x) * (p3.y - p1.y) + (p4.x - p3.x) * (p2.y - p1.y) * p1.x - (p2.x - p1.x) * (p4.y - p3.y) * p3.x;
in.x = in.x / ((p4.x - p3.x) * (p2.y - p1.y) - (p2.x - p1.x) * (p4.y - p3.y));
in.y = a.k * in.x + a.b;
return in;
}
int n;
point a, b, c, d;
line l1, l2;
int main()
{
while(scanf("%d",&n) != EOF){
cout<<"INTERSECTING LINES OUTPUT\n";
for(int i = 0; i < n; i++){
cin>>a.x>>a.y>>b.x>>b.y>>c.x>>c.y>>d.x>>d.y;
l1.st = a;l1.ed = b;
l2.st = c;l2.ed = d;
l1.k = getk(l1);l1.b = getb(l1);
l2.k = getk(l2);l2.b = getb(l2);
if(l1.k == l2.k){
if(l1.k == inf){
if(l1.st.x == l2.st.x){
cout<<"LINE\n";
}
else{
cout<<"NONE\n";
}
}
else if(l1.b == l2.b){
cout<<"LINE\n";
}
else{
cout<<"NONE\n";
}
}
else if(l1.k == inf){
point ans;
ans.x = l1.st.x;
ans.y = l2.k * ans.x + l2.b;
printf("POINT %.2f %.2f\n", ans.x, ans.y);
}
else if(l2.k == inf){
point ans;
ans.x = l2.st.x;
ans.y = l1.k * ans.x + l1.b;
printf("POINT %.2f %.2f\n", ans.x, ans.y);
}
else{
point ans = inter(l1, l2);
printf("POINT %.2f %.2f\n", ans.x, ans.y);
}
}
cout<<"END OF OUTPUT\n";
}
return 0;
}
poj1269 intersecting lines【计算几何】的更多相关文章
- POJ P2318 TOYS与POJ P1269 Intersecting Lines——计算几何入门题两道
rt,计算几何入门: TOYS Calculate the number of toys that land in each bin of a partitioned toy box. Mom and ...
- POJ1269:Intersecting Lines(判断两条直线的关系)
题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...
- POJ 1269 Intersecting Lines --计算几何
题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...
- POJ1269 Intersecting Lines[线段相交 交点]
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15145 Accepted: 66 ...
- [poj1269]Intersecting Lines
题目大意:求两条直线的交点坐标. 解题关键:叉积的运用. 证明: 直线的一般方程为$F(x) = ax + by + c = 0$.既然我们已经知道直线的两个点,假设为$(x_0,y_0), (x_1 ...
- POJ1269 Intersecting Lines 2017-04-16 19:43 50人阅读 评论(0) 收藏
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15478 Accepted: 67 ...
- POJ 1269 Intersecting Lines(计算几何)
题意:给定4个点的坐标,前2个点是一条线,后2个点是另一条线,求这两条线的关系,如果相交,就输出交点. 题解:先判断是否共线,我用的是叉积的性质,用了2遍就可以判断4个点是否共线了,在用斜率判断是否平 ...
- POJ1269:Intersecting Lines——题解
http://poj.org/problem?id=1269 题目大意:给四个点,求前两个点所构成的直线和后两个点所构成的直线的位置关系(平行,重合,相交),如果是相交,输出交点坐标. ——————— ...
- ●POJ 1269 Intersecting Lines
题链: http://poj.org/problem?id=1269 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...
随机推荐
- User Agent 里的各个字段含义
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.69 ...
- 修复日志,阻止给日志多次添加handlers时候重复打印的问题
1.解决如果多次添加handlers重复打印的问题.在__add_handlers方法中作出判断. 2.由get_logger_and_add_handlers和get_logger_without_ ...
- python--内置函数---13
原创博文,转载请标明出处--周学伟 http://www.cnblogs.com/zxouxuewei/ Python 内置函数 内置函数 abs() divmod() input() ...
- VSCode------.net core2.0发布后配置到Window Service 2008R2报500错误
如图: 解决方法: 出现这个错误是因为 IIS 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改. 要取消锁定可以运行命令行 %windir%\system32\ine ...
- PHP 源码加密模块 php-beast
PHP Beast是一个源码加密模块,使用这个模块可以把PHP源码加密并在此模块下运行. 为什么要用PHP-Beast? 有时候我们的代码会放到代理商上, 所以很有可能代码被盗取, 或者我们写了一个商 ...
- grid响应式布局
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ios开发之--随机背景颜色
记录个随机背景颜色的方法: + (UIColor*) randomColor{ NSInteger r = arc4random() % ; NSInteger g = arc4random() % ...
- 利用powershell进行windows日志分析
0x00 前言 Windows 中提供了 2 个分析事件日志的 PowerShell cmdlet:一个是Get-WinEvent,超级强大,但使用起来比较麻烦:另一个是Get-EventLog,使得 ...
- IIS中采用ISAPI-Rewrite防盗链
本规则支持白名单排除式防盗链,搜索引擎友好(不屏蔽),被盗链后的错误提示转向,支持各种文件类型,经作者亲验真的能用,第一时间在itmop.com原创发表,请继续往下阅读. 近来小站遇到了盗链问题,至使 ...
- OSG3.4编译FFMPEG插件
0.加入你要读a.mp4,那个正确的写法是osg::Image* image = osgDB::readImageFile("a.mp4.ffmpeg"); 1.在github上下 ...