HDU 4741 Save Labman No.004 计算几何 数学
题目链接
这道题会暴露很多孩纸的高数学的好不好。如何计算三维直线的最短距离和垂足的坐标,学习链接
之后的就是代入公式计算了。
1 #include <stdio.h> 2 #include <math.h> 3 struct Point { 4 double x, y, z; 5 Point(double x = 0, double y = 0, double z = 0):x(x), y(y), z(z) {} 6 void read() { 7 scanf("%lf%lf%lf", &x, &y, &z); 8 } 9 void write() { 10 printf("%.6lf%.6lf%.6lf", x, y, z); 11 } 12 Point operator + (const Point &b) { 13 return Point(x + b.x, y + b.y, z + b.z); 14 } 15 Point operator - (const Point &b) { 16 return Point(x - b.x, y - b.y, z - b.z); 17 } 18 Point operator * (double k) { 19 return Point(x * k, y * k, z * k); 20 } 21 Point operator / (double k) { 22 return Point(x / k, y / k, z / k); 23 } 24 Point cross(const Point &b) { 25 return Point(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x); 26 } 27 double len() { 28 return sqrt(x * x + y * y + z * z); 29 } 30 double operator * (const Point &b) { 31 return x * b.x + y * b.y + z * b.z; 32 } 33 }; 34 typedef Point Vector; 35 int main() { 36 int T; 37 scanf("%d", &T); 38 while (T--) { 39 Point A, B, C, D; 40 A.read(); 41 B.read(); 42 C.read(); 43 D.read(); 44 Vector AB= B - A, CD = D - C; 45 Vector n = AB.cross(CD), AC = C - A, CA = A - C; 46 double nlen = n.len(), dis = n * AC / nlen; 47 double t1 = AC.cross(CD) * AB.cross(CD) / nlen / nlen; 48 double t2 = CA.cross(AB) * CD.cross(AB) / nlen / nlen; 49 Point E = A + (AB * t1); 50 Point F = C + (CD * t2); 51 if (dis < 0) 52 dis = -dis; 53 printf("%.6lf\n", dis); 54 E.write(); 55 putchar(' '); 56 F.write(); 57 putchar('\n'); 58 } 59 return 0; 60 }
View Code
转载于:https://www.cnblogs.com/Apiec/p/6063177.html
HDU 4741 Save Labman No.004 计算几何 数学相关推荐
- HDU 4741 Save Labman No.004(计算几何)
题目链接 抄的模版...mark一下. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> ...
- [HDU 4741]Save Labman No.004[计算几何][精度]
题意: 求两条空间直线的距离,以及对应那条距离线段的两端点坐标. 思路: 有一个参数方程算最短距离的公式, 代入求即可. 但是这题卡精度... 用另外的公式(先算出a直线上到b最近的点p的坐标, 再算 ...
- hdu 4741 Save Labman No.004
题目大意:求空间两条直线的最短距离及最近的点坐标 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4741 拙计的代码,公垂线~~~~~~~~~ #inc ...
- POJ 4741 Save Labman No.004
题目链接:Save Labman No.004 解题思路:给你两条直线,异面的空间直线,求直线间最短距离,并且求出最短距离的这两个点.下面是模板,先求出公垂线的法向量,在构造两个平面分别是两条直线各自 ...
- hdu 4793(嗷嗷水的计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4793: 大意:在原点有一个平台,原点还有一个圆形木块,视为挡板,有一个圆形滑块在光滑坐标轴上摩擦,有初 ...
- HDU 3968 Angry Birds Again(计算几何)
Description 给出小鸟的位置以及猪的位置,小鸟做斜抛运动经过ts后砸到猪,问小鸟经过的路程 Input 第一行为一整数T表示你用例组数,每组用例包括四个浮点数x0,y0,x1,y1,t分别表 ...
- hdu 4278 2012天津赛区网络赛 数学 *
8进制转为10进制 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include ...
- HDU - 4635 Strongly connected(强连通缩点+数学+思维)
题目链接:点击查看 题目大意:给出一个由n个点和m条边构成的无向图,现在问最多能添加几条边,能使得原图仍然不是强连通图,若原图初始时就是强连通图,直接输出-1 题目分析:首先对于原图来说,肯定会有一些 ...
- HDU - 4082 Hou Yi‘s secret (计算几何)
点击打开题目链接 Hou Yi's secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
最新文章
- TVM如何训练TinyML
- POJ 2190 模拟
- ElasticSearch2.2.0安装
- source insight 添加行号
- Greenplum【环境搭建 01】CentOS Linux release 7.5 环境单机版详细安装配置步骤+问题解决(含安装包资源)
- sencha touch笔记(6)——路由控制(1)
- 汽车上的一些名词缩写解释
- nginx ---- 目录结构
- sprintboot入门
- 最简单的基于FFmpeg的视频编码器-更新版(YUV编码为MP4)
- mysql 主从复制原理【转】
- 如何解决xp进系统的时候需要按enter键
- labview 上位机报警提示,报警记录,txt文档存储
- Ubuntu16.04下用umake安装vscode
- 大型传统企业要不要提升自身的IT研发能力
- 程序员因违反竟业协议,赔腾讯97.6万...
- 快速打造微信小程序(超详细)
- 备忘_命令行查看电池损耗
- 鸿蒙javascript项目开发----呼吸计时训练(基于华为轻量级运动手表)
- 电子变压器的设计工艺重不重要?
热门文章
- 从SOURCE_BUFFER单元开始存放了20个字母A, 编程将这20个字母A的字符 串向下移10个单元.
- Jackson 读写 JSON
- PyTorch基础(15)-- torch.flatten()方法
- UNIX再学习 -- 再识
- c语言怎么在编码时改变颜色,怎么给贪吃蛇换一个颜色 怎么改 代码如下
- 知识图谱学习小组学习大纲
- Activity到底是什么时候显示到屏幕上的呢
- Alibaba-AndFix Bug热修复框架原理及源码解析
- protobuf java_ProtoBuf for java使用笔记 | 学步园
- nx600打印机打印设置_win7打印机共享怎么设置