uva 11800 基础几何的图形判断
来源:互联网 发布:mv软件 编辑:程序博客网 时间:2024/05/18 01:58
#include <bits/stdc++.h>using namespace std;int T, kase, a, b;char res[7][30] = {"", "Square", "Rectangle", "Rhombus", "Parallelogram", "Trapezium", "Ordinary Quadrilateral"};struct Point{int x, y;Point(int x = 0, int y = 0): x(x), y(y) { }Point(const Point& rhs) : x(rhs.x), y(rhs.y) { }};typedef Point Vector;Vector operator + (const Vector& A, const Vector& B) { return Vector(A.x + B.x, A.y + B.y); }Vector operator - (const Point& A, const Point& B) { return Vector(A.x - B.x, A.y - B.y); }Vector operator * (const Vector& A, int p) { return Vector(A.x * p, A.y * p); }bool operator == (const Point& a, const Point &b){return a.x == b.x && a.y == b.y;}bool operator < (const Point& p1, const Point& p2){return p1.x < p2.x || (p1.x == p2.x && p1.y < p2.y);}int Dot(const Vector& A, const Vector& B) { return A.x * B.x + A.y * B.y; }int Cross(const Vector& A, const Vector& B) { return A.x * B.y - A.y * B.x; }int Length(const Vector& A) {return Dot(A, A);}vector<Point> ConvexHull(vector<Point>& p){// 预处理,删除重复点sort(p.begin(), p.end());p.erase(unique(p.begin(), p.end()), p.end());int n = p.size();int m = 0;vector<Point> ch(n + 1);for (int i = 0; i < n; i++){while (m > 1 && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) < 0) m--;ch[m++] = p[i];}int k = m;for (int i = n - 2; i >= 0; i--){while (m > k && Cross(ch[m - 1] - ch[m - 2], p[i] - ch[m - 2]) < 0) m--;ch[m++] = p[i];}if (n > 1) m--;ch.resize(m);return ch;}Point read_point(){scanf("%d%d", &a, &b);return Point(a, b);}int solve(){vector<Point> p;for (int i = 0; i < 4; i++)p.push_back(read_point());vector<Point> points = ConvexHull(p);if (points.size() != 4) return 6;Point& A = points[0], & B = points[1], & C = points[2], & D = points[3];Vector BA = B - A, DA = D - A, CD = C - D, CB = C - B;int lBA = Length(BA), lDA = Length(DA), lCD = Length(CD), lCB = Length(CB);if (Dot(BA, DA) == 0 && Dot(DA, CD) == 0 && Dot(CD, CB) == 0)if (lBA == lDA) return 1; else return 2;if (lBA == lCD && lDA == lCB)if (lBA == lDA) return 3; else return 4;if (Cross(BA, CD) == 0 || Cross(DA, CB) == 0) return 5;return 6;}int main(int argc, char const *argv[]){scanf("%d", &T);while (T--)printf("Case %d: %s\n", ++kase, res[solve()]);return 0;}
给无序的4个点,问是什么四边形。
自然是先凸包算法排序,
三个角90度,+临边相等——正方形,-长方形
对边相等,+临边相等——菱形,-平行四边形
某对边平行,梯形,否则普通四边形。
0 0
- uva 11800 基础几何的图形判断
- uva 12300 几何基础
- 图形的几何变换
- UVA 11178 Audiophobia 几何基础
- UVA 11800 —— Determine the Shape(几何基础)
- 二维图形的几何变换
- 二维图形的几何变换
- 二维图形的几何变换
- 三维图形的几何变换
- uva 11178 morley定理(计算几何基础)
- uva 11796 Dog Distance(计算几何, 基础)
- UVa 10256 (计算几何基础摸板)
- UVA 11437 Triangle Fun 几何基础
- uva 11800 Determine the Shape 判断四边形形状(计算几何)
- 关于图形的判断
- 判断多边形凹凸(计算几何基础)
- POJ 1584 计算几何基础判断
- 图形结构上的问题----几何算法
- 支持向量机--Hard-Vargin Support Vector Machine
- MySQL--BENCHMARK()函数
- ALGO-117友好数函数VIP试题
- 成长之路
- leetcode--Isomorphic Strings
- uva 11800 基础几何的图形判断
- c++
- sublime Text注册码
- C++ memset
- Codeforces Round #339 (Div. 2) D. Skills
- <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: java.lang.NullPointerException
- HDOJ-2057(A + B Again)
- 1030. 完美数列(25)
- 关闭/收起键盘方法总结