空间一般直线的方程是:(x-x0)/a=(y-y0)/b=(z-z0)/c,这是一条过(x0,y0,z0),方向矢量为{a,b,c}的直线.

假设已知点的坐标是A(e,f,g),过A点,且与{a,b,c}垂直的平面是,

a(x-e)+b(y-f)+c(z-g)=0,直线(x-x0)/a=(y-y0)/b=(z-z0)/c,与这个平面的交点是B,

再由两点的距离公式求出AB,即得.
 1 import java.util.Scanner;
 2
 3
 4 public class Main {
 5
 6
 7
 8     public static void main(String[] args) {
 9
10         Scanner cin = new Scanner(System.in);
11         int n = cin.nextInt();
12
13         while(n != 0){
14             float[] enemy = new float[5];
15             for(int i = 0; i < 5; i++){
16                 enemy[i] = cin.nextFloat();
17             }
18
19             float[] soldier = new float[8];
20             for(int i = 0; i < 8; i++){
21                 soldier[i] = cin.nextFloat();
22             }
23
24             boolean b = hit(enemy, soldier);
25             if(b){
26                 System.out.println("YES");
27             }
28             else {
29                 System.out.println("NO");
30             }
31             n--;
32         }
33         cin.close();
34     }
35
36     public static boolean hit(float[] enemy, float[] soldier){
37
38         //敌人头的中心 h1,r1,x1,y1,z1
39         float r1 = enemy[1];
40         //float[] centerEnemyHead = {enemy[2], enemy[3], enemy[0] - enemy[1] + enemy[4]};
41         //警察瞄准敌人时人头的中心 h2,r2,x2,y2,z2,x3,y3,z3
42         float h2 = soldier[0];
43         float r2 = soldier[1];
44         float height = h2 * 0.9f - r2 ;//实际高度 低 0.1
45
46         float[]  direction = {soldier[5], soldier[6], soldier[7]};
47
48         float a = direction[0], b = direction[1], c = direction[2];
49         float x0 = soldier[2], y0 = soldier[3], z0 = soldier[4] + height;
50         float e = enemy[2], f = enemy[3], g = enemy[0] - enemy[1] + enemy[4];
51
52         float fenmu = a*a/b + b + c*c/b;
53         float fenzi = a*a*y0/b - a*x0 + a*e + b*f + c*c*y0/b - c*z0 +c*g;
54
55         float y = fenzi / fenmu;
56
57         float x = a*(y - y0)/b + x0;
58         float z = c*(y - y0)/b + z0;
59         //两点距离平方
60         float doubleR = (x-e)*(x-e) + (y-f)*(y-f) + (z-g)*(z-g);
61
62         if(doubleR > r1*r1)
63             return false;
64         else {
65             return true;
66         }
67
68     }
69 }

转载于:https://www.cnblogs.com/wanghui390/p/3614818.html

Java HdAcm1174相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  3. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  4. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  5. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  6. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  7. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  8. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

  9. java基本类型转换,随记

    java基本类型转换: double double 转 long double random = Math.round(Math.random()*10000); long l = new Doubl ...

最新文章

  1. Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
  2. 一则鬼故事:如果全世界程序员都消失了
  3. python进行数据分析,学习笔记 第8章(1)
  4. python 修改csv某一列_使用python更改CSV中的列值
  5. 判断CPU是大端还是小端
  6. Ubuntu12.04中如何让命令行路径变短
  7. html生成一维码,一维码条形码生成工具
  8. puttygen convert ppk file to xshell key file
  9. 华为机试题python版本
  10. 基于matlab使用Windrose函数绘制风矢量分布图(风玫瑰图)
  11. 如何干掉腾讯网迷你版
  12. Android开源框架:Retrofit
  13. ControllerRevision
  14. Java笔记07——类和对象
  15. man命令后带的数字含义
  16. 高德地图小程序步行路线显示_微信小程序----map路线规划
  17. Vulnhub靶机DC系列-DC-8
  18. 1116: [POI2008]CLO
  19. 电脑WIN XP蓝屏错误代码大全
  20. 【ANSYS】壳截面定义命令流

热门文章

  1. sqlserver拼接字符串换行_sqlserver的换行
  2. 小学信息技术计算机教学反思,小学信息技术教学反思
  3. QT学习11:clicked和toggled信号
  4. 微服务架构通讯模式架构分析
  5. 根据身份证号(18/15)计算年龄、出生日期、性别
  6. SikuliX教程-下载与安装
  7. mapboxGL入门详解
  8. 在同一子网下用wireshark抓取QQ用户发送到电脑的图片
  9. 柴夥說算法(4)--再說樹
  10. aruba无线ap认证服务器,Aruba无线AP及AC配置.doc