标签:des style http java color strong
2 0.00 0.00 1.00 1.00 0.00 1.00 1.00 0.00 3 0.00 0.00 1.00 1.00 0.00 1.00 1.00 0.000 0.00 0.00 1.00 0.00 0
1 3这是一道几何题, 就是在于你是否会判断两条直线直接是否有交点的方法。剩下就很容易了。判断AB和CD两线段是否有交点:同时满足两个条件:(‘x‘表示叉积)1.C点D点分别在AB的两侧.(向量(ABxAC)*(ABxAD)<=0)2.A点和B点分别在CD两侧.(向量(CDxCA)*(CDxCB)<=0)#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> using namespace std; struct Node { double x1, y1, x2, y2; }point[105]; int n; double work(double x1, double y1, double x2, double y2) { return x1 * y2 - x2 * y1; } bool judge(int i, int j) { double a = work(point[i].x1 - point[j].x1, point[i].y1 - point[j].y1, point[i].x1 - point[i].x2, point[i].y1 - point[i].y2); double b = work(point[i].x1 - point[i].x2, point[i].y1 - point[i].y2, point[i].x1 - point[j].x2, point[i].y1 - point[j].y2); a = a * b; double c = work(point[j].x1 - point[i].x1, point[j].y1 - point[i].y1, point[j].x1 - point[j].x2, point[j].y1 - point[j].y2); double d = work(point[j].x1 - point[j].x2, point[j].y1 - point[j].y2, point[j].x1 - point[i].x2, point[j].y1 - point[i].y2); c = c * d; if(a >= 0 && c >= 0) return true; return false; } int main() { while(cin >> n, n){ for(int i = 0; i < n; i++) cin >> point[i].x1 >> point[i].y1 >> point[i].x2 >> point[i].y2; int count = 0; for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) if(judge(i, j)) count++; } cout << count << endl; } return 0; }
HDU 1086:You can Solve a Geometry Problem too,布布扣,bubuko.com
HDU 1086:You can Solve a Geometry Problem too
标签:des style http java color strong
原文地址:http://blog.csdn.net/u013487051/article/details/37591587