zoukankan      html  css  js  c++  java
  • CF32E 题解

    题目翻译差评,明明镜子是有两个反射面的

    考虑只有 2 种情况

    第一种是没有经过镜面反射就可以到达 b,另一种是经过了镜面反射。

    第一种情况直接叉积判线段相交 a,b 两个点直接连线是否经过墙或者镜子就行。

    注意:当镜子和 a,b 共线的时候要特判一下。

    第二种情况考虑让两个点对镜子做一下对称,然后再用上面的方法判一下新的点相连是否经过阻挡。

    虽然你感觉我说的很简单,但中间各种同侧、共线和精度问题还是挺烦人的。

    代码

    这份代码仅供参考,不保证正确性。

    对于求对称点这个操作,代码如下

    inline point footpoint(point p,point a,point b)// 求垂足
    {
        point a1 = a-p,a2=b-p,a3=b-a;
        db len1 = Dot(a1,a3)/molen(a3),len2=-1.0*Dot(a2,a3)/molen(a3);
        return a+a3*(len1/(len1+len2));
    }
    inline point symmetry(point p,point a,point b)// 求对称点
    {
        return p + (footpoint(p,a,b)-p)*2;
    }
    
  • 相关阅读:
    AGC015E Mr.Aoki Incubator
    luogu P3520 [POI2011]SMI-Garbage
    442.Find All Duplicates in an Array
    SICP_2.61-2.62
    sicp_2.59-2.60
    SICP_2.58
    SICP_2.56-2.57
    SICP_2.53-2.55
    SICP_2.52-2.53
    SICP_2.50-2.51
  • 原文地址:https://www.cnblogs.com/-Iris-/p/15340243.html
Copyright © 2011-2022 走看看