商汤科技近日推出的 SenseVideo 能够对视频监控中的对象进行识别与分析,包括行人检测等。在行人检测问题中,最重要的就是对行人移动的检测。由于往往是在视频监控数据中检测行人,我们将图像上的行人抽象为二维平面上若干个的点。那么,行人的移动就相当于二维平面上的变换。

在这道题中,我们将行人的移动过程抽象为 旋转、伸缩、平移,有 44 个 移动参数:\theta, scale, d_x,d_yθ,scale,d​x​​,d​y​​。每次行人的移动过程会将行人对应的 nn 个点全部依次应用旋转、伸缩、平移,对于平移前的点 (x, y)(x,y),进行每种操作后的坐标如下:

  • 旋转后的坐标为:(x \cos\theta - y \sin\theta, x \sin\theta + y \cos\theta)(xcosθ−ysinθ,xsinθ+ycosθ);
  • 伸缩后的坐标为:(x \times scale, y \times scale)(x×scale,y×scale);
  • 平移后的坐标为:(x + d_x, y + d_y)(x+d​x​​,y+d​y​​)。

由于行人移动的特殊性,我们可以确保 0 < scale \le 100<scale≤10。和简单版本不同的是,这道题处理的坐标为浮点数而非整数。

很显然,通过变换前后的正确坐标,很容易算出行人的移动参数,但问题没有这么简单。由于行人实际的移动并不会完全按照我们预想的方式进行,因此,会有一部分变换后的坐标结果不正确,但可以确保 结果不正确的坐标数量严格不超过一半。

你现在作为商汤科技的实习生,接手了这个有趣的挑战:算出行人的移动参数。如果不存在一组合法的移动参数,则随意输出一组参数;如果有多种合法的移动参数,输出其中任意一组合法的即可。

输入格式

第一行输入一个整数 nn,表示行人抽象出的点数。

接下来 nn 行,每行 44 个 浮点数。前两个数表示平移前的坐标,后两个数表示平移后的坐标。

坐标范围在 -10^9−10​9​​ 到 10^910​9​​ 之间,输入的坐标都保留到 66 位小数。

对于中等版本,1 \le n \le 5001≤n≤500;

对于困难版本,1 \le n \le 10^{5}1≤n≤10​5​​。

输出格式

第一行输出一个浮点数 \thetaθ,第二行输出一个浮点数 scalescale,第三行输出两个浮点数 d_x,d_yd​x​​,d​y​​。

建议输出保留到 1010 位小数或以上。我们会按照 10^{-3}10​−3​​ 的精度判断是否有超过一半的点变换后的坐标重合。

样例输入

5
0 0 -1 1
0 1 -2 1
1 0 -1 2
1 1 0 0
2 1 1 0

样例输出

1.5707963268
1
-1 1

解题思路: 
n^2枚举点对,然后根据这对点算出四个参数,然后重新跑一遍点,判断有多少个点的变换符合这个四个参数,超过一半就正确直接输出。 
具体的算法。 
scale 两个点之间的距离跟旋转和平移都没有关系,然后根据相似三角形可以知道两点之间距离的变化就是scale。

坐标旋转量θ:旋转坐标前两个点形成的直线向量A,和旋转坐标后的两个点形成的直线向量B,A,B的夹角就是θ,可以证明,这里就不说了,然后用一下公式cosθ=A*B/(|A|*|B|), 就能算出角度了。

dx,dy用scale和θ算出的坐标和题目给的坐标一减就出来了

。。真强。。。这位大佬高中数学肯定贼好。。数学弱只能感受一波了,原来利用任意两个点 本来->变化后,可以求出这么多东西,可以求出伸缩量,利用旧的两点距离和新的亮点距离成比例就好,还有就是角度,利用旧的线的旋转角度后变成新的线的角度(。。强。。然后就可以利用 A*B/(|A|*|B|) 求出角度了。。涨知识。。虽然不知道会记住多少。。加油加油)

A,B 都为两点相减。 
坑点:一定要输出10位以后,scanf一定要%lf 输出%lf 或者 %.11f 都可以

上面的证明我不会,问题其实还没有解决

原问题是:(x1,y1)=>(x2,y2),当然(x1,y1)依次经过旋转缩放和平移得到了(x2,y2)

