zoukankan      html  css  js  c++  java
  • 反演变换学习笔记

    定义:

    给定平面上一个反演中心(O),给定反演半径(r),对于平面上任意一个点(A),都可以找到一个点(A'),使得(OA*OA'=r^2),称(A')(A)关于(O)的反演点,以(O)为圆心(r)为半径的圆称为反演圆。(下图中圆K为反演圆,A和B互为反演点)

    性质

    • 过反演中心的直线反演后就是自身
    • 不过反演中心的直线反演后时过反演中心的圆

    • 不过反演中心的圆(A)反演后也是一个圆(A'), 当(A)与圆(O)相交时,(A′)也与圆(O)相交;当(A)与圆(O)外(内)切时,(A′)与圆(O)内(外)切;当(A)与圆(O)相离(内含)时,(A′)与圆(O)内含(相离)。

    • 直线(A)与圆(O)相切,过不在圆上的一点(K)反演后圆(A')和圆(O')相切

    模板

    Point PtP(Point a,Point p,double r){//点到点
        Point v1=a-p;
        v1.stdd();
        double len=r*r/dist(a,p);
        return p+v1*len;
    }
    Circle CtC(Circle C,Point p,double r){//圆到圆
        Circle res;
        double t = dist(C.o,p);
        double x = r*r / (t - C.r);
        double y = r*r / (t + C.r);
        res.r = (x - y) / 2.0;
        double s = (x + y) / 2.0;
        res.o = p + (C.o - p) * (s / t);
        return res;
    }
    Circle LtC(Point a,Point b,Point p,double r){//直线到过反演点的圆
        double d=distLP(a,b,p);
        d=r*r/d;
        Circle c;
        c.r=d/2;
        Point v1;
        if(xmult(a,b,p)>0)
            v1=(a-b).Rotate(PI/2);
        else
            v1=(b-a).Rotate(PI/2);
        v1.stdd();
        c.o=p+v1*c.r;
        return c;
    }
    
  • 相关阅读:
    VMWare安装Win10虚拟机 昆明
    c#游戏进程杀手 昆明
    图解机器学习读书笔记CH2
    深度学习中的线性代数知识详解
    图解机器学习读书笔记CH1
    三分算法
    POJ 2356 Find a multiple【抽屉原理】
    POJ 1170 Shoping Offers(IOI 95)
    HDU 2438 Turn the corner【三分】
    HDU 3552 I can do it! 【贪心】
  • 原文地址:https://www.cnblogs.com/ucprer/p/14500800.html
Copyright © 2011-2022 走看看