Skip to content

Commit

Permalink
Added surface area to 3D Shapes Calculator (#817)
Browse files Browse the repository at this point in the history
  • Loading branch information
debangi29 authored May 24, 2024
1 parent da0dd75 commit 04215b0
Show file tree
Hide file tree
Showing 13 changed files with 487 additions and 19 deletions.
13 changes: 13 additions & 0 deletions Calculators/3D-Shapes-Calculator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# <p align="center">3D Shapes Calculator</p>

## Description :-

Calculates the volume and surface area of different important and useful 3D shapes.

## Tech Stacks :-

- HTML
- CSS
- JavaScript

## Screenshots :-
100 changes: 100 additions & 0 deletions Calculators/3D-Shapes-Calculator/Surface-Area-Calculator/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@500&display=swap" rel="stylesheet">
<title>3D Shapes Surface Area Calculator</title>
</head>

<body>
<div class="card">
<div class="waviy">
<span style="--i:1">S</span>
<span style="--i:2">U</span>
<span style="--i:4">R</span>
<span style="--i:5">F</span>
<span style="--i:6">A</span>
<span style="--i:7">C</span>
<span style="--i:8">E</span>
<span style="--i:9">&nbsp;</span>
<span style="--i:10">A</span>
<span style="--i:10">R</span>
<span style="--i:10">E </span>
<span style="--i:10">A</span>
<span style="--i:9">&nbsp;</span>
<span style="--i:11">C</span>
<span style="--i:12">A</span>
<span style="--i:13">L</span>
<span style="--i:14">C</span>
<span style="--i:15">U</span>
<span style="--i:16">L</span>
<span style="--i:17">A</span>
<span style="--i:18">T</span>
<span style="--i:19">O</span>
<span style="--i:20">R</span>
</div>
<br><br>
<div class="row">
<select id="shape" name="shape" onchange="showDimensions()" required>
<option value="" disabled selected hidden>Select a shape</option>
<option value="cube">Cube</option>
<option value="cuboid">Cuboid</option>
<option value="cone">Cone</option>
<option value="cylinder">Cylinder</option>
<option value="sphere">Sphere</option>
<option value="triangularPrism">Triangular Prism</option>
<option value="rectangularPrism">Rectangular Prism</option>
<option value="torus">Torus</option>
</select>
</div>
<br>
<br>
<div class="row" id="length-row" style="display: none;">
<label for="length">Enter Length:</label>
<input type="number" id="length" name="length">
</div><br>
<div class="row" id="width-row" style="display: none;">
<label for="width">Enter Width:</label>
<input type="number" id="width" name="width">
</div><br>
<div class="row" id="height-row" style="display: none;">
<label for="height">Enter Height:</label>
<input type="number" id="height" name="height">
</div><br>
<div class="row" id="radius-row" style="display: none;">
<label for="radius">Enter Radius:</label>
<input type="number" id="radius" name="radius">
</div><br>
<div class="row" id="slant-height-row" style="display: none;">
<label for="slant-height">Enter Slant Height:</label>
<input type="number" id="slant-height" name="slant-height">
</div><br>
<div class="row" id="base-length-row" style="display: none;">
<label for="base-length">Enter Base Length:</label>
<input type="number" id="base-length" name="base-length">
</div><br>
<div class="row" id="base-width-row" style="display: none;">
<label for="base-width">Enter Base Width:</label>
<input type="number" id="base-width" name="base-width">
</div><br>
<div class="row" id="minor-radius-row" style="display: none;">
<label for="minor-radius">Enter Minor Radius:</label>
<input type="number" id="minor-radius" name="minor-radius">
</div><br>
<div class="rule"></div>
<div class="form-footer">
<button class="button" onclick="calculate(event)">Calculate</button>
</div>
<div id="result-container">
<p id="result"></p>
</div>
</div>
<script src="script.js"></script>
</body>

</html>
123 changes: 123 additions & 0 deletions Calculators/3D-Shapes-Calculator/Surface-Area-Calculator/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
function showDimensions() {
const shape = document.getElementById('shape').value;
document.getElementById('length-row').style.display = 'none';
document.getElementById('width-row').style.display = 'none';
document.getElementById('height-row').style.display = 'none';
document.getElementById('radius-row').style.display = 'none';
document.getElementById('slant-height-row').style.display = 'none';
document.getElementById('base-length-row').style.display = 'none';
document.getElementById('base-width-row').style.display = 'none';
document.getElementById('minor-radius-row').style.display = 'none';

switch (shape) {
case 'cube':
document.getElementById('length-row').style.display = 'block';
break;
case 'cuboid':
document.getElementById('length-row').style.display = 'block';
document.getElementById('width-row').style.display = 'block';
document.getElementById('height-row').style.display = 'block';
break;
case 'cone':
document.getElementById('radius-row').style.display = 'block';
document.getElementById('slant-height-row').style.display = 'block';
break;
case 'cylinder':
document.getElementById('radius-row').style.display = 'block';
document.getElementById('height-row').style.display = 'block';
break;
case 'sphere':
document.getElementById('radius-row').style.display = 'block';
break;
case 'triangularPrism':
document.getElementById('base-length-row').style.display = 'block';
document.getElementById('height-row').style.display = 'block';
document.getElementById('length-row').style.display = 'block';
break;
case 'rectangularPrism':
document.getElementById('length-row').style.display = 'block';
document.getElementById('width-row').style.display = 'block';
document.getElementById('height-row').style.display = 'block';
break;
case 'torus':
document.getElementById('radius-row').style.display = 'block';
document.getElementById('minor-radius-row').style.display = 'block';
break;
default:
break;
}
}

function calculate(event) {
event.preventDefault();
const shape = document.getElementById('shape').value;
let result;

function validateInputs(...inputs) {
for (const input of inputs) {
if (input < 0) {
document.getElementById('result').textContent = "Lengths can't be negative Dude!!!";
return false;
}
}
return true;
}

switch (shape) {
case 'cube':
const length = parseFloat(document.getElementById('length').value);
if (!validateInputs(length)) return;
result = 6 * length * length;
break;
case 'cuboid':
const l = parseFloat(document.getElementById('length').value);
const w = parseFloat(document.getElementById('width').value);
const h = parseFloat(document.getElementById('height').value);
if (!validateInputs(l, w, h)) return;
result = 2 * (l * w + l * h + w * h);
break;
case 'cone':
const rCone = parseFloat(document.getElementById('radius').value);
const slantHeight = parseFloat(document.getElementById('slant-height').value);
if (!validateInputs(rCone, slantHeight)) return;
result = Math.PI * rCone * (rCone + slantHeight);
break;
case 'cylinder':
const rCylinder = parseFloat(document.getElementById('radius').value);
const hCylinder = parseFloat(document.getElementById('height').value);
if (!validateInputs(rCylinder, hCylinder)) return;
result = 2 * Math.PI * rCylinder * (rCylinder + hCylinder);
break;
case 'sphere':
const rSphere = parseFloat(document.getElementById('radius').value);
if (!validateInputs(rSphere)) return;
result = 4 * Math.PI * Math.pow(rSphere, 2);
break;
case 'triangularPrism':
const bLength = parseFloat(document.getElementById('base-length').value);
const height = parseFloat(document.getElementById('height').value);
const lengthPrism = parseFloat(document.getElementById('length').value);
if (!validateInputs(bLength, height, lengthPrism)) return;
const baseArea = 0.5 * bLength * height;
const perimeter = 3 * bLength;
result = 2 * baseArea + perimeter * lengthPrism;
break;
case 'rectangularPrism':
const lRect = parseFloat(document.getElementById('length').value);
const wRect = parseFloat(document.getElementById('width').value);
const hRect = parseFloat(document.getElementById('height').value);
if (!validateInputs(lRect, wRect, hRect)) return;
result = 2 * (lRect * wRect + lRect * hRect + wRect * hRect);
break;
case 'torus':
const rMajor = parseFloat(document.getElementById('radius').value);
const rMinor = parseFloat(document.getElementById('minor-radius').value);
if (!validateInputs(rMajor, rMinor)) return;
result = 4 * Math.PI * Math.PI * rMajor * rMinor;
break;
default:
result = 'Please select a shape and provide valid inputs';
}

document.getElementById('result').textContent = `Surface Area: ${result.toFixed(2)}`;
}
107 changes: 107 additions & 0 deletions Calculators/3D-Shapes-Calculator/Surface-Area-Calculator/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
body {
font-family: 'Inconsolata', monospace;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-image: url('assets/background.jpg');
margin: 0;
}

.card {
background: rgba(255, 255, 255, 0.9); /* Slightly transparent to see some background */
padding: 2em;
border-radius: 15px;
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.2);
width: 350px;
text-align: center;
}

