计算几何使用模板题
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
//Template
struct P {
double x, y;
P(double x = 0, double y = 0) : x(x), y(y) {}
void read() {
scanf("%lf%lf", &x, &y);
}
void print() {
printf("%.6f %.6f", x, y);
}
};
typedef P V;
V operator + (V a, V b) {
return V(a.x+b.x, a.y+b.y);
}
V operator - (P a, P b) {
return V(a.x-b.x, a.y-b.y);
}
V operator * (V a, double p) {
return V(a.x*p, a.y*p);
}
V operator / (V a, double p) {
return V(a.x/p, a.y/p);
}
const double eps = 1e-10;
int dcmp(double x) {
if (abs(x) < eps) return 0;
else return x < 0 ? -1 : 1;
}
bool operator == (P a, P b) {
return dcmp(a.x-b.x) == 0 && dcmp(a.y-b.y) == 0;
}
double operator * (V a, V b) {
return a.x*b.x + a.y*b.y;
}
double norm(V a) {
return sqrt(a*a);
}
double det(V a, V b) {
return a.x*b.y - a.y*b.x;
}
double angle(V a, V b) {
return acos(a*b / norm(a) / norm(b));
}
V rotate(V a, double rad) {
return V(a.x*cos(rad) - a.y*sin(rad), a.x*sin(rad)+a.y*cos(rad));
}
//
P getLineIntersection(P p, V v, P q, V w) {
V u = p - q;
double t = det(w, u) / det(v, w);
return p + v*t;
}
//MAIN
P get(P a, P b, P c) {
V v1 = c - b;
double a1 = angle(a-b, v1);
v1 = rotate(v1, a1/3);
V v2;
v2 = b - c;
double a2 = angle(a-c, v2);
v2 = rotate(v2, -a2/3);
return getLineIntersection(b, v1, c, v2);
}
void solve() {
P A, B, C;
A.read();
B.read();
C.read();
P D = get(A, B, C);
P E = get(B, C, A);
P F = get(C, A, B);
D.print();
cout << ' ';
E.print();
cout << ' ';
F.print();
cout << endl;
}
int main() {
//freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while (t--) {
solve();
}
}