1. /*
  2. 爆头
  3.  
  4. Description
  5. gameboy是一个CS高手,他最喜欢的就是扮演警察,
  6. 手持M4爆土匪的头。也许这里有人没玩过CS,有必
  7. 要介绍一下“爆头”这个术语:所谓爆头,就是子
  8. 弹直接命中对方的头部,以秒杀敌人。
  9.  
  10. 现在用一个三维的直角坐标系来描述游戏中的三维空间
  11. (水平面为xoy平面,z轴正方向是上方)。
  12. 假设游戏中角色的头是一个标准的球。告诉
  13. 你土匪的身高,头部半径,所站位置的坐标;
  14. gameboy所控警察的身高,头部半径,
  15. 所站位置的坐标,以及枪头所指方向的单位向量。
  16. gameboy所控警察所握的是M4,抢瞄准时枪膛中的子弹跟视线基本同线,
  17. 我们忽略它们的距离,就当成同线。由于土匪手持AK47,所以他是很嚣张地正立着。
  18. 而警察手持M4,正在瞄准,由于瞄准时身体微弯,视线从头心出发,
  19. 他头部的实际高度比正立时低10%。
  20.  
  21. 你的任务就是,计算gameboy在这一刻扣下扳机,能否爆土匪的头。
  22. 注意:这里忽略子弹的直径和重力作用,也就是说子弹是无限小的,
  23. 弹道是一条笔直的射线,警察与土匪间没有障碍物。并且只要子弹擦到头部,
  24. 哪怕是边缘,也算爆头。
  25.  
  26. Input
  27. 测试数据的第一行有一个正整数T,表示有T组测试数据。
  28. 每组数据的第一行有五个实数,h1,r1,x1,y1,z1,
  29. 分别表示土匪的身高,头部半径以及所站的位置。
  30. 第二行有八个实数,h2,r2,x2,y2,z2,x3,y3,z3,
  31. 分别表示警察的身高,头部半径,所站位置,以及枪头所指方向的方向向量。
  32.  
  33. Output
  34. 每一组输入数据对应一行输出。如果能爆土匪的头,输出"YES",否则输出"NO"。
  35.  
  36. Sample Input
  37. 2 1.62 0.1 10.0 10.0 10.0 1.80 0.09 0.0 0.0 0.0 1.0 1.0 1.0 1.62 0.1 0.0 0.0 0.0 1.80 0.09 10.0 10.0 10.0 -1.0 -1.0 -1.0
  38.  
  39. Sample Output
  40. YES YES
  41. 方法:余弦定理,夹角;
  42. */

首先要知道向量的运算:向量的向量积。如果你这个不了解的话,那这题就做不解了。

先看一下定义:两个向量ab的向量积是一个向量,它的模为|a||b|sinθ(其中θ是ab的夹角),它的方向垂直于a与b所有决定的平面(既垂直于a又垂直于b),其指向按右手法则从a转向b来确定,记为a×b

接下来看下叉乘的几何意义:

看图就应该明白了吧,就是平行四边形的面积了。

接下来就是解题的思路了:

首先就是将题目进行抽象化:1.求出匪头中心的三维坐标

             2.求警头头中心的三维坐标

第二步就是求出两个向量的三维坐标:分别是:

 

第三步是:就是进行叉乘运算了。叉乘公式我在之前的博客中说过了,此处不再累述。

两个向量叉乘的就是这个平行四边形的面积了。但是所要求的就是上图中匪头到子弹向量的距离。

这便用到了叉乘的几何意义。只要把它除以上图中第一个向量的模便求出这个高即距离d;

最后一步但是求出d-r1是否小于等于0.小于则YES,否则NO.需要注要的问题:所有变量均为double型,除一个的.

ACM1174_爆头解题思路_空间三维坐标求点到直线的距离的更多相关文章

  1. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  2. HDU1174(空间点到直线的距离,用叉积)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  3. 记一次CTF比赛过程与解题思路-MISC部分

    前言 最近好久没更新博客和公众号了,有朋友问是不是在憋大招,但我不好意思说其实是因为最近一段时间太懒了,一直在当咸鱼- 意识到很久没更新这个问题,我是想写点什么的,但好像一直当咸鱼也没啥可分享的,最近 ...

  4. n皇后2种解题思路与代码-Java与C++实现

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了n皇后问题的解题思路,并分别用java和c++实现了过程,最后,对于算法改进 ...

  5. [LeetCode] 234. Palindrome Linked List 解题思路

    Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...

  6. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路

    这也许是我大学生涯最后一次参加数学建模比赛了吧,这次我们选择的问题是E题,以下是我们解题时候的一些思路.很多不易体现的项目产生对环境造成影响的指标可以由一些等同类型的指标来代替,如土地.森林植被被破环 ...

  7. [LeetCode] 53. Maximum Subarray 解题思路

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  8. MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05

    目录 mysql语句注释 navicat 的基本使用 特色(个人总结) 与数据服务器建立连接 创建&打开数据库.表 创建 打开 修改操作表结构 修改表结构 查询修改操作表数据 基本语句对应的操 ...

  9. Z1. 广度优先搜索(BFS)解题思路

    /** BFS 解题思路 特点:从某些特定的节点开始,感染相邻的节点; 被感染的节点,再感染其相邻的节点,以此类推. 题目常见于数据结构包括 二维数组.树.图 **/ /** 1). 二维数组特定节点 ...

随机推荐

  1. 关于Java集合的总结

    (一)List: ArrayList 以数组实现.节约空间,但数组有容量限制.超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值.默认第一 ...

  2. SAE Python使用经验 好文推荐

    SAE Python使用经验 好文推荐 SAE Python使用经验 好文推荐

  3. C++类静态成员的初始化和用法探讨

    一.一般类型的类的静态变量 1.首先看下面的代码: class CTest1 { public: static int m_num1; void printNum(){cout << m_ ...

  4. poj 2376 Cleaning Shifts(贪心)

    Description Farmer John <= N <= ,) cows to <= T <= ,,), the first being shift and the la ...

  5. PHP设计模式笔记三:三种基本设计模式(工厂模式、单例模式、注册树模式) -- Rango韩老师 http://www.imooc.com/learn/236

    一.工厂设计模式 index.php $db = IMooc\Factory::createDatabase(); 使用工厂类的静态方法直接创建一个dababase对象,当类名发生修改时,在工厂里修改 ...

  6. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  7. C#基础:集合

        C#中的数组实现为 System.Array 类的实例,它们只是集合类(Collection Classes)中的一种类型.集合类一般用于处理对象列表,其功能比简单数组要多,功能大多是通过实现 ...

  8. 【转】Xcode升到6.4插件失效,与添加插件不小心点击Skip Bundle解决办法

    转载自:http://www.jianshu.com/p/d51547d29309 今天升级了xcode到6.4 发现之前装的插件不能使用了.这里有一个解决的方案: 步骤如下: 一.查看Xcode的U ...

  9. UIActivityIndicatorView活动控制器的大小改变

    self.activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicat ...

  10. sql 根据时间获取数据

    获取当月数据 MONTH(时间字段)=MONTH(GETDATE()) and year(时间字段)=year(GETDATE()) 计算两个时间差了多少分钟 DATEDIFF(mi,'7:00',c ...