zoukankan      html  css  js  c++  java
  • POJ 1673 EXOCENTER OF A TRIANGLE

    POJ_1673

        O实际上是△ABC的垂心,证明如下:

        先将△EBJ绕B点逆时针旋转90度,这时EB与AB重合,BJ与BC共线。之所以BJ与BC共线是因为∠ABC和∠EBJ之前是互补的。这时,就会出现一个大的组合而成的三角形△JAC,同时BC=BJ,ME=MJ,所以ME是△JAC的中位线,因此BM平行于AC。而BM是旋转90度之后平行于AC的,于是之前BM就是垂直于AC的了,进而就可以得到O是△ABC的垂心。

        这个题目输出的时候需要加一个很小的量(eps)比如1e-8然后再输出,至于为什么这个样子我也搞不懂,看discuss说做计算几何题输出结果的时候最好顺手加个eps,囧。

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #define zero 1e-8
    double x3, y3, x4, y4, x5, y5;
    int dcmp(double x)
    {
    return fabs(x) < zero ? 0 : (x < 0 ? -1 : 1);
    }
    void solve()
    {
    double x, y, x1, y1, x2, y2, k1, k2;
    if(dcmp(y3 - y4) == 0)
    {
    k2 = (x4 - x5) / (y5 - y4);
    x = x5;
    y = k2 * (x - x3) + y3;
    }
    else
    {
    if(dcmp(y4 - y5) == 0)
    {
    k1 = (x3 - x4) / (y4 - y3);
    x = x3;
    y = k1 * (x - x5) + y5;
    }
    else
    {
    k1 = (x3 - x4) / (y4 - y3);
    k2 = (x4 - x5) / (y5 - y4);
    x = (k1 * x5 - k2 * x3 + y3 - y5) / (k1 - k2);
    y = k1 * (x - x5) + y5;
    }
    }
    printf("%.4lf %.4lf\n", x + zero, y + zero);
    }
    int main()
    {
    int t;
    scanf("%d", &t);
    while(t --)
    {
    scanf("%lf%lf%lf%lf%lf%lf", &x3, &y3, &x4, &y4, &x5, &y5);
    solve();
    }
    return 0;
    }


  • 相关阅读:
    使用ArcMap将Excel转换成Shapefile文件
    vue(9)事件监听修饰符
    vue(8)事件监听v-on
    vue(7)computed属性的使用
    vue(6)v-bind指令
    vue(5)插值{{}}和一些简单指令v-pre v-once v-text
    C++ 插入迭代器insert iterator
    敏捷开发
    java-------2.interface接口类,实现接口
    java-------1.抽象类,抽象方法
  • 原文地址:https://www.cnblogs.com/staginner/p/2356585.html
Copyright © 2011-2022 走看看