.waviy {
display: flex;
justify-content: center;
margin-bottom: 20px;
}

.waviy span {
display: inline-block;
font-size: 30px;
color: #a40c8b;
animation: waviy 1.2s infinite;
}

.waviy span:nth-child(even) {
animation-delay: 0.1s;
}

@keyframes waviy {
0%, 40%, 100% {
transform: translateY(0);
}
20% {
transform: translateY(-12px);
}
}

.row {
margin-bottom: 1.5em;
}

label {
display: block;
margin-bottom: 0.5em;
font-size: 16px;
color: #333;
}

input, select {
width: 100%;
padding: 0.6em;
border: 2px solid #ddd;
border-radius: 10px;
font-size: 16px;
transition: border-color 0.3s;
}

input:focus, select:focus {
border-color: #4A90E2;
outline: none;
}

button {
width: 100%;
padding: 0.8em;
background: linear-gradient(135deg, #6A82FB, #FC5C7D);
color: white;
border: none;
border-radius: 10px;
cursor: pointer;
font-size: 16px;
transition: background 0.3s, transform 0.2s;
}

button:hover {
background: linear-gradient(135deg, #FC5C7D, #6A82FB);
transform: translateY(-2px);
}

.rule {
border-bottom: 2px solid #eee;
margin: 1em 0;
}

.form-footer {
display: flex;
justify-content: center;
}

#result-container {
margin-top: 1.5em;
text-align: center;
}

#result {
font-size: 20px;
color: #333;
font-weight: bold;
}
30 changes: 30 additions & 0 deletions Calculators/3D-Shapes-Calculator/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@500&display=swap" rel="stylesheet">
<title>3D Shapes Calculator</title>
</head>

<body>
<header class="main">
<h1 class="header">3D Shapes Calculator</h1>
<div class="selectCalculator">
<label for="calculator">Select Calculator: </label>
<select id="calculator" name="calculator">
<option value="None">--Select calculator type--</option>
<option value="3D-Shapes-Volume-Calculator">Volume Calculator</option>
<option value="Surface-Area-Calculator">Surface Area Calculator</option>
</select>
</div>
<button class="submit-button" onclick="navigateToCalculator()">Submit</button>
</header>

<script src="script.js"></script>
</body>

</html>
6 changes: 6 additions & 0 deletions Calculators/3D-Shapes-Calculator/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
function navigateToCalculator() {
const select = document.getElementById('calculator');
if (select.value !== "None") {
window.location.href = `./${select.value}/index.html`;
}
}
Loading

0 comments on commit 04215b0

Please sign in to comment.