[数]昨天欠下的一道立体几何题HDU-4741
并没有做到这道题,后来听学长说了题意,总之就是立体几何嗯
看了好几份题解,是的我知道是异面线段的距离了,可是看码完全不明orz。
这时候出现了一份清晰易懂甚至给出了公式来源的blog╰(*°▽°*)╯
仔细一看是kuangbin的blogΣ(⊙▽⊙"让我先%一%orz
http://blog.sina.com.cn/s/blog_a401a1ea0101ij9z.html公式Time Tunnel在此
<!----------这部分是解释给以后看不懂的自己的---------->
(一张简约线条的示意图)
首先获得两线段的向量(e1,e2),然后叉乘得到垂直于两线段的直线p,p与其中一条线段形成的平面截另一线段于一点,同理得两线段(的延长线)上各一点,则该两点间的距离为两线段最短距离。
那么一线段指向另一线段的向量AB在p上的投影即为最短距离。
需要记住的公式 d=|p·AB/p| 交点R1=A+t1·e1
t1=((B-A)Xe2)·(e1Xe2)/|e1Xe2|2 t2=((B-A)Xe1)·(e1Xe2)/|e1Xe2|2
<!-------OVER------->
那么就放一下最后按照蒟蒻习惯敲的乱码,似乎并不需要求两点距离,所以kuangbin的题解里有dis而蒟蒻偷懒没写
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct node {
double x, y, z;
node(double a=, double b=, double c=) {
x = a; y = b; z = c;
}
node operator + (const node &p) const { return node(x + p.x, y + p.y, z + p.z); }
node operator - (const node &p) const { return node(x - p.x, y - p.y, z - p.z); }
double operator * (const node &p) const { return x * p.x + y * p.y + z * p.z; }
node operator ^ (const node &p) const { return node(y*p.z - z * p.y, z*p.x - x * p.z, x*p.y - y * p.x); }
node operator * (double p) { return node(x*p, y*p, z*p); }
node operator / (double p) { return node(x / p, y / p, z / p); }
}A1,B1,A2,B2,poa,pob; double f(const node &a) { return sqrt(a.x*a.x + a.y*a.y + a.z*a.z); } int main()
{
int t;
cin >> t;
while (t--) {
cin >> A1.x >> A1.y >> A1.z >> B1.x >> B1.y >> B1.z >> A2.x >> A2.y >> A2.z >> B2.x >> B2.y >> B2.z;
node e1 = A1 - B1;
node e2 = A2 - B2;
node e3 = A1 - A2;
node p = e1 ^ e2;
double d = fabs((A1 - A2)*p / f(p));
double t1 = ((A2 - A1) ^ e2)*(e1^e2);
double t2 = ((A2 - A1) ^ e1)*(e1^e2);
double q = f(e1^e2)*f(e1^e2);
t1 /= q; t2 /= q;
poa = A1 + (e1*t1);
pob = A2 + (e2*t2);
printf("%.6lf\n", d);
printf("%.6lf %.6lf %.6lf %.6lf %.6lf %.6lf\n", poa.x, poa.y, poa.z, pob.x, pob.y, pob.z);
}
return ;
}
HDU-4741
注意事项:不太明白重载operator的优先级判断,我选择打括号,并且由于严格按照定义的运算对象,所以数乘的时候数和结构体的位置不能互换。
//4.16.接收到神仙的补充,优先级和普通的优先级一样,所以最后的poa和pob里的括号是可以去掉的。
算t1和t2的时候A2,A1的位置会影响结果的正负,反正有样例,试一下好了(实际上是这个懒惰的没有手算样例的人并没有搞清楚为什么)
比预计的结束时间晚了二十分钟嘤。
[数]昨天欠下的一道立体几何题HDU-4741的更多相关文章
- 可恶!学了这么久的LCA,联考的题目却是LCA+树形DP!!!可恶|!!!这几天想学学树形DP吧!先来一道入门题HDU 1520 Anniversary party
题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...
- 又是一道水题 hdu背包
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
- 2013杭州网络赛D题HDU 4741(计算几何 解三元一次方程组)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 玉伯的一道课后题题解(关于 IEEE 754 双精度浮点型精度损失)
前文 的最后给出了玉伯的一道课后题,今天我们来讲讲这题的思路. 题目是这样的: Number.MAX_VALUE + 1 == Number.MAX_VALUE; Number.MAX_VALUE + ...
- 又一道简单题&&Ladygod(两道思维水题)
Ladygod Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- POJ-1200 Crazy Search,人生第一道hash题!
Crazy Search 真是不容易啊,人生第一道hash题竟然是搜博客看题解来的. 题意:给你 ...
- 第三届山西省赛1004 一道大水题(scanf)
一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人, ...
- ny525 一道水题
一道水题时间限制:1000 ms | 内存限制:65535 KB 难度:2描述 今天LZQ在玩一种小游戏,但是这游戏数有一点点的大,他一个人玩的累,想多拉一些人进来帮帮他,你能写一个程序帮帮他吗? ...
随机推荐
- Exp3 免杀原理与实践 20164303 景圣
Exp3 免杀原理与实践 一.实验内容 1. 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 2. 通过组合 ...
- plsql连接oracle
在plsql中: 需要在工具----选项 指定 1. orcacle 主目录 :G:\PLSQL Developer 11.0.0.1762 中文绿色注册版(免Oracle11g客 ...
- SAP FI中配置“特别总帐标志” SGL
SAP FI中配置“特别总帐标志” SGL 创建时间:2018年10月6日(星期六) 下午3:42 | 分类:未分类 | 字数:396 | SAP FI中配置“特别总帐标志” SGL 2013年 ...
- Jmeter 常见错误
常见错误 https://testerhome.com/topics/10950 接口测试 https://blog.csdn.net/github_27109687/article/details/ ...
- 二、Python数据类型(一)
一.Python的基本输入与输出语句 (一)输出语句 print() 示例: print('你好,Python') print(4+5) a = 10 print(a) 输出的内容可以是字符串,变量, ...
- PowerDesigner概念(概念数据模型概述)
- layui
给大家推荐个比较好用的前端ui框架layui,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用,而且layui除了ie6/7不兼容其他都兼容,而且还是响应式布局 1,获得layui后 ...
- sql server 学习笔记 ( row_number, rank, dense_rank over partition by order by )
refer : https://blog.csdn.net/winer2008/article/details/4283539 https://www.cnblogs.com/linJie193090 ...
- 《R语言入门与实践》第五章:对象改值
本章将了如何对一个数据对象中的数据进行改动,分为以下方法: 直接改值 条件取值然后改值 直接改值 单个改值:vec[1] <- 1000多个改值: vec[c(1,3,5)] <- 100 ...
- app在admin中显示成我们想要的中文名
在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称. 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一 ...