zenno/doc/frbm: precise example for uphill power diff
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
AptitudeLevel,
|
||||
downhillAccelEnterChance,
|
||||
frontModeEnterChance,
|
||||
HORSE_LENGTH,
|
||||
moveLaneModifier,
|
||||
paceUpEnterChance,
|
||||
Phase,
|
||||
@@ -31,6 +32,20 @@
|
||||
return x * (1 - p) + x * bonus * p;
|
||||
}
|
||||
|
||||
const uphillSlowPow = 800;
|
||||
const uphillFastPow = 1200;
|
||||
const uphillBaseSpeed = mean2(sectionSpeed(2500, 1200, 1200, RunningStyle.FrontRunner, Phase.MidRace));
|
||||
const uphillSlopes = [
|
||||
{ per: 2, len: 110 },
|
||||
{ per: 1.5, len: 200 },
|
||||
]
|
||||
.map((s) => ({ ...s, slowSpeed: uphillMod(uphillSlowPow, s.per), fastSpeed: uphillMod(uphillFastPow, s.per) }))
|
||||
.map((s) => ({ ...s, slowTime: s.len / (uphillBaseSpeed + s.slowSpeed), fastTime: s.len / (uphillBaseSpeed + s.fastSpeed) }))
|
||||
// TODO(zeph): should include the difference with decel down to uphill speed and accel out of it,
|
||||
// since the high power horse is favored for both
|
||||
.map((s) => ({ ...s, dx: (s.fastSpeed - s.slowSpeed) * s.fastTime + s.slowSpeed * (s.slowTime - s.fastTime) }));
|
||||
const uphillLengths = uphillSlopes.reduce((m, { dx }) => m + dx, 0) / HORSE_LENGTH;
|
||||
|
||||
const secSpeedS = 1200;
|
||||
const secSpeedA = 1000;
|
||||
const secSpeedExample = $derived(sectionSpeed(raceLen, secSpeedS, secSpeedS * 1.1, RunningStyle.FrontRunner, Phase.EarlyRace));
|
||||
@@ -425,14 +440,15 @@
|
||||
<Sec h="3" id="uphills">Uphills</Sec>
|
||||
<p>
|
||||
Running uphill carries a penalty to target speed. This penalty scales negatively with the power stat; that is, higher power
|
||||
means faster uphill running. It scales positively with slope angle.
|
||||
means faster uphill running. It scales positively with slope angle. There is also a flat reduction in base acceleration for
|
||||
running uphill, which does not change with stats nor slope angle.
|
||||
</p>
|
||||
<div class="mb-4 h-60 w-full md:h-96">
|
||||
<StatChart
|
||||
class="mx-auto h-full w-full max-w-3xl"
|
||||
stat={Stat.Power}
|
||||
y={uphillSeries}
|
||||
yLabel="Speed Modifier (m/s)"
|
||||
yLabel="Uphill Speed Modifier (m/s)"
|
||||
yRule={uphillYRule}
|
||||
range={[-2, 0]}
|
||||
/>
|
||||
@@ -441,12 +457,9 @@
|
||||
Note that surface aptitude <i>does not</i> affect uphill speed, nor power generally. It only affects acceleration.
|
||||
</p>
|
||||
<p>
|
||||
The practical impact is that steep early- and mid-race hills filter out front runners with low power. Even with an otherwise
|
||||
perfect build, an 800 power VBourbon is likely to be passed by a 1280 power (<Skill skill={200152} hint="firm" mention /> + <Skill
|
||||
skill={200282}
|
||||
hint="comp spirit"
|
||||
mention
|
||||
/>) Seiun Sky.
|
||||
The practical impact is that steep early- and mid-race hills filter out front runners with low power. All else equal, a Seiun
|
||||
Sky with {uphillFastPow} power gains an average of about {uphillLengths.toFixed(1)} lengths over a VBourbon with {uphillSlowPow}
|
||||
power on the Arima Kinen mid-race hills.
|
||||
</p>
|
||||
|
||||
<Sec h="3" id="downhills">Downhills</Sec>
|
||||
|
||||
Reference in New Issue
Block a user