题目大意:给出A,B两个点的坐标,以及T,每次找到A、B的四等分点C,D,然后以AB/2为边长,C,D为顶点,构建一个等边三角形,E为另外一个顶点,然后再对C,E;E,D做同样的操作,直到构建的等边三角形的边长小于T时。输出所有过程中的点,按照x坐标排序,相同的按照y坐标。

解题思路:dfs模拟,用ans记录点,最后排序,C,D,E可以根据向量的方法从A,B得到。

  1. #include <cstdio>
  2. #include <vector>
  3. #include <cmath>
  4. #include <altorithm>
  5. using namespace std;
  6. const double sq3 = sqrt(3.0);
  7. struct point {
  8. double x, y;
  9. };
  10.  
  11. vector<point> ans;
  12. double T;
  13.  
  14. bool cmp (const point& A, const point& B)
  15. {
  16. if(fabs(A.x - B.x) > 1e-) return A.x < B.x;
  17. return A.y < B.y;
  18. }
  19.  
  20. double dis(double x, double y) { return sqrt(x * x + y * y); }
  21.  
  22. void dfs (point A, point B)
  23. {
  24. double len = dis(A.x - B.x, A.y - B.y);
  25. if (len / < T) return;
  26.  
  27. point C, D, E;
  28.  
  29. C.x = B.x + * (A.x - B.x) / ;
  30. C.y = B.y + * (A.y - B.y) / ;
  31.  
  32. D.x = B.x + (A.x - B.x) / ;
  33. D.y = B.y + (A.y - B.y) / ;
  34.  
  35. E.x = (A.x + B.x)/ + sq3/*(A.y - B.y);
  36. E.y = (A.y + B.y)/ - sq3/*(A.x - B.x);
  37.  
  38. ans.push_back(C);
  39. ans.push_back(D);
  40. ans.push_back(E);
  41.  
  42. dfs(C, E);
  43. dfs(E, D);
  44. }
  45.  
  46. int main()
  47. {
  48. int cas = ;
  49. point A, B;
  50. while(scanf("%lf%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y, &T) == && T >= )
  51. {
  52. ans.clear();
  53. ans.push_back(A);
  54. ans.push_back(B);
  55.  
  56. dfs(A, B);
  57.  
  58. printf("Case %d:\n", cas ++);
  59. sort(ans.begin(), ans.end(), cmp);
  60. printf("%lu\n", ans.size());
  61. for (int i = ; i < ans.size(); i++)
  62. printf("%0.5lf %0.5lf\n", ans[i].x, ans[i].y);
  63. }
  64. return ;
  65. }

已知等边三角形两点的坐标.求第三点坐标, 已知X(x1,y1), Y(x2,y2) 求Z(x3,y3), x3=? y3=?

1、求已知线段的斜角:tgα=(y1-y2)/(x1-x2) 
2、求已知线段的长度:L=√((y1-y2)^2+(x1-x2)^2)
3、求第三点的坐标:
    x3=x2+L*cos(α+60);y3=y2+L*sin(α+60)

uva 10609 - Fractal的更多相关文章

  1. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  2. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  3. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  4. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  5. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  6. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  7. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

  8. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  9. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

随机推荐

  1. Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式

    迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...

  2. C语言文件操作解析(五)之EOF解析(转载)

      C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符.但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特 ...

  3. nginx 中location和root

    nginx 中location和root,你确定真的明白他们关系? 2016-01-17 14:48 3774人阅读 评论(1) 收藏 举报  分类: linux(17)  版权声明:本文为博主原创文 ...

  4. Orchard之创建模板

    orchard创建模板的两种基本方式: 第一种:通过候补创建(需要用到候补神器): 第二种:通过Shape Tracing创建:

  5. IL2CPP的前世今生

    在2014年年中的时候,Unity3D官方博客上却发了一篇"The future of scripting in unity"的文章,引出了IL2CPP的概念,感觉有取代Mono之 ...

  6. Android 用户登录

    1:服务端代码如下 <?php /** *登录成功就返回 1,否则返回 0 */ $REQUEST_METHOD=$_SERVER['REQUEST_METHOD']; if($REQUEST_ ...

  7. owncloud乱码问题

    没有人回答那我就献丑了,废话有点多,请跳着看. 先说结论:最后我选择了 Seafile 我去年之前用box同步个人文件,前几个月的时候吧,发现box不能上传几百M的文件,我才知道之前为什么会丢文件了… ...

  8. Linux系统编程(27)——线程控制

    进程在各自独立的地址空间中运行,进程之间共享数据需要用mmap或者进程间通信机制,那么如何在一个进程的地址空间中执行多个线程呢.有些情况需要在一个进程中同时执行多个控制流程,这时候线程就派上了用场,比 ...

  9. openstack 手动 部署安装调试

    Virtual Interface creation failed

  10. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...