莫勒定理,证明如下:

请结合下图看代码:

#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. Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”

    create or replace function mcode_apply_update_personnel(p_mca_no VARCHAR2, -- 参数(实参) p_action VARCHA ...

  2. Django API验证(令牌)

    1. 获取接口信息 Client端 import requests import time import hashlib ctime = time.time() key = 'akfljakfjakl ...

  3. Tetris:pygame实现

    网上搜到一个Pygame写的俄罗斯方块(tetris),大部分看懂的前提下增加了注释,Fedora19下运行OK的 主程序: #coding:utf8 #! /usr/bin/env python # ...

  4. JS格式化时间并比较

    JS格式化时间,然后进行比较.工作遇到的情况,然后网上找到的,记下来,下次用! </head> <body> <button onclick="myFuncti ...

  5. Ocelot 配置初始

    { "ReRoutes": [ { /*将用户的请求 /post/1 转发到 localhost/api/post/1*/ /* DownstreamPathTemplate:转到 ...

  6. drools7 (四、FactHandle 介绍)

    先看代码 Base.java package cn.xiaojf.drools7.base; import org.apache.commons.lang3.StringUtils; import o ...

  7. Java学习(Map接口)

    一.概述: 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. 1. Collection中的集合,元素是孤立存在的(理解为单身), ...

  8. 问题:SpringBoot访问不到Controller

    SpringBoot正常启动,其它配置都正常,以下是控制台打印: 解决方法: 将controller与application配置文件同层,是访问时无法扫描到相应的controller,故无法映射到相应 ...

  9. 开始Hibernate介绍

    1.介绍 一个框架 一个Java领域内的持久化框架 一个ORM框架 2.持久化 和数据库相关的各种操作 保存 更新 删除 查询 加载:根据特定的OID,把一个对象从数据库加载到你内存中. OID:为了 ...

  10. 全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch

    参考链接: 1, 源码地址,官方介绍 2, logstash-input-jdbc使用建议 3, 官网介绍例子,使用 logstash-input-jdbc 到 elasticsearch 一.安装 ...