题目描述
fps游戏是第一人称射击游戏。这类游戏有一个很重要的技巧也是基本功之一的,是压枪。
为了模拟真实环境,在游戏里你每开一枪,枪口都会往上和左右浮动。
如果你想使枪口在某个范围内,为了提高精准度,你就必须压枪。
而且每把枪的后坐力不同和有效打击距离不同,就需要对每把枪都很熟悉,能很快的计算出在多远距离外开枪枪口会往上和左右浮动多少。
现在只考虑枪的垂直浮动。
假设在d米外有一个靶子,初始枪口正对靶心的圆心,靶心是个半径为r米的圆,现在你要射击c次。(你可以把枪看成一个点)。
为了省力,要使压枪次数最少。
只有当在靶上的射击位置在靶心之外时才需要压枪。
每次压枪,枪口都会回到上次的射击位置。
每次开枪最多只能压一次枪,不能连续压枪。

输入
每个输入文件只包含一组数据。
包含3个正整数d,r,c和1个实数a(d,r,c意义如上文所述,a是每次开枪,枪口向上浮动的角度)。
(1 <= d,r <= 100,0 <= c <= 1000000,0 <= a < 90)

输出
一个整数,表示压枪的最少次数。

样例输入
10 1 10 3
样例输出
8

分析:有两种分析思路,第一种是一直把角度累加,直到满足偏移量超过半径位置,这以后的每次射击都需要压枪,这需要用到tan函数;还有一种思路是直接计算出要压枪时的极限角度,利用atan函数即可。
需要注意的是,tan atan都是针对弧度制的,本题给的是角度制,因此要转化,角度*π/180即可转化为弧度制。
除此之外,本题需要考虑精度的问题,这题的数据很强。

思路一的代码体现了精度重要性,先给一段ac了89%的代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=4*atan(1.0);
int d,r,c,i;
double kk,a,k;
int main(){scanf("%d%d%d%lf",&d,&r,&c,&a);for (i=1;i<=c;i++){k=k+a;if (tan(k*pi/180)*d>r) break;}if (i>c) printf("0\n");else printf("%d\n",c-i);
}

这里的pi利用反三角函数定义得出,但是,这个精度是不够的,这里只精度到了3.14159,在过数据100 100 1000000 0.00005时,原本该输出99999却输出了100000。我们可以记住以下圆周率π:3.14159265,以防止精度上的缺失。

思路一ac代码如下:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
double pi=3.1415926;
int main(){int d,r,c,i;double a,s;while(~scanf("%d%d%d%lf",&d,&r,&c,&a)){s=0;for(i=0;i<c;i++){if(1.0*d*tan(s*pi/180.0)>1.0*r)break;s+=a;}printf("%d\n",c-i);}
}

思路二倒是可以利用反三角函数定义的π值来计算,ac代码如下:

#include<bits/stdc++.h>
using namespace std;
const double pi=acos(-1.0);
int main(){double d,r,a;int c;cin>>d>>r>>c>>a;double mm=atan(1.0*r/d)*180/pi;int num=mm/a+1;cout<<max(c-num,0)<<endl;
}

