UVa 11178 Morley's Theorem

来源:互联网 发布:μcos ii源码v2.86 编辑:程序博客网 时间:2024/05/16 12:01

计算几何使用模板题

#include <cstdio>#include <cmath>#include <iostream>using namespace std;//Templatestruct 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;}//MAINP 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();  }}
0 0