A right triangle is a fundamental geometric shape characterized by having one angle that measures exactly 90 degrees (a right angle). The other two angles are always acute (less than 90 degrees), and their sum is also 90 degrees. The sides opposite the acute angles are called legs, and the side opposite the right angle is called the hypotenuse. The hypotenuse is always the longest side of the right triangle.
Key Concepts and Formulas
The relationships between the sides and angles of a right triangle are governed by several key principles:
Pythagorean Theorem: In any right triangle, the square of the length of the hypotenuse (c) is equal to the sum of the squares of the lengths of the other two sides (a and b). Mathematically, this is expressed as a² + b² = c². This theorem is crucial for finding a missing side when two sides are known.
Trigonometric Ratios: These ratios relate the angles of a right triangle to the lengths of its sides. They are defined as follows, where Angle θ is one of the acute angles:
Sine (sin θ) = Opposite / Hypotenuse
Cosine (cos θ) = Adjacent / Hypotenuse
Tangent (tan θ) = Opposite / Adjacent
These ratios are indispensable for finding unknown angles or sides when one side and one angle are known. The inverse trigonometric functions (arcsin, arccos, arctan) are used to find the angle itself.
Sum of Angles: The sum of all interior angles in any triangle is 180 degrees. For a right triangle, this means: Angle A + Angle B + 90° = 180°, which simplifies to Angle A + Angle B = 90°.
How This Calculator Works
This calculator helps you solve for missing sides or angles in a right triangle. You can input known values such as the lengths of sides (Side A, Side B, Side C) and the measures of angles (Angle A, Angle B).
Calculating Angles: If you provide two sides, the calculator uses the Pythagorean theorem to find the third side, and then trigonometric ratios (like atan(opposite/adjacent)) to find the angles. If you provide one side and one angle, it uses trigonometric ratios to find the other sides and angles.
Calculating Sides: If you provide two sides, it uses the Pythagorean theorem (c = sqrt(a² + b²)) to find the hypotenuse. If you provide one side and one angle, it uses trigonometric ratios (e.g., side = other_side * sin(angle)) to find the missing sides.
The calculator prioritizes the information you provide. If you specify that you know "Two Sides," it will assume you are trying to find angles. If you specify "One Side and One Angle," it can be used to find either missing sides or missing angles depending on your choice in the "Calculate" dropdown. Remember that sides A and B are the legs, and side C is the hypotenuse. Angle A is typically opposite side A, and Angle B is opposite side B.
Use Cases
Right triangle calculations are fundamental in various fields:
Construction and Architecture: Ensuring square corners, calculating roof pitches, and determining diagonal bracing.
Navigation: Calculating distances and bearings.
Engineering: Analyzing forces, designing structures, and solving problems in electrical engineering.
Physics: Calculating vectors, resolving forces, and analyzing projectile motion.
Surveying: Measuring distances and heights indirectly.
By accurately calculating the sides and angles of right triangles, professionals and students can solve complex real-world problems with precision.
function calculateRightTriangle() {
var sideAInput = document.getElementById("sideA");
var sideBInput = document.getElementById("sideB");
var sideCInput = document.getElementById("sideC");
var angleAInput = document.getElementById("angleA");
var angleBInput = document.getElementById("angleB");
var knownValue = document.getElementById("knownValue").value;
var calculationType = document.getElementById("calculationType").value;
var resultDiv = document.getElementById("result");
var errorMessageDiv = document.getElementById("errorMessage");
// Clear previous results and errors
resultDiv.innerHTML = '—';
errorMessageDiv.textContent = "";
// Helper function to parse input, returns NaN if invalid
function parseInput(value) {
return parseFloat(value);
}
// Get numerical values, treating empty inputs as potentially unknown
var sideA = parseInput(sideAInput.value);
var sideB = parseInput(sideBInput.value);
var sideC = parseInput(sideCInput.value);
var angleA = parseInput(angleAInput.value);
var angleB = parseInput(angleBInput.value);
var calculatedSideA = NaN;
var calculatedSideB = NaN;
var calculatedSideC = NaN;
var calculatedAngleA = NaN;
var calculatedAngleB = NaN;
var validInputs = 0;
var inputValues = [sideA, sideB, sideC, angleA, angleB].filter(function(val) { return !isNaN(val); });
// Basic validation: need at least 2 knowns to calculate anything meaningful
if (inputValues.length < 2) {
errorMessageDiv.textContent = "Please provide at least two known values.";
return;
}
// — Calculation Logic —
if (calculationType === "angles") {
if (knownValue === "sides") {
// Calculate angles from two sides
var knownSides = [sideA, sideB, sideC].filter(function(val) { return !isNaN(val); });
if (knownSides.length === 2) {
if (!isNaN(sideA) && !isNaN(sideB) && isNaN(sideC)) { // Given Legs A and B
sideC = Math.sqrt(sideA * sideA + sideB * sideB);
calculatedSideC = sideC;
angleA = Math.atan(sideB / sideA) * (180 / Math.PI);
angleB = 90 – angleA;
calculatedAngleA = angleA;
calculatedAngleB = angleB;
validInputs = 2;
} else if (!isNaN(sideA) && !isNaN(sideC) && isNaN(sideB)) { // Given Leg A and Hypotenuse C
if (sideC <= sideA) { errorMessageDiv.textContent = "Hypotenuse must be longer than a leg."; return; }
sideB = Math.sqrt(sideC * sideC – sideA * sideA);
calculatedSideB = sideB;
angleA = Math.asin(sideA / sideC) * (180 / Math.PI);
angleB = 90 – angleA;
calculatedAngleA = angleA;
calculatedAngleB = angleB;
validInputs = 2;
} else if (!isNaN(sideB) && !isNaN(sideC) && isNaN(sideA)) { // Given Leg B and Hypotenuse C
if (sideC <= sideB) { errorMessageDiv.textContent = "Hypotenuse must be longer than a leg."; return; }
sideA = Math.sqrt(sideC * sideC – sideB * sideB);
calculatedSideA = sideA;
angleB = Math.asin(sideB / sideC) * (180 / Math.PI);
angleA = 90 – angleB;
calculatedAngleA = angleA;
calculatedAngleB = angleB;
validInputs = 2;
} else {
errorMessageDiv.textContent = "Provide exactly two side lengths (two legs or one leg and hypotenuse).";
return;
}
} else if (knownSides.length === 1 && !isNaN(angleA) && isNaN(angleB) && !isNaN(sideA) && isNaN(sideB) && isNaN(sideC)){ // Given Leg A and Angle A
angleB = 90 – angleA;
calculatedAngleB = angleB;
sideB = sideA / Math.tan(angleA * Math.PI / 180);
calculatedSideB = sideB;
sideC = sideA / Math.sin(angleA * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
} else if (knownSides.length === 1 && !isNaN(angleB) && isNaN(angleA) && !isNaN(sideB) && isNaN(sideA) && isNaN(sideC)){ // Given Leg B and Angle B
angleA = 90 – angleB;
calculatedAngleA = angleA;
sideA = sideB / Math.tan(angleB * Math.PI / 180);
calculatedSideA = sideA;
sideC = sideB / Math.sin(angleB * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
}
else {
errorMessageDiv.textContent = "Provide exactly two known values (sides or one side and one angle).";
return;
}
} else if (knownValue === "sideAndAngle") {
if (!isNaN(sideA) && !isNaN(angleA) && isNaN(sideB) && isNaN(sideC) && isNaN(angleB)) { // Given Leg A and Angle A
angleB = 90 – angleA;
calculatedAngleB = angleB;
sideB = sideA / Math.tan(angleA * Math.PI / 180);
calculatedSideB = sideB;
sideC = sideA / Math.sin(angleA * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
} else if (!isNaN(sideB) && !isNaN(angleB) && isNaN(sideA) && isNaN(sideC) && isNaN(angleA)) { // Given Leg B and Angle B
angleA = 90 – angleB;
calculatedAngleA = angleA;
sideA = sideB / Math.tan(angleB * Math.PI / 180);
calculatedSideA = sideA;
sideC = sideB / Math.sin(angleB * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
} else if (!isNaN(sideA) && !isNaN(angleB) && isNaN(sideB) && isNaN(sideC) && isNaN(angleA)) { // Given Leg A and Angle B
angleA = 90 – angleB;
calculatedAngleA = angleA;
sideB = sideA * Math.tan(angleB * Math.PI / 180);
calculatedSideB = sideB;
sideC = sideA / Math.cos(angleB * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
} else if (!isNaN(sideB) && !isNaN(angleA) && isNaN(sideA) && isNaN(sideC) && isNaN(angleB)) { // Given Leg B and Angle A
angleB = 90 – angleA;
calculatedAngleB = angleB;
sideA = sideB * Math.tan(angleA * Math.PI / 180);
calculatedSideA = sideA;
sideC = sideB / Math.cos(angleA * Math.PI / 180);
calculatedSideC = sideC;
validInputs = 2;
} else if (!isNaN(sideC) && !isNaN(angleA) && isNaN(sideA) && isNaN(sideB) && isNaN(angleB)) { // Given Hypotenuse C and Angle A
angleB = 90 – angleA;
calculatedAngleB = angleB;
sideA = sideC * Math.sin(angleA * Math.PI / 180);
calculatedSideA = sideA;
sideB = sideC * Math.cos(angleA * Math.PI / 180);
calculatedSideB = sideB;
validInputs = 2;
} else if (!isNaN(sideC) && !isNaN(angleB) && isNaN(sideA) && isNaN(sideB) && isNaN(angleA)) { // Given Hypotenuse C and Angle B
angleA = 90 – angleB;
calculatedAngleA = angleA;
sideB = sideC * Math.sin(angleB * Math.PI / 180);
calculatedSideB = sideB;
sideA = sideC * Math.cos(angleB * Math.PI / 180);
calculatedSideA = sideA;
validInputs = 2;
}
else {
errorMessageDiv.textContent = "Provide one side and one non-right angle.";
return;
}
}
} else if (calculationType === "sides") {
if (knownValue === "sides") {
// Calculate side from two sides
var knownSides = [sideA, sideB, sideC].filter(function(val) { return !isNaN(val); });
if (knownSides.length === 2) {
if (!isNaN(sideA) && !isNaN(sideB) && isNaN(sideC)) { // Given Legs A and B
sideC = Math.sqrt(sideA * sideA + sideB * sideB);
calculatedSideC = sideC;
validInputs = 2;
} else if (!isNaN(sideA) && !isNaN(sideC) && isNaN(sideB)) { // Given Leg A and Hypotenuse C
if (sideC <= sideA) { errorMessageDiv.textContent = "Hypotenuse must be longer than a leg."; return; }
sideB = Math.sqrt(sideC * sideC – sideA * sideA);
calculatedSideB = sideB;
validInputs = 2;
} else if (!isNaN(sideB) && !isNaN(sideC) && isNaN(sideA)) { // Given Leg B and Hypotenuse C
if (sideC 0) {
resultDiv.innerHTML = '' + results.join(") + '';
} else {
errorMessageDiv.textContent = "Calculation could not be completed with the provided inputs.";
}
}