抛物线轨迹计算


不同输入情况下的抛物线有不同计算方式。为了保证飞行时间的一致,水平初速度和起点两个参数是任何情况下都需要的。

三、示例代码

void UParabolicMovementComponent::InitComputeParams()
{
//无目标时if (!bHasTarget){
//      指定出射角度时计算方法
//      FQuat quat = UpdatedComponent->GetComponentQuat() * FQuat(Rotation);
//      DirHorz = quat.Rotator().Vector();
//      float Theta = DirHorz.Z / DirHorz.Size2D();
//      VerticalSpeed = HorzSpeed * tan(Theta);
//      DirHorz.Z = 0;//指定最大高度时计算方法
DirHorz = UpdatedComponent->GetComponentRotation().Vector();DirHorz.Z = 0;DirHorz.Normalize();
//若无目标则默认G=980.0fVerticalSpeed = FMath::Sqrt(2 * Gravity * MaxHeight);}
//有目标时else{DirHorz = GetTargetPosition() - GetHostPosition();float HeightDist = DirHorz.Z;DirHorz.Z = 0;float Dist = DirHorz.Size();DirHorz.Normalize();TotalTime = Dist / HorzSpeed;VerticalSpeed = (2.0f * (MaxHeight + FMath::Sqrt(MaxHeight*MaxHeight - MaxHeight*HeightDist))) / TotalTime;Gravity = VerticalSpeed * VerticalSpeed / (2.0f * MaxHeight);//VerticalSpeed = HeightDist / TotalTime + .5f * Gravity * TotalTime;}CurrentTime = 0;StartPos = GetHostPosition();Velocity = DirHorz * HorzSpeed + FVector::UpVector * VerticalSpeed;UpdateComponentVelocity();
}//计算当前时刻所在位置
void UParabolicMovementComponent::ComputeMovement(float DeltaTime, FVector& OutMoveDelta)
{CurrentTime += DeltaTime;if(bHasTarget){if (CurrentTime >= TotalTime){CurrentTime = TotalTime;bStop = true;}}float CurrentVertSpeed = VerticalSpeed - Gravity * CurrentTime;float fVertDist = .5f * (VerticalSpeed + CurrentVertSpeed) * CurrentTime;OutMoveDelta = StartPos + CurrentTime * HorzSpeed * DirHorz + fVertDist * FVector::UpVector - GetHostPosition();Velocity = DirHorz * HorzSpeed + FVector::UpVector * CurrentVertSpeed;//OutNewRotation = Velocity.Rotation().Quaternion();
}

导弹线轨迹计算

物体以某个初速度方向出发后,先保持稳定线性速度,以一定角速度向目标点旋转,当速度方向和自身-目标方向的夹角小于一定角度后,速度方向立刻改为自身-目标方向,进行直线加速。

示例代码

void UMissleMovementComponent::InitComputeParams()
{Dir = (UpdatedComponent->GetComponentQuat() * Rotation.Quaternion()).Rotator().Vector();Dir.Normalize();Velocity = Dir * StartSpeed;CurrentSpeed = StartSpeed;UpdateComponentVelocity();
}void UMissleMovementComponent::ComputeMovement(float DeltaTime, FVector& OutMoveDelta)
{float MinDist = GetMinimalDistance();static const float fLimit = (float)cos(FMath::DegreesToRadians(LimitDegree));FVector vDir;vDir = GetTargetPosition() - GetHostPosition();float fLeft = vDir.Size();vDir.Normalize();float fDist = CurrentSpeed * DeltaTime;  if (fDist >= fLeft){fDist = fLeft;bStop = true;}float fAngle = Velocity.GetSafeNormal() | vDir;//如果小于最小距离;或者角度相近,使用直线if (fLeft < MinDist || fAngle > fLimit){CurrentSpeed += LinearAcc * DeltaTime;OutMoveDelta = vDir * fDist;Velocity = vDir * CurrentSpeed;}else{OutMoveDelta = Velocity * DeltaTime;FVector vUp = Velocity ^ vDir;vUp.Normalize();FQuat q(vUp, RotationSpeed * DeltaTime);Velocity = q.RotateVector(Velocity);}//OutNewRotation = Velocity.ToOrientationQuat();//OutNewRotation = Velocity.Rotation().Quaternion();
}
float UMissleMovementComponent::GetMinimalDistance()
{float d = 2.0f * StartSpeed / RotationSpeed;return d;
}

转载于:https://www.cnblogs.com/corgi/p/5405450.html

