Source code for symplyphysics.definitions.vector.superposition_of_forces_is_sum
r"""
Superposition of forces is sum (Vector)
=======================================
The net force exerted on an object is equal to the vector sum of all the forces exerted on it.
**Notation:**
#. :math:`\sum_i x_i` (:code:`Sum(x_i, i)`) denotes a sum of :math:`x_i` over the index :math:`i`.
**Links:**
#. `Wikipedia, general principle <https://en.wikipedia.org/wiki/Superposition_principle>`__.
"""
from typing import Iterable
from symplyphysics import (units, validate_input, validate_output)
from symplyphysics.core.vectors.arithmetics import add_cartesian_vectors
from symplyphysics.core.vectors.vectors import QuantityVector, Vector
[docs]
def superposition_law(forces_: Iterable[Vector]) -> Vector:
r"""
The net force vector is the sum of individual force vectors.
Law:
:code:`F = Sum(F_i, i)`
Latex:
.. math::
\vec F = \sum_i {\vec F}_i
:param forces\_: sequence of individual :symbols:`force` vectors.
Symbol: :code:`F_i`
Latex: :math:`{\vec F}_i`
Dimension: *force*
:return: net :symbols:`force` exerted on the object.
Symbol: :code:`F`
Latex: :math:`\vec F`
Dimension: *force*
"""
result = Vector([0, 0, 0], next(iter(forces_)).coordinate_system)
for force_ in forces_:
result = add_cartesian_vectors(result, force_)
return result
@validate_input(forces_=units.force)
@validate_output(units.force)
def calculate_resultant_force(forces_: Iterable[QuantityVector]) -> QuantityVector:
forces_base_vectors = [f.to_base_vector() for f in forces_]
if not forces_base_vectors:
raise ValueError("At least one force should be present")
result_force_vector = superposition_law(forces_base_vectors)
return QuantityVector.from_base_vector(result_force_vector)