bzoj3621我想那还真是令人高兴啊

题意:

T组数据,每组给出两个三角形各点坐标,要求求出一个点使第一个三角形可以绕这个点放缩和旋转得到另一个三角形。T≤10,坐标为≤10000的实数,数据保证三角形不用平移,答案保留三位小数。

题解:

复数既是一种数,又可以当做一种独特的二维向量,因为其数的特点可以用来解方程,又因为其向量的特点可以表示二维的点和变换。两个复数的积在几何上定义为把它转化为向量后极角相加,长度相乘,正可以用来表示放缩和旋转变换。因此设A,B,C为变换前三角形三个顶点(用复数表示),T为变换复数,P为绕的那个点,A',B',C'表示变换后的点。于是可以列方程(A-P)*T=(A'-P) (B-P)*T=(B'-P) (C-P)*T=(C'-P),我们可以枚举A,B,C分别是第一个三角形的哪个顶点,然后联立前两道解出T代入第三道验证。然而本傻逼忘记枚举了导致WA了好几发,顺便安利STL的complex类,已经包装好了复数的常用运算。

代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <complex>
#define inc(i,j,k) for(int i=j;i<=k;i++)
using namespace std; complex <double> a,b,c,d,e,f,t,p,g;
int T;
int main(){
scanf("%d",&T); while(T--){
double x,y;
scanf("%lf%lf",&x,&y); a.real(x); a.imag(y);
scanf("%lf%lf",&x,&y); b.real(x); b.imag(y);
scanf("%lf%lf",&x,&y); c.real(x); c.imag(y);
scanf("%lf%lf",&x,&y); d.real(x); d.imag(y);
scanf("%lf%lf",&x,&y); e.real(x); e.imag(y);
scanf("%lf%lf",&x,&y); f.real(x); f.imag(y);
g.real(1.000000),g.imag(0.000000); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
swap(b,c); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
swap(a,b); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
swap(b,c); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
swap(a,b); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
swap(b,c); t=(e-d)/(b-a); p=(a*t-d)/(t-g);
if(abs(((c-p)*t-(f-p)).real())<1e-&&abs(((c-p)*t-(f-p)).imag())<1e-){
printf("%.6lf %.6lf\n",p.real(),p.imag()); continue;
}
}
return ;
}

20160609

bzoj3621我想那还真是令人高兴啊的更多相关文章

  1. 【BZOJ】3621: 我想那还真是令人高兴啊

    http://www.lydsy.com/JudgeOnline/problem.php?id=3621 题意:给两个三角形,问A能否通过旋转伸缩到B. #include <bits/stdc+ ...

  2. BZOJ 3621: 我想那还真是令人高兴啊 计算几何 复数

    https://www.lydsy.com/JudgeOnline/problem.php?id=3621 给定两个三角形,其中一个可以通过以某点为中心旋转并放缩的方式得到另一个,求这个中心 http ...

  3. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  4. [No000003]现代版三十六计,计计教你如何做人

    <现代版三十六计,计计教你如何做人> …………………………………………………………………………………… 第1计施恩计 在人际交往中,见到给人帮忙的机会,要立马扑上去,像一只饥饿的松鼠扑向地 ...

  5. 【分享】改变未来的九大算法[pdf][清晰扫描版]

    [下载地址]http://www.colafile.com/file/1179688 图书信息:中文名: 改变未来的九大算法作者: 约翰·麦考密克译者: 管策图书分类: 软件资源格式: PDF版本: ...

  6. 简单却又复杂的FizzBuzz面试编程问题

    写这篇文章主要是因为偶然看到一篇关于stackoverflow公司的面经中提到了一个有趣的面试编程问题,如题所述:FizzBuzz问题.原文引用如下: “在一些公平的考验之后,我发现那些因为代码而抓狂 ...

  7. 翻译一篇关于jedis的文章

    翻译 自 http://www.baeldung.com/jedis-java-redis-client-libraryIntro to Jedis – the Java Redis Client L ...

  8. Debian Jessie升级至Stretch小记

    昨天Debian Stretch正式发布.为了尝新,昨天晚上便从Jessie升到了Stretch.结果,早上起来发现系统已无法进入X视窗环境,且NVIDIA的官方驱动无法成功编译和安装.看来,每次系统 ...

  9. [JavaScript] 节流(throttle)-防抖(debounce) 不懵圈指北

    网易云课堂 > 微专业 > 前端高级开发工程师 01.前端高级-JavaScript进阶 > 3.函数式编程 Underscore源码分析 > 3.4.3 throttle 与 ...

随机推荐

  1. s7-200高速脉冲输出与高速计数器讲解

    s7-200高速脉冲输出与高速计数器讲解

  2. TCP实战一(三握四挥、流量控制)

    上一篇博文已经介绍了tcpdump的一些基本操作与命令,今天这篇博文将带你解密如何利用wireshark对tcpdump抓到的数据包进行可视化分析! 参考文献:https://zhuanlan.zhi ...

  3. LeetCode 80,不使用外部空间的情况下对有序数组去重

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第49篇文章,我们一起来看LeetCode的第80题,有序数组去重II(Remove Duplicates fr ...

  4. python黑帽子之udp客户端

    将上文的TCP客户端简单修改便能得到UDP客户端 import socket target_host = "127.0.0.1" target_port = 80 client = ...

  5. 如何在 asp.net core 3.x 的 startup.cs 文件中获取注入的服务

    一.前言 从 18 年开始接触 .NET Core 开始,在私底下.工作中也开始慢慢从传统的 mvc 前后端一把梭,开始转向 web api + vue,之前自己有个半成品的 asp.net core ...

  6. .NET Core 选项模式【Options】的使用

    ASP.NET Core引入了Options模式,使用类来表示相关的设置组.简单的来说,就是用强类型的类来表达配置项,这带来了很多好处.利用了系统的依赖注入,并且还可以利用配置系统.它使我们可以采用依 ...

  7. java中的Arrays这个工具类你真的会用吗

    Java源码系列三-工具类Arrays ​ 今天分享java的源码的第三弹,Arrays这个工具类的源码.因为近期在复习数据结构,了解到Arrays里面的排序算法和二分查找等的实现,收益匪浅,决定研读 ...

  8. matplotlib中文显示乱码解决方法

    在学习<机器学习实战>这本书的决策树一章时,要用matplotlib画出决策树,然而在显示中文时出现了乱码 import matplotlib.pyplot as plt #定义文本框和箭 ...

  9. Spring — 循环依赖

    读完这篇文章你将会收获到 Spring 循环依赖可以分为哪两种 Spring 如何解决 setter 循环依赖 Spring 为何是三级缓存 , 二级不行 ? Spring 为啥不能解决构造器循环依赖 ...

  10. Oracle收集对表收集统计信息导致全表扫描直接路径读?

    direct path read深入解析 前言 最近碰到一件很奇葩的事情,因为某条SQL执行缓慢,原因是走了笛卡尔(两组大数据结果集),而且笛卡尔还是NL的一个部分,要循环31M次. 很容易发现是统计 ...