Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions src/main/java/com/thealgorithms/physics/Kinematics.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.thealgorithms.physics;
/**
* Implements the fundamental "SUVAT" equations for motion
* under constant acceleration.
*
* @author [Priyanshu Kumar Singh](https://github.com/Priyanshu1303d)
* @see <a href="https://en.wikipedia.org/wiki/Equations_of_motion#Uniform_acceleration">Wikipedia</a>
*/
public final class Kinematics {
private Kinematics() {
}

/**
* Calculates the final velocity (v) of an object.
* Formula: v = u + at
*
* @param u Initial velocity (m/s).
* @param a Constant acceleration (m/s^2).
* @param t Time elapsed (s).
* @return The final velocity (m/s).
*/

public static double calculateFinalVelocity(double u, double a, double t) {
return u + a * t;
}

/**
* Calculates the displacement (s) of an object.
* Formula: s = ut + 0.5 * a * t^2
*
* @param u Initial velocity (m/s).
* @param a Constant acceleration (m/s^2).
* @param t Time elapsed (s).
* @return The displacement (m).
*/

public static double calculateDisplacement(double u, double a, double t) {
return u * t + 0.5 * a * t * t;
}

/**
* Calculates the displacement (s) of an object.
* Formula: v^2 = u^2 + 2 * a * s
*
* @param u Initial velocity (m/s).
* @param a Constant acceleration (m/s^2).
* @param s Displacement (m).
* @return The final velocity squared (m/s)^2.
*/

public static double calculateFinalVelocitySquared(double u, double a, double s) {
return u * u + 2 * a * s;
}

/**
* Calculates the displacement (s) using the average velocity.
* Formula: s = (u + v) / 2 * t
*
* @param u Initial velocity (m/s).
* @param v Final velocity (m/s).
* @param t Time elapsed (s).
* @return The displacement (m).
*/

public static double calculateDisplacementFromVelocities(double u, double v, double t) {
double velocitySum = u + v;
return velocitySum / 2 * t;
}
}
48 changes: 48 additions & 0 deletions src/test/java/com/thealgorithms/physics/KinematicsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.thealgorithms.physics;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/**
* Unit tests for the Kinematics utility class.
*/

public final class KinematicsTest {
// A small tolerance for comparing floating-point numbers
private static final double DELTA = 1e-9;
@Test
@DisplayName("Test final velocity: v = u + at")
void testCalculateFinalVelocity() {
assertEquals(20.0, Kinematics.calculateFinalVelocity(10.0, 2.0, 5.0), DELTA);
}

@Test
@DisplayName("Test displacement: s = ut + 0.5at^2")
void testCalculateDisplacement() {
assertEquals(75.0, Kinematics.calculateDisplacement(10.0, 2.0, 5.0), DELTA);
}

@Test
@DisplayName("Test final velocity squared: v^2 = u^2 + 2as")
void testCalculateFinalVelocitySquared() {
assertEquals(400.0, Kinematics.calculateFinalVelocitySquared(10.0, 2.0, 75.0), DELTA);
}

@Test
@DisplayName("Test displacement from average velocity: s = (u+v)/2 * t")
void testCalculateDisplacementFromVelocities() {
assertEquals(75.0, Kinematics.calculateDisplacementFromVelocities(10.0, 20.0, 5.0), DELTA);
}

@Test
@DisplayName("Test with negative acceleration (deceleration)")
void testDeceleration() {
assertEquals(10.0, Kinematics.calculateFinalVelocity(30.0, -4.0, 5.0), DELTA);
assertEquals(100.0, Kinematics.calculateDisplacement(30.0, -4.0, 5.0), DELTA);

assertEquals(100.0, Kinematics.calculateFinalVelocitySquared(30.0, -4.0, 100.0), DELTA);
assertEquals(100.0, Kinematics.calculateDisplacementFromVelocities(30.0, 10.0, 5.0), DELTA);
}
}