UVa 11178 Morley's Theorem

计算几何使用模板题

#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();
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值