23 lines
701 B
Odin
23 lines
701 B
Odin
package physics
|
|
|
|
import "core:math"
|
|
|
|
Pacejka96_Params :: [11]f32
|
|
|
|
DEFAULT_PACEJKA96_PARAMS :: Pacejka96_Params{1.65, -200, 1900, 0, 229, 0.0, 0, 0, 0, 0, 0}
|
|
|
|
// X is slip ratio percentage [-100, 100] or slip angle in degrees, where positive angle is turning left
|
|
// Output is the friction coefficient
|
|
pacejka_96 :: proc(b: Pacejka96_Params, x: f32, f_z: f32, s_v: f32 = 0) -> f32 {
|
|
C := b[0]
|
|
D := (b[1] * f_z + b[2]) * f_z
|
|
B := ((b[3] * f_z * f_z + b[4] * f_z) * math.exp(-b[5] * f_z)) / (C * D)
|
|
E := (b[6] * f_z * f_z + b[7] * f_z + b[8])
|
|
s_h := b[9] * f_z + b[10]
|
|
|
|
X := x + s_h
|
|
y := D * math.sin(C * math.atan(B * X - E * (B * X - math.atan(B * X))))
|
|
Y := y + s_v
|
|
return Y / (f_z * 1000)
|
|
}
|