uva 11178 计算集合模板题

来源:互联网 发布:爽肤水 面霜 知乎 编辑:程序博客网 时间:2024/04/28 04:54

题意:

求三角形行三个角三等分点射线交出的内三角形坐标。


代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long longusing namespace std;const int maxn = 1e6;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = acos(-1.0);const double ee = exp(1.0);/////////////////////////////////////////////////////struct Point{    double x, y;    Point(double x = 0, double y = 0) : x(x), y(y){}};typedef Point Vector;Vector operator + (Vector A, Vector B){    return Vector(A.x + B.x, A.y + B.y);}Vector operator - (Point A, Point B){    return Vector(A.x - B.x, A.y - B.y);}Vector operator * (Vector A, double p){    return Vector(A.x * p, A.y * p);}Vector operator / (Vector A, double p){    return Vector(A.x / p, A.y / p);}bool operator < (const Point& a, const Point& b){    return a.x < b.x || (a.x == b.x && a.y < b.y);}int dcmp(double x){    if (fabs(x) < eps)    {        return 0;    }    else    {        return x < 0 ? -1 : 1;    }}bool operator == (const Point& a, const Point& b){    return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;}double Dot(Vector A, Vector B){    return A.x * B.x + A.y * B.y;}double Length(Vector A){    return sqrt(Dot(A, A));}double Angle(Vector A, Vector B){    return acos(Dot(A, B) / Length(A) / Length(B));}double Cross(Vector A, Vector B){    return A.x * B.y - A.y * B.x;}double Area2(Point A, Point B, Point C){    return Cross(B - A, C - A);}Vector Rotate(Vector A, double rad){    return Vector(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));}Vector Normal(Vector A)//单位法线 turn left 90 degrees{    double L = Length(A);    return Vector(-A.y / L, A.x / L);}Point GetLineIntersection(Point P, Vector v, Point Q, Vector w){    Vector u = P - Q;    double t = Cross(w, u) / Cross(v, w);    return P + v * t;}//////////////////////////////////////////////////////Point getD(Point A, Point B, Point C){    Vector v1 = C - B;    double angle1 = Angle(A - B, v1);    v1 = Rotate(v1, angle1 / 3);    Vector v2 = B - C;    double angle2 = Angle(A - C, v2);    v2 = Rotate(v2, -angle2 / 3);    return GetLineIntersection(B, v1, C, v2);}Point readPoint(){    double x, y;    scanf("%lf %lf", &x, &y);    return Point(x, y);}int main(){    #ifdef LOCAL    freopen("in.txt", "r", stdin);    #endif // LOCAL    int ncase;    scanf("%d", &ncase);    while (ncase--)    {        Point A = readPoint();        Point B = readPoint();        Point C = readPoint();        Point D = getD(A, B, C);        Point E = getD(B, C, A);        Point F = getD(C, A, B);        printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", D.x, D.y, E.x, E.y, F.x, F.y);    }    return 0;}


0 0
原创粉丝点击