hdu1174-爆头

http://acm.hdu.edu.cn/showproblem.php?pid=1174

之前没搞懂,想得太复杂了,从网上查了很多代码,但是很混乱,各种方法都有,不过,最终还是理清楚了 ;其中,就被高数中点向法,还有其他几种解法造成的误解最大;

数学叉积公式 ,点B到直线AC的距离 就是 |AB X AC|/|AC|   ‘X’是叉乘   ’ || ‘表示模 ;

其次,这题需要注意的还有几点;第一,就是警察的头的中心和土匪头的中心点的求解;

                                           第二,就是这道题目使用警察枪口方向向量来代表土匪头部到警察射程来进行计算;

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
#include "algorithm"
#include "iostream"

using namespace std;

#define eps 1e-6

struct node 
{
	double x , y , z ;
}line[ 3 ] ;

double chaji( node a , node b ) 
{
	double x1 = a.x ;
	double y1 = a.y ;
	double z1 = a.z ;
	double x2 = b.x ;
	double y2 = b.y ;
	double z2 = b.z ;
	double x = y1 * z2 - z1 * y2 ;
	double y = x1 * z2 - z1 * x2 ;
	double z = x1 * y2 - x2 * y1 ;
	return sqrt( x * x + y * y + z * z ) ;
}

int main()
{
	double h1 , r1 , x1 , y1 , z1 ;
	double h2 , r2 , x2 , y2 , z2 , x3 , y3 , z3 ;
	int n ;
	while( scanf( "%d" , &n ) != EOF )
	{
		while( n-- )
		{
			scanf( "%lf%lf%lf%lf%lf" , &h1 , &r1 , &x1 , &y1 , &z1 ) ;
			scanf( "%lf%lf%lf%lf%lf%lf%lf%lf" , &h2 , &r2 , &x2 , &y2 , &z2 , &x3 , &y3 , &z3 ) ;
			line[ 0 ].x = x3 , line[ 0 ].y = y3 , line[ 0 ].z = z3 ;
			line[ 1 ].x = x1 - x2 , line[ 1 ].y = y1 - y2 , line[ 1 ].z = z1 + h1 - r1 - ( h2 * 0.9 + z2 - r2 ) ;
			double d = chaji( line[ 0 ] , line[ 1 ] ) ;
			d /= sqrt( x3 * x3 + y3 * y3 + z3 * z3 ) ;
			if( d - r1 < eps )
				puts( "YES" );
			else
			 	puts( "NO" ) ;
		}
	}
	return 0; 
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值