如何求出旋转量theta,缩放比例和平移的横纵坐标呢

这.....想了很久,没想出来

但是题解是这么搞的,枚举变换的两对点对,根据每个点对变换前的点连线,和变换后的两个点连线,然后根据余弦定理算出角度,顺便算出缩放比例

然后返回去算下平移变化....

也就是说,相当于增加了方程变量的个数,它的意思是说,角度theta是可以暴力枚举的,如果你能想到上面的证明

于是我发现我的推理能力还是太弱了

计蒜客 第四场 C 商汤科技的行人检测(中等)平面几何好题的更多相关文章

  1. 计蒜客-第五场初赛-第二题 UCloud 的安全秘钥(简单)

    每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...

  2. 计蒜客第五场 UCloud 的安全秘钥(中等) (尺取游标法

    每个 UCloud 用户会构造一个由数字序列组成的秘钥,用于对服务器进行各种操作.作为一家安全可信的云计算平台,秘钥的安全性至关重要.因此,UCloud 每年会对用户的秘钥进行安全性评估,具体的评估方 ...

  3. 计蒜客 31451 - Ka Chang - [DFS序+树状数组][2018ICPC沈阳网络预赛J题]

    题目链接:https://nanti.jisuanke.com/t/31451 Given a rooted tree ( the root is node $1$ ) of $N$ nodes. I ...

  4. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

  5. 2019计蒜客信息学提高组赛前膜你赛 #2(TooYoung,TooSimple,Sometimes Naive

    计蒜客\(2019CSP\)比赛第二场 巧妙爆零这场比赛(我连背包都不会了\(QWQ\) \(T1\) \(Too\) \(Young\) 大学选课真的是一件很苦恼的事呢! \(Marco\):&qu ...

  6. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  7. 计蒜客 31434 - 广场车神 - [DP+前缀和]

    题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...

  8. 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)

    ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...

  9. 计蒜客 作弊揭发者(string的应用)

    鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库 ...

随机推荐

  1. USB充电限流IC,可调到4.8A,输入 6V关闭

    随着手机充电电流的提升,和设备的多样化,USB限流芯片就随着需求的增加而越来越多,同时为了更好的保护电子设备,需要进行一路或者多路的负载进行限流. 一般说明 PW1503,PW1502是超低RDS(O ...

  2. Android事件分发机制四:学了事件分发有什么用?

    " 学了事件分发,影响我CV大法吗?" " 影响我陪女朋友的时间" " ..... " 前言 Android事件分发机制已经来到第四篇了,在 ...

  3. gRPC Load Balancing

    gRPC Load Balancing 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务 ...

  4. 网络编程-I/O复用

    I/O模型 Unix下可用的I/O模型有五种: 阻塞式I/O 非阻塞式I/O I/O复用(select和poll.epoll) 信号驱动式I/O(SIGIO) 异步I/O(POSIX的aio_系列函数 ...

  5. (13)-Python3之--获取当前时间

    1.导入datetime模块 import datetime 2.获取当前日期和时间 import datetime now_time = datetime.datetime.now() print( ...

  6. 整合阿里云OSS

    整合阿里云OSS 一.对象存储OSS 为了解决海量数据存储与弹性扩容,采用云存储的解决方案- 阿里云OSS. 1.开通"对象存储OSS"服务 (1)申请阿里云账号 (2)实名认证 ...

  7. fiddler常用过滤

    一.过滤器 过滤这块集中在request栏目的Filter部分,可以根据自己的需要过滤掉不需要的,里面的每个模块都可以设置,这里只说常用的和注意点. 1.假如我只关心某个域名下的抓包,这时可以利用fi ...

  8. Go 如何实现热重启

    https://mp.weixin.qq.com/s/UVZKFmv8p4ghm8ICdz85wQ Go 如何实现热重启 原创 zhijiezhang 腾讯技术工程 2020-09-09  

  9. maven project builder fails when running on jdk>9

    java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.plexus.archiver.jar.JarArchi ...

  10. Redis主从、哨兵模式的搭建

    壹.Redis主从分离 准备三个redis配置文件(redis.conf),分别修改为redis6380.conf.redis6381.conf.redis6382.conf 一.配置Master 1 ...