博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intersecting Lines
阅读量:4678 次
发布时间:2019-06-09

本文共 4246 字,大约阅读时间需要 14 分钟。

Intersecting Lines
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 5339 Accepted: 2526

Description

We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a plane will intersect in one of three ways: 1) no intersection because they are parallel, 2) intersect in a line because they are on top of one another (i.e. they are the same line), 3) intersect in a point. In this problem you will use your algebraic knowledge to create a program that determines how and where two lines intersect.
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

The first line contains an integer N between 1 and 10 describing how many pairs of lines are represented. The next N lines will each contain eight integers. These integers represent the coordinates of four points on the plane in the order x1y1x2y2x3y3x4y4. Thus each of these input lines represents two lines on the plane: the line through (x1,y1) and (x2,y2) and the line through (x3,y3) and (x4,y4). The point (x1,y1) is always distinct from (x2,y2). Likewise with (x3,y3) and (x4,y4).

Output

There should be N+2 lines of output. The first line of output should read INTERSECTING LINES OUTPUT. There will then be one line of output for each pair of planar lines represented by a line of input, describing how the lines intersect: none, line, or point. If the intersection is a point then your program should output the x and y coordinates of the point, correct to two decimal places. The final line of output should read "END OF OUTPUT".

Sample Input

50 0 4 4 0 4 4 05 0 7 6 1 0 2 35 0 7 6 3 -6 4 -32 0 2 27 1 5 18 50 3 4 0 1 2 2 5

Sample Output

INTERSECTING LINES OUTPUTPOINT 2.00 2.00NONELINEPOINT 2.00 5.00POINT 1.07 2.20END OF OUTPUT
北大的数据太水了。能ac .在我们学校oj.。比赛时做了好久。。一直wa..一直用斜率做的。。
最后精度有问题。加fabs同样也不行。痛苦。。今天tao用向量1a,羡慕嫉妒恨啊。。
也用向量做了一次。。终于AC了。。
推公式好痛苦。。急需耐心。。
#include 
#include
#include
void debug( ) { #ifdef P freopen("1.in","r",stdin); freopen("2.out","w",stdout); #endif } int main( ) {
int N; debug( ); scanf("%d",&N); puts("INTERSECTING LINES OUTPUT"); while (N--) {
double x1,y1,x2,y2,x3,y3,x4,y4, p1,p2,q1,q2,b1,b2,v1,v2; scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1, &y1, &x2, &y2,&x3,&y3,&x4,&y4); p1 = x2 - x1; p2 = y2 - y1; q1 = x4 - x3; q2 = y4 -y3; if ( p1 * q2 == p2 * q1 ) {
if ( p1 == 0 ) {
if ( x1 == x3) puts("LINE"); else puts("NONE"); } else if (p2 == 0) {
if (y1 == y3) puts("LINE"); else puts("NONE"); } else { if ( ( y1 - p2 / p1 * x1 ) == (y3 - q2 / q1 * x3) ) puts("LINE"); else puts("NONE"); } } else {
if ( p1 * q1 + q2 * p2 == 0 ) {
if( p1 == 0) {
printf("POINT %.2lf %.2lf\n", x1, y3); } else if (q1 == 0) {
printf("POINT %.2lf %.2lf\n", x3, y1); } else {
v1 = (p1 * q1 * (y3 -y1) + p2 * q1 * x1 - p1 *q2 * x3) / ( p2 * q1 - p1 * q2); v2 = (q2 * p2 * (x3 - x1) + p1 * q2 * y1 - p2 * q1 * y3) / ( p1 * q2 - q1 * p2); printf("POINT %.2lf %.2lf\n", v1, v2); } } else { v1 = (p1 * q1 * (y3 -y1) + p2 * q1 * x1 - p1 *q2 * x3) / ( p2 * q1 - p1 * q2); v2 = (q2 * p2 * (x3 - x1) + p1 * q2 * y1 - p2 * q1 * y3) / ( p1 * q2 - q1 * p2); printf("POINT %.2lf %.2lf\n", v1, v2); } } } printf("END OF OUTPUT\n"); return 0; }

转载于:https://www.cnblogs.com/tangcong/archive/2011/08/02/2125553.html

你可能感兴趣的文章
Design Pattern --- Strategy
查看>>
mui列表跳转到详情页优化方案
查看>>
一些简单有用的方法合集
查看>>
Neutron 架构 - 每天5分钟玩转 OpenStack(67)
查看>>
详解JS设计模式
查看>>
CPSR寄存器
查看>>
Java基础50题test7—处理字符串
查看>>
保险行业电话外呼型呼叫中心方案
查看>>
自建型呼叫中心
查看>>
input file 文件上传,js控制上传文件的大小和格式
查看>>
Day 6 函数与模块
查看>>
WebApi请求原理
查看>>
[Node.js] node-persist: localStorage on the server
查看>>
jquery.event 研究学习之bind篇
查看>>
LOJ #108. 多项式乘法
查看>>
libusb开发指南
查看>>
SAS基础 -- 逻辑库不存在问题解决
查看>>
Servlet监听器统计在线人数
查看>>
第2章 数字之魅——寻找发帖“水王”
查看>>
eclipse jsp html 格式化 format
查看>>