Creating the perfect Formula 1 car setup is a complex balancing act between aerodynamic downforce, mechanical grip, and top speed. This calculator uses logic derived from modern race engineering principles and simulation games (like the F1 Codemasters series) to provide a baseline setup based on track characteristics and weather.
1. Aerodynamics (Wings)
Aerodynamics are the primary contributor to lap time performance. The goal is to generate downforce to push the car into the track during corners, at the cost of "drag" which slows the car down on straights.
High Downforce (Monaco, Singapore, Hungary): Requires high wing angles (40-50 range). This sacrifices top speed for maximum cornering grip.
Low Downforce (Monza, Las Vegas): Requires low wing angles (0-15 range). This minimizes drag for maximum straight-line speed.
Wet Conditions: In the rain, teams drastically increase wing angles regardless of the track to generate heat in the tyres and maintain grip.
2. Transmission (Differential)
The differential controls how the rear wheels rotate relative to each other.
On-Throttle Differential: A "Locked" differential (higher %) provides better traction out of corners but causes understeer. An "Open" differential (lower %) allows the car to rotate easier but limits traction.
Off-Throttle Differential: Controls rotation during corner entry. Lower values help the car turn in sharper.
3. Suspension Geometry (Camber & Toe)
Suspension geometry dictates the contact patch of the tyre.
Camber: Negative camber (tops of wheels leaning in) increases lateral grip during high-speed cornering but reduces braking efficiency and traction.
Toe: Toe-out on front wheels assists with turn-in responsiveness. Toe-in on rear wheels assists with straight-line stability.
4. Suspension Stiffness & Ride Height
The mechanical suspension manages how the car handles bumps and weight transfer.
Soft Suspension: Essential for bumpy tracks or tracks where you must attack kerbs aggressively. Also vital in wet weather to prevent snap oversteer.
Stiff Suspension: Used on smooth tracks to keep the aerodynamic platform stable for maximum downforce.
Ride Height: The car is run as low as possible for aerodynamics (rake), but must be raised for bumpy tracks or rain to avoid "bottoming out" (the plank hitting the ground).
5. Brake Bias & Pressure
Brake Bias shifts the braking force between front and rear. Moving bias forward (e.g., 56-60%) provides stability but increases front locking. Moving it rearward (e.g., 50-54%) helps the car turn during braking but risks rear locking/spinning.
function updateRangeDisplay(inputId, displayId) {
var val = document.getElementById(inputId).value;
var display = document.getElementById(displayId);
if (inputId === 'balanceBias') {
var label = document.getElementById('biasLabel');
if (val 0) label.innerText = "Oversteer Focus (+" + val + ")";
else label.innerText = "Neutral";
} else {
display.innerText = val;
}
}
function calculateF1Setup() {
// 1. Get Inputs
var downforce = parseInt(document.getElementById('trackDownforce').value) || 25;
var bumps = parseInt(document.getElementById('trackBumps').value) || 5;
var bias = parseInt(document.getElementById('balanceBias').value) || 0;
var weather = document.getElementById('weatherCond').value;
var isWet = (weather === 'wet');
// 2. Calculate Aerodynamics (Wings)
// Base wing depends on downforce demand.
// Wet weather forces higher downforce.
var frontWing = downforce;
var rearWing = downforce;
if (isWet) {
frontWing = Math.min(50, frontWing + 10);
rearWing = Math.min(50, rearWing + 12);
}
// Apply bias: Oversteer (+ bias) -> Less Rear Wing or More Front Wing
// We'll adjust Front Wing for turn-in
frontWing = frontWing + bias;
// Clamp values 0-50
frontWing = Math.max(0, Math.min(50, frontWing));
rearWing = Math.max(0, Math.min(50, rearWing));
// 3. Calculate Transmission (Diff)
// High speed/Smooth tracks tolerate locked diff (high %)
// Twisty/Bumpy/Wet tracks need open diff (low %)
var diffOn = 75; // Base
var diffOff = 55; // Base
// Adjustment logic:
// Higher downforce (usually twisty) -> Lower Diff for rotation
diffOn = 100 – downforce;
// Clamp reasonable racing limits (50% to 100%)
diffOn = Math.max(50, Math.min(100, diffOn));
if (isWet) {
diffOn = 50; // Open diff to prevent spinning in rain
diffOff = 50;
} else {
diffOff = 50 + (downforce / 2); // Roughly 50-75%
}
// 4. Suspension Geometry (Camber/Toe)
// High Downforce/High Speed corners = More negative camber
var fCamber = -2.50 – (downforce / 100); // -2.5 to -3.0
var rCamber = -1.00 – (downforce / 100); // -1.0 to -1.5
var fToe = 0.00 + (downforce / 500); // More toe out for twisty tracks
// 5. Suspension Stiffness & Ride Height
// Bumps dictate stiffness. 1 (Smooth) -> Stiff, 10 (Bumpy) -> Soft.
// Scale 1 (Soft) to 41 (Stiff) – common gaming scale
var suspStiffness = 41 – (bumps * 4); // If bumps=1, susp=37 (Stiff). If bumps=10, susp=1 (Soft).
if (isWet) {
suspStiffness = Math.max(1, suspStiffness – 15); // Soften for rain
}
// Ride Height
// Bumps and Rain require height.
// Scale 1-50? Let's use mm roughly.
var baseHeight = 30;
var fHeight = baseHeight + (bumps * 2);
var rHeight = baseHeight + 5 + (bumps * 2);
if (isWet) {
fHeight += 5;
rHeight += 5;
}
// 6. Brakes & Tyres
var brakePressure = isWet ? 95 : 100; // Lower pressure in wet to stop locking
var brakeBias = 50 + (bias * -1); // Oversteer bias (positive) means moving bias rearward (lower %)
// Tyre Pressures (psi)
// High load = Higher pressure. Wet = Lower pressure for patch.
var fPsi = 22.0 + (downforce / 50);
var rPsi = 20.0 + (downforce / 50);
if (isWet) {
fPsi = 21.5;
rPsi = 19.5;
}
// 7. Update DOM
document.getElementById('resFrontWing').innerText = Math.round(frontWing);
document.getElementById('resRearWing').innerText = Math.round(rearWing);
document.getElementById('resDiffOn').innerText = Math.round(diffOn) + "%";
document.getElementById('resDiffOff').innerText = Math.round(diffOff) + "%";
document.getElementById('resFrontCamber').innerText = fCamber.toFixed(2) + "°";
document.getElementById('resRearCamber').innerText = rCamber.toFixed(2) + "°";
document.getElementById('resFrontToe').innerText = fToe.toFixed(2) + "°";
// Convert numeric stiffness to text description for clarity
var stiffnessText = "";
if(suspStiffness 30) stiffnessText = "Stiff (" + suspStiffness + ")";
else stiffnessText = "Balanced (" + suspStiffness + ")";
document.getElementById('resFrontSusp').innerText = stiffnessText;
document.getElementById('resRearSusp').innerText = stiffnessText;
document.getElementById('resFrontHeight').innerText = fHeight + " mm";
document.getElementById('resRearHeight').innerText = rHeight + " mm";
document.getElementById('resBrakeBias').innerText = brakeBias + "%";
document.getElementById('resBrakePress').innerText = brakePressure + "%";
document.getElementById('resFrontPsi').innerText = fPsi.toFixed(1) + " psi";
document.getElementById('resRearPsi').innerText = rPsi.toFixed(1) + " psi";
// Show results
document.getElementById('resultsArea').style.display = "block";
// Scroll to results
document.getElementById('resultsArea').scrollIntoView({behavior: "smooth"});
}