抛物线、导弹线轨迹计算相关推荐

  1. java实现抛物线轨迹计算_抛物线、导弹线轨迹计算

    抛物线轨迹计算 不同输入情况下的抛物线有不同计算方式.为了保证飞行时间的一致,水平初速度和起点两个参数是任何情况下都需要的. 三.示例代码 void UParabolicMovementCompone ...

  2. 利用计算机测地震是计算机的什么,计算机在气象预报、地震探测、导弹卫星轨迹等方面的应用都属于( )...

    参考答案如下 计算机在气象预报.计算机地震探测.导弹卫星轨迹等方面的应用都属于( ) 气象[单选题]关于第四代计算机的特点描述错误的是( ) [单选题]徽派民居建筑风格有"三绝"- ...

  3. [原创]物探小宽线坐标快速生成(平行线坐标互算 、点到线距离计算、两线交点计算等)...

    界面如下: 下载地址:CSDN 功能简介: 主要是解决并简化各项目中坐标(特别是是斜测线坐标方程组)的重复脑残计算问题,降低脑残机率,为懒而生 1.对于斜线.规则线坐标理论快速生成等 2.两线交点的标 ...

  4. 【虚幻引擎UE】UE5 可编辑动态样条线轨迹及AI跟随路径移动(含工程源码)

    可编辑动态样条线轨迹及AI跟随路径移动 1.素材的导入和准备 导入车辆,飞行器和人物模型(及动画),创建相关actor. 这里可以替换为飞行器模型,简单起见我仅把汽车改为[漂浮空中的汽车]. 关联一个 ...

  5. ANSYS Workbench接触非线有限元计算视频教程

    ANSYS Workbench接触非线有限元计算视频教程 链接:https://pan.baidu.com/s/11LyD5ylEnWFI9mizoHLRoA 提取码:6ufq

  6. Oracle存储过程实现BOLL(布林线)计算

    Oracle存储过程实现BOLL(布林线)计算 BOLL公式 首先我们要了解布林线的计算公式,可以去百度百科或者维基百科上看 这是我整理的布林线公式: 布林线(BOLL): 上轨线(UP): MB + ...

  7. java实现抛物线轨迹计算_控件抛物线轨迹的实现

    写这篇文章的初衷也是加强对插值器和估值器的记忆. 其实对于插值器和估值器来说,除了系统提供的以外,我们可以自定义.实现方式也很简单.因为插值器和估值器都只是一个接口.并且内部只有一个方法.我们只要实现 ...

  8. java实现抛物线轨迹计算_JavaFX中抛物线轨迹的时间线

    小编典典 在a中KeyValue,第一个参数应为a WritableValue,例如circle.centerXProperty(),代表初始坐标,例如x.第二个参数应该是类型兼容的值,在这种情况下x ...

  9. 坐标轨迹计算_机器人的轨迹规划与自动导引

    机器人的轨迹规划与自动导引 轨迹生成 轨迹规划(Trajectory Planning)包括两个方面:对于移动机器人(mobile robot)偏向于指移动的路径轨迹规划(path planning) ...

最新文章

  1. Spring入门详细教程(四)
  2. 《走进git时代系列一》 你该怎么玩?
  3. java并发的艺术-读书笔记-第八章常用的并发工具类
  4. 设置行内元素宽高和背景色后,行内元素文本不水平垂直居中解决方案
  5. 使用RestTemplate时报错java.lang.IllegalStateException: No instances available for 127.0.0.1
  6. 诺基亚2亿欧元建越南新工场
  7. FPGA Verilog实现一个脉冲波形变换
  8. 一道水的不能再水的题目
  9. Midway Serverless 发布 2.0,一体化让前端研发再次提效
  10. torch.nn.parameter.Parameter分析
  11. Java开发技巧详细知识体系总结(2021版)
  12. JSP脚本连接数据库
  13. Microsoft Caffe(msCaffe)无GPU快速配置
  14. 1 PDFLib9的安装 及 demo
  15. svm分类器_使用放射学机器学习分类器区分胶质母细胞瘤与孤立性脑转移瘤
  16. ios微信抓https包提示证书安全警告解决办法
  17. babel—ES6代码转换为ES5代码
  18. 我为什么要写博客,写博客的意义是什么
  19. C# TextBox 限制输入一点范围内的整数并有提示超过所限定范围的整数
  20. 航电 2212 java AC

热门文章

  1. python multiprocessing.Semaphore应用
  2. python dir()
  3. flask url_for()
  4. numpy matrix 矩阵对象
  5. oracle+semijoin,Semi join 与anti join
  6. windows下安装HTK3.4
  7. 领导逼走员工的新套路,一次就见效
  8. PostgreSQL学习总结(1)—— PostgreSQL 入门简介与安装
  9. Java基础学习总结(140)——Java8 Stream之Stream流创建的几种方式
  10. Dubbo学习总结(5)——Dubbo服务架构及服务治理过程演进