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我想那还真是令人高兴啊的更多相关文章
- 【BZOJ】3621: 我想那还真是令人高兴啊
http://www.lydsy.com/JudgeOnline/problem.php?id=3621 题意:给两个三角形,问A能否通过旋转伸缩到B. #include <bits/stdc+ ...
- BZOJ 3621: 我想那还真是令人高兴啊 计算几何 复数
https://www.lydsy.com/JudgeOnline/problem.php?id=3621 给定两个三角形,其中一个可以通过以某点为中心旋转并放缩的方式得到另一个,求这个中心 http ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [No000003]现代版三十六计,计计教你如何做人
<现代版三十六计,计计教你如何做人> …………………………………………………………………………………… 第1计施恩计 在人际交往中,见到给人帮忙的机会,要立马扑上去,像一只饥饿的松鼠扑向地 ...
- 【分享】改变未来的九大算法[pdf][清晰扫描版]
[下载地址]http://www.colafile.com/file/1179688 图书信息:中文名: 改变未来的九大算法作者: 约翰·麦考密克译者: 管策图书分类: 软件资源格式: PDF版本: ...
- 简单却又复杂的FizzBuzz面试编程问题
写这篇文章主要是因为偶然看到一篇关于stackoverflow公司的面经中提到了一个有趣的面试编程问题,如题所述:FizzBuzz问题.原文引用如下: “在一些公平的考验之后,我发现那些因为代码而抓狂 ...
- 翻译一篇关于jedis的文章
翻译 自 http://www.baeldung.com/jedis-java-redis-client-libraryIntro to Jedis – the Java Redis Client L ...
- Debian Jessie升级至Stretch小记
昨天Debian Stretch正式发布.为了尝新,昨天晚上便从Jessie升到了Stretch.结果,早上起来发现系统已无法进入X视窗环境,且NVIDIA的官方驱动无法成功编译和安装.看来,每次系统 ...
- [JavaScript] 节流(throttle)-防抖(debounce) 不懵圈指北
网易云课堂 > 微专业 > 前端高级开发工程师 01.前端高级-JavaScript进阶 > 3.函数式编程 Underscore源码分析 > 3.4.3 throttle 与 ...
随机推荐
- postgresql中进行备份和回滚的常用sql语句小结
最近在项目中需要对已有的部分数据库数据进行备份,通过搜索和实践,把常用的sql以及过程记录如下, 1.常用的备份数据库思路,把需要备份的数据放到一个新表中,这个新表的记录与需要备份的表完全一样,然后备 ...
- 使用vscode 开发go项目的最新姿势. go版本1.14.2
使用了go 1.14.2. 版本, 再也不用建src, pkg, bin 目录了, 以及再也不用强制配置GOPATH了 前提条件: 必须是 go mod 项目. 在工程目录下, 执行这样的命令生成 ...
- 2020年最佳Java调试工具(翻译)
调试是应用程序开发周期不可或缺的一部分.用Java或任何其他语言编写程序时,每个开发人员应解决的首要问题之一是可靠的调试工具的可用性. 所使用的工具类型可能影响或破坏应用程序的调试过程,因此至关重要的 ...
- Windows下6款实用软件(强烈推荐!)
Windows下6款实用软件 1.notepads Notepads作为一款编辑器,美观.轻量,功能强大,支持多标签页.Markdown.日常文本编辑.查看,Notepads轻松胜任,如果厌烦了Win ...
- docker配置国内镜像地址,解决无法pull镜像问题docker: Error response from daemon
问题: 执行命令 $ docker run -it --rm -p 8888:8080 tomcat:8.5.32 报错 Unable to find image 'tomcat:8.5.32' lo ...
- Merge,Rebase,Cherry-Pick 一文解惑
代码合并在日常开发中是较为常见的场景,采用合适的合并方式,可以起到事半功倍的效果.对应在 Git 中合并的方式主要有三个,Merge,Rebase,Cherry-Pick. 开始部分会首先介绍一下这三 ...
- 基于领域驱动设计(DDD)超轻量级快速开发架构(二)动态linq查询的实现方式
-之动态查询,查询逻辑封装复用 基于领域驱动设计(DDD)超轻量级快速开发架构详细介绍请看 https://www.cnblogs.com/neozhu/p/13174234.html 需求 配合Ea ...
- Redis持久化机制,优缺点,如何选择合适方式
一.什么是Redis持久化? 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失. 二.Redis 的持久化机制是什么?各自的优缺点? Redis 提供两种持久化机制 RDB(默认) 和 ...
- SpringBoot--使用Mybatis分页插件
1.导入分页插件包和jpa包 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
- 数据库连接池 --Druid 连接工具类创建_JDBCUtils
package com.itheima.jdbc_druid; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.s ...