朝天北方射击场子弹价格 子弹会回来伤人吗 比如垂直北方射击场子弹价格自杀 抛物线北方射击场子弹价格误杀 可能

Slate:向天鸣枪,子弹落下会伤人吗? | 科学人 | 果壳网 科技有意思
Slate:向天鸣枪,子弹落下会伤人吗?
本文作者:wendywen
一个普遍接受的共识是:如果垂直地面朝天空开枪,子弹掉下来时不会给常人造成很大杀伤力(如果被子弹直接击中的部位是眼睛、耳朵、嘴巴,则有可能殒命)。因为子弹下落的过程中,受到空气的阻扰,子弹的原始速度被削弱了。但如果往上开枪的角度并非90度垂直于地面,而是45度或更低,那么子弹的杀伤力就会比较大。这种情况下,子弹在飞行过程中保持了相对较高的速度,而且极可能保持有利的飞行方向。垂直开枪的时候,子弹掉下来时多半是弹尾朝下,或侧着往下掉,因此产生了大量阻力。
根据数百年来射击猪、牛、人类尸体、弹道学凝胶以及其它物体的经验,军需品专家估测:飞行速度为61米/秒以上的子弹才可能穿透人的皮肤;子弹在飞行过程中还受其它一些因素的影响,比如弹头有多尖,子弹击中的是人体的哪个部位(上唇皮肤比脸颊皮肤厚50%),不同的人皮肤厚度不一样,不同年龄的人皮肤弹性也不一样。
判定子弹飞行速度并不容易。子弹能飞3000米那么高,在此过程中,风可能会将子弹带到不可预知的方向。 不同种类的枪射出去的子弹速度不一样,杀伤力也不一样。口径.30(7.62mm)的步枪打出去的子弹,经过空气减速后最终落下来的平衡速度可达91米/秒,这样的子弹射中你,你可能会死。其他轻型枪械,比如9毫米的手枪发射出的子弹最终的飞行速度为46-76米/秒。另外,如果子弹下降的过程中弹头朝下的话,速度会更快,杀伤力更高。海拔不同,空气阻力就不同,这也会对子弹的杀伤力造成影响,高海拔地区空气阻力会低一些。
不过,垂直向上射出的子弹至少要在空中停留15秒钟,很多甚至超过1分钟。所以真有人朝天上放枪的话,你还来得及躲闪。
刊物:Slate网站3月30日
(果壳环球科技观光团微博
你可能感兴趣
有血淋淋的案例啊...话说当年军训有人开枪外靶打石头上,弹飞到天上,把靶场后面种田的农民给打死了。
环境工程硕士
引用 进口马桶 的回应:我小时候玩儿二踢脚,第一响上去了然后第二下没响。我就看着它直直的掉下来砸在一个小女孩儿脑袋上。。。她哭得淅沥哗啦的。。。然后我就跑了。。。她爸在楼下对着楼骂了一个小时,还以为是谁家倒霉孩子往楼下......就是你的责任好吗,要是女孩炸挂了你就是过失杀人- -
我小时候玩儿二踢脚,第一响上去了然后第二下没响。我就看着它直直的掉下来砸在一个小女孩儿脑袋上。。。她哭得淅沥哗啦的。。。然后我就跑了。。。她爸在楼下对着楼骂了一个小时,还以为是谁家倒霉孩子往楼下乱扔东西砸人。。。。因为这事儿我内疚了好久-
-现在想 真的不是我的责任。。。。
显示所有评论
全部评论(62)
哈哈说得好。
有血淋淋的案例啊...话说当年军训有人开枪外靶打石头上,弹飞到天上,把靶场后面种田的农民给打死了。
不过,垂直向上射出的子弹至少要在空中停留15秒钟,很多甚至超过1分钟。所以真有人朝天上放枪的话,你还来得及躲闪。可是像我这样反应迟钝的人怎么办?
落點難以判斷啊
我小时候玩儿二踢脚,第一响上去了然后第二下没响。我就看着它直直的掉下来砸在一个小女孩儿脑袋上。。。她哭得淅沥哗啦的。。。然后我就跑了。。。她爸在楼下对着楼骂了一个小时,还以为是谁家倒霉孩子往楼下乱扔东西砸人。。。。因为这事儿我内疚了好久-
-现在想 真的不是我的责任。。。。
引用 chirmolito 的回应:有血淋淋的案例啊...话说当年军训有人开枪外靶打石头上,弹飞到天上,把靶场后面种田的农民给打死了。躺着也中枪啊。。。这也太悲催了吧
环境工程硕士
引用 进口马桶 的回应:我小时候玩儿二踢脚,第一响上去了然后第二下没响。我就看着它直直的掉下来砸在一个小女孩儿脑袋上。。。她哭得淅沥哗啦的。。。然后我就跑了。。。她爸在楼下对着楼骂了一个小时,还以为是谁家倒霉孩子往楼下......就是你的责任好吗,要是女孩炸挂了你就是过失杀人- -
话说 就算知道他要过那么久才掉下来 你也不知道躲哪里啊?要是你躲的地方正好就是子弹的落点怎么办?一般会朝天鸣枪的地方,也不会有可以给你躲闪的建筑物吧?
引用 苦逼少年 的回应:就是你的责任好吗,要是女孩炸挂了你就是过失杀人- -..可是我真的也很无辜- -|||我后来想 要是砸她脑袋上的一瞬间爆炸了 那可就爽了。。。。
倒是一个很特殊的问题
子弹从天而降,也不知道会从哪个方向下来,往哪里躲呢?
真是躺着也中枪啊~~~~~
这个在流言终结者看过啦~~~说是不会打到人
子弹屁股向下阻力大,怎么会屁股着地?
原来csi中斜向上开枪误杀两个街区之外的路人的案例是有可能的啊~
怎么躲?你能躲得过,别人又不知道有颗子弹飞向他,怎么躲??
感觉这么死相当憋屈呢
2楼,流弹和垂直向上不一样。15楼,中国就有这样的案例。
在天朝还是比较安全的~~~
文章有bug啊!在空气中下落的物体不会一直加速,它会在重力和阻力达到平衡的时候达到最大速度并在下落过程中保持这一速度,考虑到气压的不同,越靠近地面压力越大,有可能快到地面时物体反而减速。可见对于垂直向上射出的子弹,其下落最大速度完全有可能和出膛速度无关,而只与子弹的质量和形状及当地海拔有关。我估计普通子弹的最大速度对人体不会有什么危害,当然这是指子弹垂直向上发射的情况下。
食品安全学士,科普爱好者
对这个问题有兴趣的可以去看看《流言终结者》的其中一集《子弹落地伤人》。这个问题的关键在于,人所谓的“对天开枪”往往并不是铅直向上开枪,而是以一定仰角开枪。枪械的有效射程指的是几乎平射的时候能够保持一定精度的范围。这个范围比枪械的杀伤范围其实要小很多。大家都知道射箭的时候呈一定仰角箭的射程才会达到最大,这是抛物线的缘故。枪的道理是一样的,如果以抛物线发射,那么子弹的就能够射的很远,并且还保持杀伤力。因此当一个人来个45°对天开枪,那么子弹就可以飞出1km以上,如果有人不行被打中,轻则受伤,重则致命。很多躺着中枪的案例都是这种情况。如果真的做到了铅直向上开枪呢?那么问题就会简单很多。首先子弹最终落下的速度要比从枪射出的速度低很多,并且不再旋转,杀伤力猛减。其次,子弹会受到高空风的影响而偏离发射点,最终落下的地点无法确定,但是原地落下的可能性极低,是小概率事件。
discovery的流言终结者。他们做过这个实验。有一个数据很特别,你们文章里面没有提到。流言终结者们说。子弹下落的时候,会有一个点使得地心引力和空气阻力相互抗衡,使得子弹用一个恒定的速度往下掉。可是在我的理解里面,地心引力造成的不是加速度吗?空气阻力应该差不多永远是那个样子的啊。不了解。
引用 ZC 的回应:对这个问题有兴趣的可以去看看《流言终结者》的其中一集《子弹落地伤人》。这个问题的关键在于,人所谓的“对天开枪”往往并不是铅直向上开枪,而是以一定仰角开枪。枪械的有效射程指的是几乎平射的时候能够......这个让我想起另外一集流言终结者了。里面用点45的手枪平着开枪,然后让一颗子弹头垂直下落。最后两颗子弹是同时着地的。所以,仰角度开枪,如果在弹道下落的范围内,人应该也是没有事情的。只是在外部弹道里面,子弹才会真的伤到人吧。
罪案剧迷,果壳阅读译者
slate上的文章都很GEEK,最近飞机出故障迫降那个说的也很好玩
引用 笑笑虫 的回应:discovery的流言终结者。他们做过这个实验。有一个数据很特别,你们文章里面没有提到。流言终结者们说。子弹下落的时候,会有一个点使得地心引力和空气阻力相互抗衡,使得子弹用一个恒定的速度往下掉。可是......空气阻力应该是和速度的平方成正比的吧?速度越快空气阻力越大啊,所以会有一个速度达到一定的时刻空气阻力和重力相等吧?
绝对是你的责任啊
怎么会不是呢〈?引用 进口马桶 的回应:我小时候玩儿二踢脚,第一响上去了然后第二下没响。我就看着它直直的掉下来砸在一个小女孩儿脑袋上。。。她哭得淅沥哗啦的。。。然后我就跑了。。。她爸在楼下对着楼骂了一个小时,还以为是谁家倒霉孩子往楼下乱扔东......
引用 Icewolf 的回应:文章有bug啊!在空气中下落的物体不会一直加速,它会在重力和阻力达到平衡的时候达到最大速度并在下落过程中保持这一速度,考虑到气压的不同,越靠近地面压力越大,有可能快到地面时物体反而减速。可见对于垂直向......和出膛速度无关是不可能的吧,毕竟速度越大初动能就越大,初动能越大子弹上升的最高高度就越高,因此如果按你说和出膛速度无关的话就可以给出这么一个命题:物体(子弹)从任何高度静止落下,最后到达地面的速度相同。这个不难证伪吧。其实回头想想,蹦的越高摔的越重这似乎是很正常的事情啊= =。虽说子弹由于自身体积和质量的原因受空气阻力影响很大,但我觉得说和初速度无关是无法理解的。
垂直向上射出的子弹至少要在空中停留15秒钟,很多甚至超过1分钟。所以真有人朝天上放枪的话,你还来得及躲闪。原文地址:本文版权属于果壳网(),转载请注明出处。商业使用请联系果壳网。在此过程中,风可能会将子弹带到不可预知的方向。原文地址:本文版权属于果壳网(),转载请注明出处。商业使用请联系果壳网。怎么躲 啊????
引用 Dsighner 的回应:引用 Icewolf 的回应:文章有bug啊!在空气中下落的物体不会一直加速,它会在重力和阻力达到平衡的时候达到最大速度并在下落过程中保持这一速度,考虑到气压的不同,越靠近地面压力越大,有可能快到地面......不是从任何高度落下子弹的落地速度都相同,而是说:1.存在某一确定的高度,在这个高度之上,子弹落地的速度都等于最大落地速度;2.在这一高度之下,子弹落地的速度由子弹的高度确定,其落地速度都小于最大落地速度。
引用 笑笑虫 的回应:引用 ZC 的回应:对这个问题有兴趣的可以去看看《流言终结者》的其中一集《子弹落地伤人》。这个问题的关键在于,人所谓的“对天开枪”往往并不是铅直向上开枪,而是以一定仰角开枪。枪械的有效射程指的是几乎平......貌似你把子弹的速度和子弹在垂直方向上的分量速度搞混了。
显示所有评论
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报电话:朝天鸣枪 子弹落下来会杀死人吗?
导读:想知道由此射出的子弹最后何去何从?比如在闹市区,警察不管是朝天鸣枪还是45度朝前方鸣枪(据说这个角度打死过站在阳台看热闹的,汗!),子弹出来后在重力和空气阻力下做垂直方向的减速运动,然后上升至垂直方向速度为0,接着朝下在重力加速度下做自由落体运动,如果我的中学物理知识没有忘光光的话,如果忽略空气阻力不计,这些子弹在重新落至它们被射出的水平高度时,能达到原来射出枪口时的速度。我好像没有记错吧?以前做过好多垂直上抛物体计算下落速度的题。
这样一来,在闹市区朝天鸣枪后子弹下坠,如果落在某位不幸的路人
想知道由此射出的子弹最后何去何从?比如在闹市区,警察不管是朝天鸣枪还是45度朝前方鸣枪(据说这个角度打死过站在阳台看热闹的,汗!),子弹出来后在重力和空气阻力下做垂直方向的减速运动,然后上升至垂直方向速度为0,接着朝下在重力加速度下做自由落体运动,如果我的中学物理知识没有忘光光的话,如果忽略空气阻力不计,这些子弹在重新落至它们被射出的水平高度时,能达到原来射出枪口时的速度。我好像没有记错吧?以前做过好多垂直上抛物体计算下落速度的题。这样一来,在闹市区朝天鸣枪后子弹下坠,如果落在某位不幸的路人头上,那岂不是相当于对着天灵盖打上那么一枪?求弹道大人解惑!
猜你感兴趣
热门评论31楼兄弟你的力学理论是和街上卖艺的学的吧,敢不敢做个试验:你站在楼下,让你老婆从楼上轻轻洒落一把螺母,如果你被砸中脑袋你就知道什么叫势能了。如果高度足够,你老婆有可能涉嫌谋杀亲夫。去查阅一下安全事故案例,类似一个螺母从高处落下砸死人的事情绝非仅有,还“不足破坏小小的方便袋,打在身上没事的”,脑袋里进水了吧。41楼51楼31楼&兄弟你的力学理论是和街上卖艺的学的吧,敢不敢做个试验:你站在楼下,让你老婆从楼上轻轻洒落一把螺母,如果你被砸中脑袋你就知道什么叫势能了。如果高度足够,你老婆有可能涉嫌谋杀亲夫。去查阅一下安全事故案例,类似一个螺母从高处落下砸死人的事情绝非仅有,还“不足破坏小小的方便袋,打在身上没事的”,脑袋里进水了吧。别说螺母了,一个个、用废的焊条头(5厘米左右)从70多米的门机上掉下来就能直接砸穿安全帽。更别说一颗子弹了,只能说落头上那家伙他倒霉,活该中大奖。妈妈的,现在论坛上专业胡搅蛮缠吵架高手可是不少8楼所以说二楼就是出那啥的地方。重机枪超越射击可不是枪口对天射击,而是以高弹道的方式使子弹越过己方士兵攻击敌方。40楼36楼&你知道这个匀速下降的速度最低是多少吗?从高空落下的物体(包括子弹、炮弹等),开始是加速的,但随着速度的增加,空气阻力也不断加大,当达到重力与空气阻力相等时,速度便不再增大,此时就是匀速下降了,速度为一固定值。至于这个固定值----即最大速度,与物体形状及大小、以及物体密度等有关,与物体是否是空心也有关,简单的说吧:一团棉花最后的速度可能只有几米每秒,一个人掉下可以达到50米每秒,一个几百公斤的金球落下最后可以达到几百米每秒的速度
点击加载更多
更多精彩内容8466人阅读
Unity3D(156)
弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺复杂的数学。网上这方面的资料还真不多,而且都是写的含含糊糊。抽空总结一下自己的方法。
讨论的前提是,假设目标是在3D空间里以匀速直线方式运动。
1.直线弹道
在不考虑重力和空气阻力影响的情况下,子弹的弹道呈直线运动。这种情况下,其实是个纯平面几何空间的问题,不需要微积分和线代知识。
分析的情况如下图:
&& & & &虽然在3D空间飞行,但火炮命中时,命中点和火炮位置、飞机初始位置处于一个三角形上,只需要平面几何知识就能解决问题。在这个三角形中,飞机起始位置P和火炮T的位置是确定的,飞机的飞行方向也是确定的,所以θ角是已知的,D的长度也是已知的,F和G的长度虽然不知道,但在命中点H相遇的时候经过的时间t都是一样的,所以F/G的比例实际等于两者速度的比例,而两者的速度都是已知的。这样就可以用高中的余弦公式来解决这个求边长的问题:
& & & & & & & & & &
其中V_p和V_g分别代表飞机的速度和炮弹飞行的速度,这是一个标准的1元2次方程,化简、消元对某这么一个非数学专业的来说太麻烦了,直接用求根公式求解吧,有好的化简方法请指教。
在Unity中实现的方法:
Vector3 hitPoint = Vector3.//存放命中点坐标
//假设飞机物体是aircraft,炮塔物体是gun 两者间的方向向量就是两种世界坐标相减
Vector3 D = gun.transform.position - aircraft.transform.
//用飞机transform的TransformDirection方法把前进方向变换到世界坐标,就是飞机飞行的世界方向向量了
Vector3 aircraftDirection = aircraft.transform.TransformDirection(Vector3.foward);
//再用Vector3.Angle方法求出与飞机前进方向之间的夹角
float THETA = Vector3.Angle(D,aircraftDirection);
float DD = D.//D是飞机炮塔间方向向量,D的magnitued就是两种间距离
float A =1-Mathf.Pow((gunVelocity/aircraftVelocity),2);//假设炮弹的速度是gunVeloctiy飞机的飞行线速度是aircraftVeloctiy
float B = -(2*DD*Mathf.Cos(THETA**Mathf.Deg2Rad));//要变换成弧度
float C = DD*DD;
float DELTA = B*B-4*A*C;
if (DELTA&=0){//如果DELTA小于0,无解
&&&float F1 = (-B+Mathf.Sqrt(B*B-4*A*C))/(2*A);
&&&float F2 = (-B-Mathf.Sqrt(B*B-4*A*C))/(2*A);
&&&if(F1&F2)//取较小的一个
&&&F1 = F2;
&&&//命中点位置等于 飞机初始位置加上计算出F边长度乘以飞机前进的方向向量,这个乘法等于把前进的距离变换成世界坐标的位移
&&&hitPoint = aircraft.transform.position + aircraftDirection * F1;&&&&&&&
假设你的炮弹是个Prefab叫projectilePrefab,带有一个刚体,那么可以这样生成炮弹实例:
if(hitPoint != Vector3.zero){//如果有解
&&&&//生成一个炮弹实例,位置在炮塔的位置,方向是从炮塔指向命中点
&&&&GameObject obj =& (GameObject)Instantiate(projectilePrefab,gun.transform.position,Quaternion.LookRotation(hitPoint));
&&&&//假设muzzleVelocity是设定的炮弹速度(0,0,muzzleVelocity)表示往正z方向运动,用TransformDirection把这个速度变换成世界坐标的速度向量
&&&obj.rigidbody.velocity = obj.transform.TransformDirection(new Vector3(0,0,muzzleVelocity));
经过以上计算,炮弹可以准确的命中飞行中的目标,只要目标是按照固定速度和方位角飞行的,可以百发百中。当然也会有无解的情况,所以计算的时候判断了Delta,一共也就是几条语句。
2.抛物线弹道
考虑进重力影响,炮弹的弹道就是一个抛物线方程,而目标还是在3D空间的匀速直线运动,一个空间直线方程。
一个曲线方程和一个直线方程,以隐含参数t(飞行时间)求共同解(相交)问题,列方程组:
其中Vp和Vg分别代表飞机和炮弹飞行速度,角度Theta是炮弹射出时的仰角,t是飞行时间。这是个非齐次非线性隐含微分方程组,以某人的数学基础,看不出有什么特殊解的方法,用常规的迭代逼近求解吧,求达人提供更好方法。
迭代的过程大致是:
& & & & 1.用一组预测的xy落点坐标带入抛物线方程
& & & &2.求出发射的角度和飞行时间t
& & & &3.将时间带t入直线方程,求出相应的xy坐标
& & & &4.将这个坐标与之前猜测的xy坐标进行比较,如果差值小于允许误差,迭代结束返回结果
& & & &5.如果差值大于误差,将这个新的xy作为下一次计算的预测xy,返回步骤1
& &这个过程的物理含义可以这样理解:瞄准飞机现在的位置发射,等炮弹飞到的时候飞机已经往前飞行了一段距离,把炮弹飞行时间乘以飞机速度,得到飞机在该时刻的实际位置,下次瞄准这个位置,再计算,因为目标变了,炮弹的飞行时间也变了,所以该时刻飞机位置也不同了,就这样不停循环,炮弹落点追赶飞机位置,直到两者差距无穷小。
针对抛物线方程把t带入,得到:
然后用基础代数方法进行推导化简,再用通用求根公式得到:
这样θ角就可以通过预测的落点坐标、炮弹初速度、重力加速度g来求出。
迭代是有很多技巧的,这些内容需要复习大学微积分课程。好的迭代方法能够快速收敛,最大化的解释运算开销。望高数达人提供更佳的迭代方法。
在Unity中实现,有几个核心思想:
& &1.迭代体用函数递归来实现
& &2.抛物线本身是2D曲线,所以其实不需要3重坐标就能计算,每次运算时把z指向预测的落点,第3个坐标可以无视
& &3.各种变换可以快速的通过向量、矩阵运算得到,很方便,不需要总是借助transform
//抛物线方程 X Y代表预测落点,V代表炮弹初速,G是重力加速度 返回值是Vector2,其中x是发射角,y是飞行时间
Vector2 formulaProjectile(float X,float Y,float V,float G){
if(G ==0){//如果无重力 问题就成了简单的三角函数 THETA等于atan(y/x) 飞行时间就等于(Y/sin(THETA))(斜边长)再除以速度
&&&&float THETA = Mathf.Atan(Y/X);
&&&&float T = (Y/Mathf.Sin(THETA))/V;
&&&&return(new Vector2(THETA,T));
}else{//用上面的公式进行计算
&&&&float DELTA = Mathf.Pow(V,4)-G*(G*X*X-2*Y*V*V);
&&&&if(DELTA & 0){//DELTA小于0无解
&&&&&&&&return Vector2.
&&&&float THETA1 = Mathf.Atan((-(V*V)+Mathf.Sqrt(DELTA))/(G*X));
&&&&float THETA2 = Mathf.Atan((-(V*V)-Mathf.Sqrt(DELTA))/(G*X));
&&&&if(THETA1&THETA2)//取较小值
&&&&&&&&THETA1 = THETA2;
&&&&float T = X/(V*Mathf.Cos(THETA1));//用抛物线水平运动方程计算飞行时间 比较简单
&&&&return new Vector2(THETA1,T);
//目标运动的直线方程 VT是目标运动速度 PT是目标当前位置 DT是目标运动方向 TT是运动时间 返回值是目标经过时间TT以后的实际位置
Vector3 formulaTarget(float VT,Vector3 PT,Vector3 DT,float TT){
//简单的一句话搞定直线方程计算 目标实际位置=目标当前位置+目标运动方向向量*(目标飞行速度*目标飞行时间)
&&&&return PT + DT * (VT * TT);
//主迭代函数 参数灰常多 用于算法演示 实际使用是可以简化的
//gunVelocity:炮弹初速度 gunPosition:炮塔世界坐标 aircraftVelocity:飞机线速度 aircraftPosition:飞机当前位置世界坐标
//aircraftDirection:飞机飞行方向向量 hitPoint:预测的命中点 G:重力加速度 accuracy:计算精度 小于这个值认为计算完成 diff:上次迭代的差值
//返回值是炮塔发射时瞄准点的坐标(注意不是实际命中点)
Vector3 calculateNoneLinearTrajectory(float gunVelocity,Vector3 gunPosition,float aircraftVelocity,
Vector3 aircraftPosition,Vector3 aircraftDirection,Vector3 hitPoint,float G,float accuracy,float diff){
//如果预测命中点是0 无解 返回0
if(hitPoint == Vector3.zero){
&&&&return Vector3.
//把炮塔正z指向预测命中点在炮塔高度的一个水平面上的投影点
//这样就构造了一个以炮塔为原点,以重力方向为-y轴 以炮塔正前方为x轴的标准抛物线2D坐标系,这个要自己体会下
Vector3 gunDirection = new Vector3(hitPoint.x,gunPosition.y,hitPoint.z) - gunP
//构造一个从世界坐标到炮塔坐标的旋转矩阵
Quaternion gunRotation = Quaternion.FromToRatation(gunDirection,Vector3.forward);
//把预测命中点变换到炮塔坐标(减法是计算相对坐标差,再旋转到炮塔当前坐标来)
Vector3 localHitPoint = gunRotation * (hitPoint - gunPosition);
float V = gunV
float X = localHitPoint.z;//注视方向 前方是z,也就是抛物线坐标里的X
float Y = localHitPoint.y;
Vector2 TT = formulaProjectile(X,Y,V,G);//用抛物线方程计算射击仰角和飞行时间
if(TT == Vector2.zero){//如果无解 返回
&&&&return Vector3.
float VT = aircraftV
Vector3 PT = aircraftP
Vector3 DT = aircraftD
float T = TT.y;//TT的y是用抛物线方程计算出的弹丸飞行时间
Vector3 newHitPoint = formulaTarget(VT,PT,DT,T);//带入直线方程计算目标实际位置 注意目标的计算是在3D世界坐标进行的
float diff1 = (newHitPoint - hitPoint).//判断预测点和实际目标位置的距离
if (diff1 & diff){//如果距离大于上一次计算的距离 那么要么迭代算法有问题 是发散的 要么就无解 返回0
&&&&return Vector3.
if(diff1&accuracy){//如果距离小于希望的精度 找到结果 返回瞄准点 炮弹是抛物线 发射时不能瞄准命中点 要计算瞄准点
&&&&gunRotation = Quaternion.Inverse(gunRotation);//把刚才构造的旋转矩阵进行逆变换,从炮塔坐标变回世界坐标
&&&&Y = Mathf.Tan(TT.x)*X;//TT的x是炮弹射出的仰角tan(仰角)*水平距离=垂直高度了(三角函数),这才是瞄准点的高度
&&&return gunRotation * new Vector3(0,Y,X) + gunP//把瞄准点变换回世界坐标 注意X其实是Z
//即不是无解 也未达到精度要求 递归调用继续迭代 其中预测命中点用目标轨迹方程计算出的新位置取代 参考差值用本次计算的差值取代
return calculateNoneLinearTrajectory(gunVelocity,gunPosition,aircraftVelocity,aircraftPosition,aircraftDirection,newHitPoint,G,accuracy,diff1);
一个炮弹运动轨迹方程 一个目标运动轨迹方程,加一个迭代函数,就能完成计算抛物线弹道命中直线匀速移动目标的问题。实际使用的时候,可以先用方法1直线弹道算出一个命中点,作为初始预测点带入进行迭代,可以减少迭代次数。过程里使用了大量简化的向量和矩阵运算,对这部分不熟的读起来可能费劲。
在几千米范围以内的飞机,飞行速度在300-700km/h,炮弹出膛速度在500m/s(2战水平,其实高射炮出膛速度不止这么点),命中精度10m以内的前提下,基本上4次迭代以内可以完成。
3.更多复杂因素的计算
& &在实际情况中,还可能有更多的影响。比如目标不是匀速直线而是加速运动或者曲线运动,比如空气阻力对弹道的影响,弹丸质心不在几何中心时与重力、空间阻力夹角产生的偏转力矩,炮弹在移动的平台上射击移动的目标。另外炮弹出射点是从炮口算起,在旋转炮塔和炮管的情况下,这个出射点其实是个球面轨迹而不是个固定点。火炮发现目标到炮口转动到合适位置的时间里,目标又发生了位移,所以还要计算这个炮塔旋转的提前量。这一系列的复杂问题其实都可以通过联立方程组,然后迭代求解的方法实现,原理完全一样,只是计算复杂度大大增加。
比如在考虑空气阻力等情况下,炮弹的轨迹方程会是这种形式: & & & &
这些影响因素可能是线性的、2次乃至高次的。根据上面的算法,只要把抛物线方程组变成这个新的高次方程组求解,也可以适用。
再比如目标飞行的不是直线而是圆形,那么把目标的方程组变换成圆方程,也可以适用。当然在目标轨迹是非线性轨迹的情况下,迭代就不能用这种线性的迭代了,否则迭代结果会一会收敛一会发散,常规的方法是用目标轨迹函数的导函数计算迭代,这部分实在很难做到通用,需要根据具体情况调整。
给出一个概念方程组:
把这些方程组中按照影响关系进行多次分步迭代,最终能得到合适的解或者判断无解。这组方程可以应对各种复杂情况的组合,实际上军事上火控系统正是这样计算的。不过在游戏中,通常不需要这么复杂的计算,只要简单的模拟就足够了,所以只是从概念层面讨论一下,如果这些复杂因素都考虑进去,完全可以作成一个可视的军事仿真的程序来了。
惯例...只写原理不付DEMO大致是没多少人看的,附上自己写的demo
Reset Target:设置目标飞机以随机方位角和速度飞行
Gravity ON/OFF:设置是否开启重力
Aiming Mode: Manual/Auto 设置瞄准模式人工/自动
人工模式下:wsad键上下左右旋转炮管方位角 空格键击发
自动模式下:炮管自动瞄准提前量瞄准点,空格击发 百发百中
AutoCam ON/OFF:设置飞机小镜头的显示模式,关闭自动镜头可以用按钮调整镜头的角度 + -按钮缩放镜头
Change Focus:改变主镜头焦点,在高射炮和目标飞机之间切换,以飞机为焦点时的镜头:
如果无法命中,会发出提示音效
不同视角下的效果:百发百中的弹道 只给了炮弹一个初速度和方向 然后靠碰撞检测显示爆炸效果,过程完全靠物理引擎控制。
人工发射模式:
设置参数:
速度的单位都是m/s,长度单位都是m
Range是飞机初始位置的范围
Gravity Modifier:重力缩放因子,因为场景和模型是1:10比例,所以重力设置为1/10,否则就像玩具,模拟的效果不会真实
其他参数都会用这个因子缩放,所以按照实际情况设置就行。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:989306次
积分:10490
积分:10490
排名:第1175名
原创:78篇
转载:350篇
评论:77条
(2)(3)(2)(1)(3)(1)(4)(2)(2)(6)(25)(2)(5)(3)(65)(20)(2)(4)(4)(58)(12)(10)(82)(75)(25)(1)(1)(1)(3)(2)(8)(1)}

我要回帖

更多关于 朝天鸣枪子弹去哪了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信