Principal stress 2D calculator
Turn three plane-stress readings into their extremes: normal stresses of 80 and 20 with a shear of 30 give principal stresses centred on 50, the larger one at 22.5° from the x-axis. The maximum in-plane shear comes with them. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Sigma x
- 80
- Sigma y
- 20
- Tau xy
- 30
- Sigma 1
- 92.4264068712
- Sigma 2
- 7.5735931288
- Tau max
- 42.4264068712
- Sigma avg
- 50
Plane-stress analysis asks a deceptively simple question: given the three in-plane components σx, σy and τxy at a point, what extreme normal stresses and what largest in-plane shear appear when the inspection element is rotated? Those extrema are the principal stresses σ1 and σ2 and the Mohr-circle radius τmax. Students checking a transformation-of-stress homework set, structural and mechanical engineers reading a strain-gauge rosette, and machine designers comparing a 2D stress state to an allowable all reach for Mohr's circle or the closed-form square-root identities that encode the same geometry. This 2D principal stress calculator accepts the three finite plane-stress components, applies those identities, and returns both principals, the maximum in-plane shear, the circle centre and radius, and the angle from the x-axis to the algebraically larger principal direction.
Practical use, limits, pricing, and how this differs from F/A and My/I
Use the browser tool when you want an immediate principal-stress check while grading a transformation-of-stress homework set, reducing a strain-gauge rosette after converting strains to stresses, verifying a finite-element query at a free surface, or teaching how Mohr's circle radius is both the deviation from the average and the maximum in-plane shear. Choose units consistently and stay within the published magnitude bounds so intermediate products remain finite.
There is no language model, no external structural analysis service, and no randomness, so the capacity is safe to pin in continuous-integration checks and reproducible course materials. This page is not the uniaxial stress calculator sigma equals F over A, which answers a different search when you only know force and area; that lives as a separate stress tool.
It is also not the average-shear calculator tau equals F over A, nor the bending-stress calculator sigma equals M y over I, nor the transverse beam-shear formula V Q over I t. Those pages solve different identities and capture different search intent.
What you can do with it
Strain-gauge and FEA post-processing
Engineers reduce a 2D stress query or a converted rosette reading to principals and maximum in-plane shear before comparing against an allowable or a yield check they run separately.
FAQ
What is the maximum in-plane shear stress?
It equals the Mohr-circle radius R. On a 2D element the largest in-plane shear is half the difference of the two principals, which is the same number as that radius.
Does this solve 3D principals or apply a yield criterion?
No. The calculator evaluates the in-plane Mohr circle only. It does not take σz, does not report a third principal, and does not compute von Mises or Tresca equivalent stress.
How do I find the principal stresses from σx, σy and τxy?
Take the average of σx and σy as the centre, and the square root of half their difference squared plus τxy squared as the radius. The principals are the centre plus and minus that radius; in the example the centre is 50.
What does the principal angle tell me?
It is the rotation from the x-axis to the direction of the larger principal stress, where the shear disappears. For normal stresses of 80 and 20 with a shear of 30, that angle is 22.5°.
Does the sign of the shear stress matter?
It changes the principal angle but not the two principal values or the maximum shear, because shear enters the radius only as a square. Shear counts as positive on the positive x face pointing in the positive y direction.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/eng/principal-stress-2d \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"sigma_x":80,"sigma_y":20,"tau_xy":30}'const res = await fetch("https://api.kit.forhosting.com/eng/principal-stress-2d", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"sigma_x": 80,
"sigma_y": 20,
"tau_xy": 30
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/eng/principal-stress-2d",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"sigma_x": 80,
"sigma_y": 20,
"tau_xy": 30
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/eng/principal-stress-2d", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"sigma_x":80,"sigma_y":20,"tau_xy":30}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"sigma_x":80,"sigma_y":20,"tau_xy":30}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/eng/principal-stress-2d", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"sigma_x": 80,
"sigma_y": 20,
"tau_xy": 30
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "eng.principal_stress_2d",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What Mohr's circle reports for a plane-stress element
The identities assume two-dimensional plane stress or the in-plane part of a plane-strain problem; they do not compute a third principal for a full three-dimensional tensor, do not apply von Mises or Tresca yield checks, and do not convert units. Flipping the shear sign changes the principal angle but not the two principal magnitudes, because shear enters the radius only as a square. A material point under plane stress is described by three in-plane components: the normal stress on the x-face sigma_x, the normal stress on the y-face sigma_y, and the complementary shear tau_xy. Those three numbers do not stay put when you rotate the inspection element. At some orientation the shear vanishes and the remaining normal stresses take their extreme values; those extremes are the principal stresses sigma_1 (algebraically larger) and sigma_2 (algebraically smaller). Halfway around Mohr's circle, at forty-five degrees from the principal axes in physical space, the in-plane shear reaches its peak magnitude tau_max. The same geometry is written without drawing a circle: the centre sits at the average of sigma_x and sigma_y, the radius is the square root of the squared half-difference of the normals plus the squared shear, the principals are centre plus and minus that radius, and tau_max equals that radius. Keep sigma_x, sigma_y, and tau_xy in one consistent stress unit—megapascals, pounds per square inch, or pascals—and the returned principals and shear share that unit. Sign convention follows the standard continuum statement: positive normal stress is tension, and positive tau_xy is the shear on the positive-x face acting in the positive-y direction.
How this calculator validates input and applies Mohr's identities
A hydrostatic or already-principal state, where the two normals are equal and the shear is zero, reports equal principals, a zero radius, and a principal angle of zero degrees. There is no unit conversion, no plot image, no three-dimensional eigenvalue solve, and no yield-criterion overlay; this is the pure Mohr-circle evaluation of a 2D stress element only. Send a JSON body with the three required fields sigma_x, sigma_y, and tau_xy. Every field must be a finite number or a numeric string that parses to one; missing fields, empty strings, non-numeric text, NaN, and Infinity all fail immediately with invalid_input before any result is returned, and failed validation is not charged. Optional aliases such as sx, sy, txy, stress_x, stress_y, shear_xy, sigmax, sigmay, tau, shear, sigma_xx, sigma_yy, sxx, syy, and tauxy are accepted when documented so forms and scripts can use textbook symbols. After validation the engine computes the Mohr-circle centre as the average of the two normals, the radius as the Euclidean norm of the half-difference and the shear, the principals as centre plus and minus that radius, and the angle theta_p in degrees as one-half of atan2 of twice the shear over the difference of the normals. That atan2 form selects the orientation of the algebraically larger principal without an extra branch: substituting the resulting double-angle into the stress-transformation equations recovers sigma_1 by construction. There is no division-by-zero path in these identities, so every finite triple yields a defined result; magnitude bounds exist only to keep intermediate products finite on a Worker isolate. Results are rounded to a stable twelve-significant-figure precision so the same input always yields the same JSON across JavaScript engines. The same pure function powers the free in-browser tool and the API path, with no network, no random seed, and no wall clock in the computation path.
Practical use, limits, pricing, and how this differs from F/A and My/I
Each successful request is one billable item at $0.002; failed validation does not consume balance. Results are fully deterministic: identical inputs always produce the same principals, the same tau_max, and the same formula and method labels. Wire the endpoint into mechanics drills, contest answer checkers, early-stage design worksheets, or preprocessing steps where you prefer explicit domain errors—such as rejecting a missing sigma_x—over opaque widgets that cannot explain why a bad input was refused.
Integration use cases
Homework and exam verification
Students and graders compute σ1, σ2 and τmax from a given plane-stress triple and get a clear invalid_input error when a component is missing or not finite.
Deterministic fixtures for mechanics tests
Pipelines that seed unit tests or interactive Mohr-circle demos call a pure 2D principal-stress oracle instead of reimplementing the square-root identities in every language.
Technical questions
How do I calculate 2D principal stresses from σx, σy and τxy?
Send finite numbers sigma_x, sigma_y, and tau_xy. The API returns σ1 = σavg + R and σ2 = σavg − R, where σavg is the average of the two normals and R is the Mohr-circle radius sqrt(((σx−σy)/2)² + τxy²).
What does theta_p_deg mean?
It is the angle in degrees from the positive x-axis to the algebraically larger principal direction σ1, computed as one-half atan2(2 τxy, σx − σy). Flipping the sign of τxy changes this angle but not σ1 or σ2.
What does the 2D principal stress calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.