zoukankan      html  css  js  c++  java
  • UVa 10250 The Other Two Trees

    还是读了很长时间的题,不过题本身很简单。

    可以把四棵树想象成正方形的四个顶点,已知两个相对顶点的坐标,求另外两个坐标。

    不过,原题可没直接这么说,中间需要一些小证明。

    题中说有一个平行四边形然后分别以四条边为边长向外作正方形,四棵树就在四个正方形中心的位置。

    这是我用几何画板画的图。

    下面证△FOE≌△HGO

    设CD=2a,BC=2b

    ∴EF=OH=a,

        OF=HG=b

    易知∠DFO=∠OHB

    ∴∠EFO=∠OHG=∠DFO+90°

    ∴△FOE≌△HGO(边角边)

    ∴∠E=∠GOH

    ∠EOG=∠EOF+∠DFO+∠E=90°      (因为再加上∠DFE就等于内角和180°了)

    综上,OE=OG且OE⊥OG

    由于对称性,四棵树就构成了个正方形。

    下面说说算法,利用旋转。我是用复数做的。

    比如说一个复平面的向量a+bi乘上i所得向量就是逆时针旋转90°所得向量,乘上-i就是顺时针。

    可以计算出中点O的坐标,然后向量OG=Gx-Ox+(Gy-Oy)i,乘上单位向量i得Oy-Gy+(Gx-Ox)i。

    在加上O的坐标就得到E的坐标(Ox+Oy-Gy,Oy-Ox+Gx)。

    同理也可以很容易求出顺时针转90°后点的坐标。

    10250

    Problem E

    The Other TwoTrees

    Input: standard input

    Output: standard output

    Time Limit: 2 seconds

    You have a quadrilateral(四边形) shaped land whose opposite fences are ofequal length(四边形对边相等,也就是平行四边形). You have four neighborswhose lands are exactly adjacent(邻近的) to your four fences, that means you have acommon fence with all of them. For example if you have a fence of length d inone side, this fence of length d is also the fence of theadjacent neighbor on that side. The adjacent neighbors have no fence in commonamong themselves and their lands also don’t intersect(相交). The main difference between their land andyour land is that their lands are all square(正方形) shaped. All your neighbors have a tree at the center oftheir lands. Given the Cartesian coordinates(笛卡尔坐标) of trees of two opposite neighbors, you will have tofind the Cartesian coordinates of the other two trees.

    Input

    The input file contains several lines ofinput. Each line contains four floating point or integer numbers x1,y1, x2, y2, where (x1, y1), (x2, y2) are thecoordinates of the trees of two opposite neighbors. Input is terminated by endof file.

    Output

    For each line of input produce one line ofoutput which contains the line “Impossible.” without thequotes, if you cannot determine the coordinates of the other two trees.Otherwise, print four floating point numbers separated by a single space withten digits after the decimal point ax1, ay1, ax2, ay2, where (ax1,ay1)  and (ax2, ay2) are the coordinates of the othertwo trees. The output will be checked with special judge program, so don’tworry about the ordering of the points or small precision errors. The sampleoutput will make it clear.

    Sample Input

    10 0 -10 0

    10 0 -10 0

    10 0 -10 0

     

    Sample Output

    0.000000000010.0000000000 0.0000000000 -10.0000000000

    0.000000000010.0000000000 -0.0000000000 -10.0000000000

    0.0000000000-10.0000000000 0.0000000000 10.0000000000


    (World FinalWarm-up Contest, Problem Setter: Shahriar Manzoor)

    AC代码:

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 int main(void)
     8 {
     9     #ifdef LOCAL
    10         freopen("10250in.txt", "r", stdin);
    11     #endif
    12 
    13     double x[4], y[4], midx, midy;
    14     while(scanf("%lf %lf %lf %lf", &x[0], &y[0], &x[1], &y[1]) == 4)
    15     {
    16         midx = (x[0] + x[1]) / 2;
    17         midy = (y[0] + y[1]) / 2;
    18         x[2] = midx + midy - y[0];
    19         y[2] = x[0] - midx + midy;
    20         x[3] = midx - midy + y[0];
    21         y[3] = midx + midy - x[0];
    22         printf("%.10lf %.10lf %.10lf %.10lf
    ", x[2], y[2], x[3], y[3]);
    23     }
    24     return 0;
    25 }
    代码君
  • 相关阅读:
    银行卡号每隔四位添加一个分隔符
    clipboard.js实现文本复制
    选中|复制文本
    react---之下拉菜单默认选中的值始终不变的问题
    create-react-app支持less配置
    数对
    安置路灯
    被三整除
    牛牛找工作
    C++ std::pair
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3817600.html
Copyright © 2011-2022 走看看