Truss joint two-member force calculator
With one bar along the x-axis, one pointing straight up and a downward load of 100 on the joint, the vertical bar carries 100 in tension and the horizontal one carries nothing. Positive means tension, negative compression. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Angle1 deg
- 0
- Angle2 deg
- 90
- Load x
- 0
- Load y
- -100
- Force1
- 0
- Force2
- 100
- Member1 state
- zero
- Member2 state
- tension
A planar truss joint where exactly two members meet is the smallest useful method-of-joints problem: two unknown axial forces, two equilibrium equations, and a unique solution when the members are not parallel. Students, tutors, and early-stage structural workflows need those forces without building a full frame model or hand-solving a 2×2 system for every homework case. This capability accepts the outward angles of both members from the positive x-axis and the external load components on the joint, enforces finite numeric input, rejects a singular geometry when the members are collinear, and returns tension-positive axial forces with clear member state labels. Use it for statics drills, grading oracles, spreadsheet checks, and lightweight preprocessing before a larger truss analysis.
What a two-member truss joint means and how ΣFx and ΣFy close the system
In elementary structural analysis a pin joint of a planar truss is treated as a concurrent-force point: every member force is axial (along the bar), moments are not balanced at the joint itself, and static equilibrium reduces to the two scalar statements that the sum of horizontal components is zero and the sum of vertical components is zero. When exactly two members meet and a known external load is applied at the joint, the unknowns are the two axial forces F1 and F2.
With each member oriented by an angle measured counterclockwise from the positive x-axis, from the joint toward the far end, a tension-positive convention assigns a positive force a pull on the joint along that outward direction. Rearrangement yields a 2×2 linear system whose coefficient matrix has determinant equal to sin of the angle between the members. Search intent for this landing clusters around truss joint two member force calculator, method of joints axial force, planar joint equilibrium calculator, and two-bar truss joint ΣFx ΣFy.
People want numeric F1 and F2 they can compare to a textbook key or a spreadsheet, not only a reminder that equilibrium equations exist.
Practical use, limits, pricing, and when to step up to a full truss model
Use the browser tool when you want an immediate axial-force check while grading method-of-joints homework, verifying a hand calculation for a roof peak or L-joint, teaching tension versus compression from sign, or comparing a two-bar idealization before opening a multi-joint model. Results are fully deterministic: identical inputs always produce the same forces, member states, and formula string. 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.
When your problem has three or more members at the joint, continuous beams, moment connections, or three-dimensional frames, switch to a general structural solver; this calculator stays focused on two members and planar ΣFx–ΣFy so the answer stays transparent and fast.
What you can do with it
Preliminary two-bar joint sizing
Engineers and makers estimate axial forces at a simple planar pin joint before building a full multi-joint truss or finite-element model.
FAQ
How does this truss joint two-member force calculator work?
Positive values are tension; negative values are compression.
What if the two members are parallel?
Parallel or collinear members make the equilibrium matrix singular, so two axial forces cannot balance a general planar load.
Is the two-member truss joint calculator free?
The browser tool runs free on your device.
How do I know if a truss member is in tension or compression?
Look at the sign: a positive force is tension and a negative one is compression. A result of zero is labeled as such, like the horizontal bar in the example with a downward load of 100.
How are the member angles measured?
In degrees, counterclockwise from the positive x-axis, starting at the joint and pointing toward the far end of each member. So 0 points to the right and 90 points straight up.
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/truss-joint-2d \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"angle1_deg":0,"angle2_deg":90,"load_x":0,"load_y":-100}'const res = await fetch("https://api.kit.forhosting.com/eng/truss-joint-2d", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"angle1_deg": 0,
"angle2_deg": 90,
"load_x": 0,
"load_y": -100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/eng/truss-joint-2d",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"angle1_deg": 0,
"angle2_deg": 90,
"load_x": 0,
"load_y": -100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/eng/truss-joint-2d", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"angle1_deg":0,"angle2_deg":90,"load_x":0,"load_y":-100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"angle1_deg":0,"angle2_deg":90,"load_x":0,"load_y":-100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/eng/truss-joint-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
{
"angle1_deg": 0,
"angle2_deg": 90,
"load_x": 0,
"load_y": -100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "eng.truss_joint_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 a two-member truss joint means and how ΣFx and ΣFy close the system
Horizontal balance then reads F1 cos θ1 plus F2 cos θ2 plus load_x equals zero; vertical balance reads F1 sin θ1 plus F2 sin θ2 plus load_y equals zero. When that determinant is zero the bars are parallel or collinear, the joint cannot resist a general load with only two axial unknowns, and the capability reports invalid_input instead of inventing infinite or arbitrary forces. Returning force1, force2, member states, echoed angles and loads, the determinant, and fixed method labels as JSON makes the result easy to pin in automated tests and to reuse across languages without re-deriving Cramer’s rule by hand.
Input contract, sign convention, validation, and response shape
Angles use the standard mathematical sense: zero degrees points along positive x, ninety degrees along positive y, measured from the joint along each member toward the remote joint. Positive force1 or force2 means tension; negative means compression; zero is labeled explicitly. There is no third member, no support reaction mode, no self-weight distribution along bars, no 3D space truss, and no unit conversion table—this capability is the two-member planar joint only. Send a JSON body with four required finite numbers: angle1_deg and angle2_deg for the two member orientations in degrees, and load_x and load_y for the external force components applied to the joint in a consistent force unit such as newtons or kilonewtons. Each field may arrive as a JSON number or as a numeric string; missing fields, empty strings, non-numeric text, NaN, and Infinity fail immediately with invalid_input and are not charged. Optional aliases such as theta1, theta2, fx, fy, force_x, and force_y are accepted when documented so forms and scripts can use common textbook symbols. A downward load with upward positive y is entered as a negative load_y. The same pure function powers the free in-browser tool and the API path, with no network, no random seed, and no wall-clock timestamp in the computation path.
Practical use, limits, pricing, and when to step up to a full truss model
Each successful request is one billable item at $0.002; failed validation does not consume balance. Keep force units consistent for load_x and load_y; the engine does not convert units and reports forces in the same unit you supplied. Wire the endpoint into statics drills, early-stage joint worksheets, catalog demos, or preprocessing steps where you prefer explicit domain errors—such as rejecting parallel members—over opaque widgets that cannot explain why a geometry is unsolvable.
Integration use cases
Homework and exam method-of-joints checks
Students and graders enter two member angles and joint load components to obtain tension-positive F1 and F2, with a clear invalid_input when the members are parallel.
Deterministic fixtures for statics pipelines
Lesson platforms and unit tests call a pure ΣFx/ΣFy oracle instead of reimplementing a 2×2 Cramer solve in every language runtime.
Technical questions
How should I measure angle1_deg and angle2_deg?
Measure each angle in degrees counterclockwise from the positive x-axis, from the joint along the member toward the far end. Zero degrees is +x; ninety degrees is +y.
What units should I use for load_x, load_y, force1, and force2?
Any consistent force unit (N, kN, lbf, …). load_x and load_y must share the same unit; returned axial forces use that same unit. The engine does not convert units.