思路:题目说的给定一个三角形,然后求三个内角的三等分线的交点坐标。
都是几何的几个基本函数,叉积,点乘,运算符重载,旋转,求模,求夹角。
// #pragma comment(linker, "/STACK:1024000000,1024000000") #include <iostream> #include <algorithm> #include <iomanip> #include <sstream> #include <string> #include <stack> #include <queue> #include <deque> #include <vector> #include <map> #include <set> #include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <limits.h> // #define DEBUG #ifdef DEBUG #define debug(...) printf( __VA_ARGS__ ) #else #define debug(...) #endif #define MEM(x,y) memset(x, y,sizeof x) using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> ii; const int inf = 1 << 30; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; struct Point{ double x,y; Point(){}; Point(double x,double y){ this->x = x; this->y = y; } /*运算符的重载*/ Point operator + (const Point& B)const{ return Point(this->x + B.x,this->y + B.y); } Point operator - (const Point& B)const{ return Point(this->x - B.x,this->y - B.y); } Point operator * (double B)const{ return Point(B * this->x,B * this->y); } Point operator - (double B)const{ return Point(this->x / B,this->y / B); } }; /*向量的点成*/ double Dot(const Point& A,const Point& B){ return A.x * B.x + A.y * B.y; } /*向量的模*/ double Lenght(const Point& A){ return sqrt(Dot(A,A)); } /*向量夹角*/ double Angle(const Point& A,const Point& B){ return acos(Dot(A,B)/Lenght(A)/Lenght(B)); } /*叉积*/ double Cross(const Point& A,const Point& B){ return A.x * B.y - A.y * B.x; } /*向量的旋转*/ Point Rotate(const Point& A,double rad){ return Point(A.x*cos(rad)-A.y*sin(rad),A.x*sin(rad)+A.y*cos(rad)); } Point GetLineIntersection(Point P,Point v,Point Q,Point w){ Point u = P - Q; double t = Cross(w,u)/Cross(v,w); return P+v*t; } Point get_D(Point A,Point B,Point C){ Point v1 = C - B, v2 = A - B; double rad = Angle(v1,v2)/3; Point v3 = Rotate(v1,rad); Point v4 = B - C, v5 = A - C; rad = Angle(v4,v5)/3; Point v6 = Rotate(v4,-rad); return GetLineIntersection(B,v3,C,v6); } int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int T;cin >> T; while(T--){ Point A,B,C; scanf("%lf%lf%lf%lf%lf%lf",&A.x,&A.y,&B.x,&B.y,&C.x,&C.y); Point D = get_D(A,B,C); Point E = get_D(B,C,A); Point F = get_D(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; }