poj 3129 通过点积求余弦(望远镜看星星)
来源:互联网 发布:淘宝商家后台登陆 编辑:程序博客网 时间:2024/04/30 17:34
题意:给定若干望远镜的方向(望远镜都位于原点)和最大视角范围,求三维空间中指定的星星点能够被看到的个数
思路:求出星星向量和望远镜方向这两个向量的夹角,如果小于此望远镜的视角,则能够被看到
#include <stdio.h>#include <string.h>#include <math.h>#define eps 1e-8#define N 16struct point{double x,y,z;}star[505],tele[55];double angle[55];int n,m;double dis(struct point s){//向量的模长return sqrt(s.x*s.x+s.y*s.y+s.z*s.z);}double dot(int a,int b){//两个向量夹角的余弦值struct point q,p;p = star[a];q = tele[b];return (p.x*q.x+p.y*q.y+p.z*q.z)/(dis(p)*dis(q));}int test(int a,int b){//判断星星的角度是否小于望远镜的角度double temp = acos(dot(a,b));if(temp-angle[b] < eps)return 1;return 0;}int main(){freopen("a.txt","r",stdin);while(scanf("%d",&n)&&n){int i,j,res=0;for(i = 0;i<n;i++)scanf("%lf %lf %lf",&star[i].x,&star[i].y,&star[i].z);scanf("%d",&m);for(i = 0;i<m;i++)scanf("%lf %lf %lf %lf",&tele[i].x,&tele[i].y,&tele[i].z,&angle[i]);for(i = 0;i<n;i++)for(j = 0;j<m;j++)if(test(i,j)){res++;break;}printf("%d\n",res);}return 0;}
0 0
- poj 3129 通过点积求余弦(望远镜看星星)
- 用哈勃望远镜看地球
- 看星星
- CET eve 看星星
- 《看星星的老人》
- 你看,星星开满树
- 买望远镜看天体需要使用的倍数
- poj 2352 树状数组(星星的级别)
- poj 2352 星星的等级
- 从星星1号等热门机看手机摄像头:ISP芯片是“大脑”(多图)
- github上星星总数排名(可以看一下源码的哦)
- 想要看得更清晰 OPPO R9超清画质要当望远镜
- 自定义RatingBar(星星)
- Stars(数星星)
- 星星
- 星星!
- 星星
- 星星
- Tree Grafting
- 第7章 数组
- hdu2047 阿牛的EOF牛肉串
- hdu 1130 How Many Trees?
- spring配置文件详解--真的蛮详细
- poj 3129 通过点积求余弦(望远镜看星星)
- Java中getResourceAsStream的用法
- ubuntu U盘安装 server版本
- WEB面试题二,
- basename()函数详解
- 微笑每一天
- 高斯消元法 模板
- hdoj2045 不容易系列之(3)—— LELE的RPG难题
- C++中Lambda表达式