Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
FindRoot.h
Go to the documentation of this file.
1
// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
3
// SPDX-License-Identifier: MIT
4
5
#pragma once
6
7
JPH_NAMESPACE_BEGIN
8
12
template
<
typename
T>
13
inline
int
FindRoot
(
const
T
inA
,
const
T
inB
,
const
T
inC
,
T
&
outX1
,
T
&
outX2
)
14
{
15
// Check if this is a linear equation
16
if
(
inA
==
T
(0))
17
{
18
// Check if this is a constant equation
19
if
(
inB
==
T
(0))
20
return
0;
21
22
// Linear equation with 1 solution
23
outX1
=
outX2
= -
inC
/
inB
;
24
return
1;
25
}
26
27
// See Numerical Recipes in C, Chapter 5.6 Quadratic and Cubic Equations
28
T
det
=
Square
(
inB
) -
T
(4) *
inA
*
inC
;
29
if
(
det
<
T
(0))
30
return
0;
31
T
q
= (
inB
+
Sign
(
inB
) * sqrt(
det
)) /
T
(-2);
32
outX1
=
q
/
inA
;
33
if
(
q
==
T
(0))
34
{
35
outX2
=
outX1
;
36
return
1;
37
}
38
outX2
=
inC
/
q
;
39
return
2;
40
}
41
42
JPH_NAMESPACE_END
JPH_NAMESPACE_END
#define JPH_NAMESPACE_END
Definition
Core.h:367
JPH_NAMESPACE_BEGIN
#define JPH_NAMESPACE_BEGIN
Definition
Core.h:361
FindRoot
JPH_NAMESPACE_BEGIN int FindRoot(const T inA, const T inB, const T inC, T &outX1, T &outX2)
Definition
FindRoot.h:13
Square
constexpr T Square(T inV)
Square a value.
Definition
Math.h:52
Sign
constexpr T Sign(T inV)
Get the sign of a value.
Definition
Math.h:66
Allocate
AllocateFunction Allocate
Definition
Memory.cpp:59
Jolt
Math
FindRoot.h
Generated by
1.10.0