莫勒定理,证明如下:

请结合下图看代码:

#include <iostream>
#include <math.h>
#include <iomanip> using namespace std; #define pi acos(-1.0) double lawofcosine(double a, double b, double c)
{
return acos((a*a+b*b-c*c)/(2.0*a*b));
} double getangle(double x1, double y1, double x2, double y2)
{
return atan2(1.0*(y2-y1),1.0*(x2-x1));
} double getdis(double x1, double y1, double x2, double y2)
{
return sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
} double solveequation_x(double x1, double y1, double x2, double y2, double k1, double k2)
{
return (y1-y2+k2*x2-k1*x1)/(k2-k1);
} typedef struct point
{
double x, y;
} p; int main()
{
p A, B, C, D, E, F;
int n;
cin>>n;
while(n--)
{
cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y; double a,b,c; //cout << A.x << ' ' << A.y << ' ' << B.x << ' ' << B.y << ' ' << C.x << ' ' << C.y << endl; a = getdis(B.x,B.y,C.x,C.y);
b = getdis(C.x,C.y,A.x,A.y);
c = getdis(B.x,B.y,A.x,A.y); //cout << "dis" << ' ' << a << '!' << b << '!' << c << endl; double alpha = lawofcosine(b,c,a);
double beta = lawofcosine(a,c,b);
double gama = lawofcosine(a,b,c); //cout << "angle" << ' ' << alpha * 180 / pi << '@' << beta * 180 / pi << '@' << gama * 180 / pi<<endl; double theta1 = getangle(A.x,A.y,B.x,B.y);//k(AB)angle
double theta2 = getangle(B.x,B.y,C.x,C.y);//k(CB)angle
double theta3 = getangle(A.x,A.y,C.x,C.y);//k(AC)angle //cout << "theta" << ' ' << theta1 * 180 / pi << '#' << theta2 * 180 / pi<< '#' << theta3 * 180 / pi<< endl; double k1 = tan(theta2 + beta / 3.0);//k(BD)
double k2 = tan(theta3 + gama / 3.0);//k(CE)
double k3 = tan(theta3 + 2.0 * gama / 3.0);//k(CD)
double k4 = tan(theta1 + 2.0 * alpha / 3.0);//k(AE) //cout << "k" << '$' << k1 * 180 / pi << '$' << k2 * 180 / pi << '$' << k3 * 180 / pi << '$' << k4 * 180 / pi << endl; D.x = (k1 * B.x - k3 * C.x + C.y - B.y) / (k1 - k3);
D.y = D.x * k1 - k1 * B.x + B.y; E.x = (k2 * C.x - k4 * A.x + A.y - C.y) / (k2 - k4);
E.y = E.x * k2 - k2 * C.x + C.y; double x1, y1, x2, y2;
x2 = D.x, y2 = D.y, x1 = E.x, y1 = E.y; double alpha1 = atan2((y1-y2),(x1-x2));
double l = sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
double x3=x2+l*cos(alpha1+pi/3);
double y3=y2+l*sin(alpha1+pi/3); F.x = x3, F.y = y3; cout << fixed << setprecision(7) << D.x << ' ' << D.y << ' ' << E.x << ' ' << E.y << ' ' << F.x << ' ' << F.y << endl;
}
}

变成解析几何就太麻烦了,可是欧氏几何又没有现成的关系

UVa11187的更多相关文章

随机推荐

  1. git —— pycharm+git管理/编辑项目

    pycharm+git  管理/编辑项目 一.pycharm中配置github 二.配置git 并不是配置了GitHub就可以的.还需要配置一下Git 前提是本地中已经安装了git 三.把本地项目上传 ...

  2. django(2)基本指令

    打开 Linux 或 MacOS 的 Terminal (终端)直接在 终端中输入这些命令(不是 python 的 shell中) 如果是 windows 用 cmd(开始 搜索 cmd 或者 快捷键 ...

  3. 基于docker 搭建Prometheus+Grafana

    一.介绍Prometheus Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采 ...

  4. 2016-2017-2 20155309 南皓芯《java程序设计》第八周学习总结

    教材学习内容总结 本周学习的主要是第十四章,第十五章的内容. NIO与NIO2 同步非阻塞IO(Java NIO) : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多 ...

  5. peda的官方文档说明

    peda在github上的官方文档,摘抄过来,方便查阅. 安装 git clone https://github.com/longld/peda.git ~/peda echo "sourc ...

  6. 学习python绘图

    学会python画图 # 使用清华的pip源进行安装sklearn # pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U sciki ...

  7. SQL中的注释语句

    SQL中的注释分为单行注释和多行注释.顾名思义,单行注释就是对一行进行注释,多行注释就是同时对多行进行注释. 一.单行注释 SQL语句中的单行注释使用 -- create database datab ...

  8. python根据字典自动生成一组省和市名

    字典如下: dict={ '河北省':['石家庄','唐山','秦皇岛','承德'], '山东省':['济南','青岛','临沂','淄博'], '湖南省':['长沙','衡阳','湘潭','邵阳', ...

  9. babel使用中不想使用 严格模式 如何去除?

    使用babel进行es6转es5时,默认转化之后是严格模式,有些时候我们想去除严格模式. 解决方法如下 安装 babel-plugin-transform-remove-strict-mode 依赖 ...

  10. Winsock—I/O模型之选择模型(一)

    Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect ...