zoukankan      html  css  js  c++  java
  • uva 10609

    题目大意:给出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-6) 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 / 2 < T) return;
    26 
    27     point C, D, E;
    28 
    29     C.x = B.x + 3 * (A.x - B.x) / 4;
    30     C.y = B.y + 3 * (A.y - B.y) / 4;
    31 
    32     D.x = B.x + (A.x - B.x) / 4;
    33     D.y = B.y + (A.y - B.y) / 4;
    34 
    35     E.x = (A.x + B.x)/2 + sq3/4*(A.y - B.y);
    36     E.y = (A.y + B.y)/2 - sq3/4*(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 = 1;
    49     point A, B;
    50     while(scanf("%lf%lf%lf%lf%lf", &A.x, &A.y, &B.x, &B.y, &T) == 5 && T >= 1)
    51     {
    52         ans.clear();
    53         ans.push_back(A);
    54         ans.push_back(B);
    55 
    56         dfs(A, B);
    57 
    58         printf("Case %d:
    ", cas ++);
    59         sort(ans.begin(), ans.end(), cmp);
    60         printf("%lu
    ", ans.size());
    61         for (int i = 0; i < ans.size(); i++)
    62             printf("%0.5lf %0.5lf
    ", ans[i].x, ans[i].y);
    63     }
    64     return 0;
    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)

  • 相关阅读:
    Spring MVC — @RequestMapping原理讲解-1
    搭建一个SVN
    WebService远程调用技术
    Linux命令的复习总结学习
    电商-购物车总结
    单点登录系统---SSO
    JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明
    23种设计模式
    使用netty实现的tcp通讯中如何实现同步返回
    rabbitmq集群安装
  • 原文地址:https://www.cnblogs.com/aze-003/p/5153214.html
Copyright © 2011-2022 走看看