链接

自己的本本没有装画图软件,先借用两张图片。。博客园不让贴源地址。。。

可以想到对于一个确定的外接圆的三角形来说内切圆最大的时候为等边三角形,如下图:

确定有合法的解之后,接下来就是去找这个解,解不唯一,可以知道一定可以构造出一个等腰三角形使得满足条件,可以看下图,对于一个确定的外接圆,已知底边和外接圆半径的话,是可以求出三边的,随着底边的缩小和伸长内切圆是先变大后变小,而最大的时候就是上述所说,等边的时候。所以知道了上下界,就可以直接二分底边了,二分的区间就是下图所标区间。

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 #include<vector>
 7 #include<cmath>
 8 #include<queue>
 9 #include<set>
10 using namespace std;
11 #define N 100000
12 #define LL long long
13 #define INF 0xfffffff
14 const double eps = 1e-10;
15 const double pi = acos(-1.0);
16 const double inf = ~0u>>2;
17 int dcmp(double x)
18 {
19     if(fabs(x)<eps) return 0;
20     return x<0?-1:1;
21 }
22 int cal(double x,double R,double r)
23 {
24     if(dcmp(R*R-x*x)<0) return 0;
25     double a = sqrt(2*R*R+2*R*sqrt(R*R-x*x));
26     double b = a;
27     double c = 2*x;
28     double s = (a+b+c)/2;
29     double tt = (s-a)*(s-b)*(s-c)/s;
30     if(dcmp(tt)<0) return 0;
31     double tr = sqrt(tt);
32     if(dcmp(tr-r)>=0) return 1;
33     return 0;
34 }
35 int main()
36 {
37     double r1,r2;
38     while(scanf("%lf%lf",&r1,&r2)!=EOF)
39     {
40         if(dcmp(2*r1-r2)>0)
41         {
42             puts("NO Solution!");
43             continue;
44         }
45         double rig = sqrt(3.0)*r2,lef = 0,mid;
46         while(rig-lef>eps)
47         {
48             mid = (lef+rig)/2;
49             if(cal(mid,r2,r1))
50                 rig = mid;
51             else lef = mid;
52         }
53        // printf("%f\n",rig);
54         double a = sqrt(2*r2*r2+2*r2*sqrt(r2*r2-rig*rig));
55         double b = a;
56         double c = 2*rig;
57         printf("%.15f %.15f %.15f\n",a,b,c);
58     }
59     return 0;
60 }

View Code

转载于:https://www.cnblogs.com/shangyu/p/3963928.html

zoj3806Incircle and Circumcircle相关推荐

  1. Parabola(抛物线)

    找这篇介绍抛物线的文章是为了我设计一个轨迹所用,人越往上走,这最基本的东西都忘了,翻译了一点,因为我只用到了翻译的这些,各位如果有需求,就自行翻译.英文好的,就自己读英文.(谷歌翻译是个好东西,英文复 ...

  2. 三角剖分算法的数学理解

    1.开篇 三角剖分是代数拓扑学里最基本的研究方法. 以曲面为例, 我们把曲面剖开成一块块碎片,要求满足下面条件: (1)每块碎片都是曲边三角形:  (2)曲面上任何两个这样的曲边三角形,要么不相交,要 ...

  3. adjacent angle_GRE/GMAT 数学之平面几何

    Lines & angles Congruent全等的 Length Intersection Bisect平分 在GMAT里只是平分角 Vertices顶点 Obtuse angle钝角 P ...

  4. 生成三角网算法java,一种低效但逻辑简单清晰的Delaunay三角网生成算法

    由离散样本点生成Delaunay三角网有多种算法,每个算法的执行效率都不一样,这里介绍一种最简单,最低效,但是算法逻辑最清晰的一种. Delaunay三角网必须满足的一个条件是任何一个三角形的外接圆都 ...

  5. C++ 基于凸包的Delaunay三角网生成算法

    Delaunay三角网,写了用半天,调试BUG用了2天--醉了. 基本思路比较简单,但效率并不是很快. 1. 先生成一个凸包: 2. 只考虑凸包上的点,将凸包环切,生成一个三角网,暂时不考虑Delau ...

  6. 逐点插入法-delaunay三角剖分

    参考资料: 三角剖分 :https://baike.baidu.com/item/Delaunay%E4%B8%89%E8%A7%92%E5%89%96%E5%88%86%E7%AE%97%E6%B3 ...

  7. [转] Delaunay三角剖分理论知识

    1.Delaunay三角剖分&Voronoi图定义 2.计算Delaunay三角剖分的算法及分析 3.例子程序&代码 大话 点集的三角剖分(Triangulation),对数值分析(比 ...

  8. 数学词汇的英译,写文章,读文献必备

    ·  一般词汇 数学 mathematics, maths(BrE), math(AmE) 公理 axiom 定理 theorem 推论 corollary 计算 calculation 运算 ope ...

  9. Mathematics English Vocabulary (Cited)

    一般词汇 数学 mathematics, maths(BrE), math(AmE) 公理 axiom 定理 theorem 计算 calculation 运算 operation 证明 prove ...

最新文章

  1. 基于 Lucene 的桌面文件搜索
  2. 函数要多小才够好——谈小函数之道
  3. 安装nvidia-docker2
  4. 年度重磅!中国《营销自动化应用基准报告 2021》正式发布!
  5. 文本聚类分析算法_聚类分析算法综述
  6. angularjs入门学习【应用剖析中篇】
  7. forms、forms_toolbar例子理解
  8. Web API应用架构在Winform混合框架中的应用(5)--系统级别字典和公司级别字典并存的处理方式...
  9. 微信小程序开发 - 起步
  10. Laravel接入SDK淘宝客调用
  11. 实战 Java 第10天:商品分页查询
  12. Android 颜色(不)透明度的使用及项目开发中的心得总结
  13. Altium Designer布局布线时元器件移动
  14. 战地之王Awesonmium
  15. 2021-12-19 老杨博客推荐\TCP像串口的多程编写的一个弱鸡版本类MQTT的TCP实现\字典值查键\微PYTHON与PYTHON的JSON区别\以及一个ESP32领导多个ESP8266组网模式
  16. js中的var是什么意思
  17. 学习CMake(一)
  18. 20个学习CSS的绝佳网站——让你从入门
  19. java 全局缓存_java本地缓存
  20. 教育部大学计算机课程改革项目规划教材答案,大学计算机实验指导及习题训练(教育部大学计算机课程改革项目规划教材)...

热门文章

  1. ppt计算机英语介绍,介绍电脑的英语ppt
  2. UE4学习-自定义相机视图
  3. vscode正则表达式替换php数组,vscode正则替换
  4. 第三章计算机试题,计算机等级考试二级VB测试题(第三章)
  5. linux部署项目文档,Linux上部署综合项目专业资料.doc
  6. nstimer循环引用_ios开发中经典循环引用场景?
  7. 2020 职场,哪类程序员会是王者?!
  8. 来了,单片机最强科普总结!
  9. VHDL实现简易停车场系统设计
  10. 自控matlab设计,自动控制原理课程设计--基于MATLAB软件的自动控制系统仿真