mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-13 07:03:25 +00:00
added new param
This commit is contained in:
@@ -15,7 +15,8 @@ namespace uml::prediction
|
|||||||
class Engine
|
class Engine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit Engine(float gravityConstant, float simulationTimeStep, float maximumSimulationTime);
|
explicit Engine(float gravityConstant, float simulationTimeStep,
|
||||||
|
float maximumSimulationTime, float distanceTolerance);
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
std::optional<Vector3> MaybeCalculateAimPoint(const Projectile& projectile, const Target& target) const;
|
std::optional<Vector3> MaybeCalculateAimPoint(const Projectile& projectile, const Target& target) const;
|
||||||
@@ -24,6 +25,7 @@ namespace uml::prediction
|
|||||||
const float m_gravityConstant;
|
const float m_gravityConstant;
|
||||||
const float m_simulationTimeStep;
|
const float m_simulationTimeStep;
|
||||||
const float m_maximumSimulationTime;
|
const float m_maximumSimulationTime;
|
||||||
|
const float m_distanceTolerance;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
std::optional<float> MaybeCalculateProjectileLaunchPitchAngle(const Projectile& projectile,
|
std::optional<float> MaybeCalculateProjectileLaunchPitchAngle(const Projectile& projectile,
|
||||||
|
|||||||
@@ -10,10 +10,12 @@
|
|||||||
|
|
||||||
namespace uml::prediction
|
namespace uml::prediction
|
||||||
{
|
{
|
||||||
Engine::Engine(const float gravityConstant, const float simulationTimeStep, const float maximumSimulationTime)
|
Engine::Engine(const float gravityConstant, const float simulationTimeStep,
|
||||||
|
const float maximumSimulationTime, float distanceTolerance)
|
||||||
: m_gravityConstant(gravityConstant),
|
: m_gravityConstant(gravityConstant),
|
||||||
m_simulationTimeStep(simulationTimeStep),
|
m_simulationTimeStep(simulationTimeStep),
|
||||||
m_maximumSimulationTime(maximumSimulationTime)
|
m_maximumSimulationTime(maximumSimulationTime),
|
||||||
|
m_distanceTolerance(distanceTolerance)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,6 +68,6 @@ namespace uml::prediction
|
|||||||
const auto yaw = projectile.m_origin.ViewAngleTo(targetPosition).y;
|
const auto yaw = projectile.m_origin.ViewAngleTo(targetPosition).y;
|
||||||
const auto projectilePosition = projectile.PredictPosition(pitch, yaw, time, m_gravityConstant);
|
const auto projectilePosition = projectile.PredictPosition(pitch, yaw, time, m_gravityConstant);
|
||||||
|
|
||||||
return projectilePosition.DistTo(targetPosition) <= 10.f;
|
return projectilePosition.DistTo(targetPosition) <= m_distanceTolerance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
TEST(x,x)
|
TEST(x,x)
|
||||||
{
|
{
|
||||||
uml::prediction::Target target{.m_origin = {100, 0, 60}, .m_velocity = {0, 0, 0}, .m_isAirborne = false};
|
uml::prediction::Target target{.m_origin = {100, 0, 60}, .m_velocity = {0, 0, 0}, .m_isAirborne = false};
|
||||||
uml::prediction::Projectile proj = {.m_origin = {3,2,1}, .m_launchSpeed = 400, .m_gravityScale= 0.4};
|
uml::prediction::Projectile proj = {.m_origin = {3,2,1}, .m_launchSpeed = 5000, .m_gravityScale= 0.4};
|
||||||
auto vel = uml::prediction::Engine(400, 1.f / 10000.f, 50).MaybeCalculateAimPoint(proj, target);
|
auto vel = uml::prediction::Engine(400, 1.f / 1000.f, 50, 5.f).MaybeCalculateAimPoint(proj, target);
|
||||||
|
|
||||||
auto pitch = proj.m_origin.ViewAngleTo(vel.value()).x;
|
auto pitch = proj.m_origin.ViewAngleTo(vel.value()).x;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user