zoukankan      html  css  js  c++  java
  • HDU 2671 Can't be easier(数学题,点关于直线对称)

    题目

    //数学题
    //直线 y = k * x + b
    //直线 ax+by+c=0; 点 (x0,y0); 点到直线距离 d = (ax0+by0+c)/sqrt(a^2+b^2)

    /*
    *****************************************************************
    关于直线对称公式如下:

    1。点(a,b)关于直线 y=kx+m (k=1或-1)的
    对称点为:(b/k-m/k,ka+m),实际上是将表达式中的x,y的值互换,
    因为直线方程 y=kx+m 中有 x=y/k-m/k 且 y=kx+m,这种方法只适用于 k=1或-1
    的情况。还可以推广为 曲线 f(x,y)=0关于直线 y=kx+m 的 对称曲线 为
    f(y/k-m/k,kx+m)=0。

    2.当 k不等于1或-1时,点(a,b)关于直线 Ax+By+C=0 的对称点为
    (a-(2A*(Aa+Bb+C))/(A*A+B*B),b-(2B*(Aa+Bb+C))/(A*A+B*B)),
    同样可以扩展到曲线关于直线对称方面,有 f(x,y)=0关于
    直线 Ax+By+C=0 的对称曲线为
    f(x-(2A*(Ax+By+C))/(A*A+B*B),y-(2B*(Ax+By+C))/(A*A+B*B))=0.

    以上包含了所有关于直线对称的情况。

    顺便把点关于点对称的也写在这,方便大家使用。

    点(x,y)关于 点(a,b)对称点是 (2a-x,2b-y);
    曲线 f(x,y)=0 关于 点(a,b)对称曲线为 f(2a-x,2b-y)=0。
    *****************************************************************

    *********************************************
    设直线方程为Ax+By+C=0,两点为(x1,y1),(x2,y2)

    (Ax1+By1+C)(Ax2+By2+C)>0
    同侧

    (Ax1+By1+C)(Ax2+By2+C)<0
    异侧
    *********************************************
    */

    #include<math.h>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int m;
        double k,ax,ay,bx,by,cx,cy;
        scanf("%d",&m);
        while(m--)
        {
            scanf("%lf",&k);
            scanf("%lf%lf%lf%lf%lf%lf",&ax,&ay,&bx,&by,&cx,&cy);
            double b1 = cy-k*cx;
            double A = k, B = -1, C = b1;
    
            //判断两点是否同侧
            if((A * ax + B * ay + C) * ( A * bx + B * by + C) < 0)//同侧
            {
                printf("%.2lf
    ",sqrt((ax - bx) * (ax - bx) + (ay - by) * (ay - by)));
            }
    
            else 
            {
                double xn = ax - (2 * A * (A * ax + B * ay + C)) / (A * A + B * B);
                double yn = ay - (2 * B * (A * ax + B * ay + C)) / (A * A + B * B);
                printf("%.2lf
    ",sqrt((xn - bx) * (xn - bx) + (yn - by) * (yn - by)));
            }
            
        }
    
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    saltstack源码详解一
    linux的yum报错
    django restframework
    列表生成式
    面向对象的封装
    linux对于zombie的处理
    Flask学习目录
    #1_两数之和
    LeetCode入门
    Struts2(一)——基本使用
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3801045.html
Copyright © 2011-2022 走看看