HNUCM 1325:fps游戏相关推荐

  1. c语言游戏call调用,C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)...

    C语言-植物大战僵尸-刷僵尸call:fps游戏CS-方框透视(矩阵+传统)前言:大家好,我是向上先生,嘿嘿~最近在学习逆向.反汇编等等,首先我在非常感谢52pojie这个平台,差不多很多学习资源都是 ...

  2. lolfps高但画面不流畅_全面解析:高刷新率真能提高FPS游戏技术?

    时隔多年再一次陪朋友座进网吧的时候,老实说我真的后悔了!这次网吧的游戏体验非常的糟糕,总感觉画面和动作并不流畅,经过几番探索之后我终于找到了原因,原来网吧电竞区的显示器刷新率居然只有60Hz!这对于游 ...

  3. 以CSGO为例 分析不同网络延时下FPS游戏同步的实现

    FPS游戏中,在玩家的延时都不一样的情况下是如何做到游戏的同步性的? 下面会大量使用CSGO作为例子,这是因为Valve在多人游戏的网络通信方面做得较好,可以当做一个典型来分析. 先讲多人竞技游戏中客 ...

  4. 百万局对战教AI做人,技术解读FPS游戏中AI如何拟人化

    作者:johnxuan,腾讯 TEG 应用研究员 FPS 游戏 AI 是腾讯 AI Lab 的一大重要研究方向,其拟人化 AI 也在 FPS 手游<穿越火线-枪战王者(CFM)>春节期间上 ...

  5. fps游戏 三角函数+模拟

    题目描述 fps游戏是第一人称射击游戏.这类游戏有一个很重要的技巧也是基本功之一的,是压枪. 为了模拟真实环境,在游戏里你每开一枪,枪口都会往上和左右浮动. 如果你想使枪口在某个范围内,为了提高精准度 ...

  6. FPS游戏:D3D实现游戏人物上色

    本教程是<FPS游戏:实现D3D劫持透视 (API Hook)>教程的延续篇,在上一课我们讲解了如何通过函数劫持,实现对特定角色墙后透视功能,不过我们当时使用的是全局透视,并没有找到人物模 ...

  7. Unity3D引擎入门搭建一个FPS游戏Demo

    目录 一.unity3d简介(平台,应用范围,经典游戏) 二.界面,基础操作(界面,创建场景,灯光系统,摄像机,组件,脚本语言) 1.界面 2.基本操作 三.demo制作(坐标系统,视角控制,移动,碰 ...

  8. 如何在FPS游戏中快速实现简单的人体定位算法

    概述 最近在很多B站的视频上看到大佬们分享的AI应用案例,其中有一个引起了我的兴趣:基于深度学习网络, 在CSGO中实现人体定位算法,并进行自动瞄准与射击.当然,这种明显有悖于游戏公平性的行为我是不会 ...

  9. FPS游戏UE4逆向视频教程

    FPS游戏UE4逆向视频教程 课程成品演示-课程前言 寻找Count(吃鸡模拟器) 寻找世界数组地址里的坐标(吃鸡模拟器) 寻找矩阵(吃鸡模拟器) 易语言编写代码-实现绘制框-(吃鸡模拟器) 易语言编 ...

  10. unity应用实例——从头撸一个全新的FPS游戏(1)

    从今天开始打算从头开始搞一个全新的FPS游戏,引擎使用的是unity2017,所有美术资源都计划从商店购买或是网上下载(自己实在搞不来),主要玩法是玩家需要穿越多个地图到达目的地,每个地图类似于一个地 ...

最新文章

  1. Blackboard Collabrate 模拟器打开
  2. VTK:图片之ImageCheckerboard
  3. 解决“跨域问题”的几种方法
  4. 如何用CSS让一个容器水平垂直居中?
  5. 【例1】 给定n(n>=1),用递归的方法计算1+2+3+4+...+(n-1)+n。
  6. 我爱计算机视觉精华文章分类汇总(2018年12月13日)
  7. python socket-tcp逻辑
  8. shell初学之nginx(负载均衡)
  9. 测试中存在的弊端及改进建议(面试时会被问到)
  10. cad查看_CAD手机看图软件中批注的图片在电脑上如何查看?
  11. oracle数据库:恢复delete的数据
  12. 2022-01-28 Android app 背景图首尾相接滚动效果,ImageView 滚动显示效果
  13. python指纹识别_Python实现指纹识别你见过没?
  14. 使用html2canvas生成海报
  15. mysql格式化日期的函数_MySql格式化日期函数
  16. 股票中MACD如何计算,有什么意义
  17. PyTorch单机多卡训练(DDP-DistributedDataParallel的使用)备忘记录
  18. 微服务电商项目技术全解析
  19. MFSK调制与相干解调-MATLAB基带仿真
  20. SQL 大厂面试真题篇

热门文章

  1. Oracle常用操作【自己的练习】
  2. 141.3. 单机安装 CentOS 5 + hadoop-0.20.0
  3. CSS3实现的立体button
  4. [Asp.Net web api]基于自定义Filter的安全认证
  5. 让IIS只监听一个IP上的80端口
  6. MySQL中多表的连接
  7. Linux使用Blowfish生成密码,linux批量生成密码
  8. Unity中Lua造成的堆内存泄露问题
  9. Keil自动格式化代码
  10. 1小时学会jQuery,全程无废话,直接上代码