Source code for sknano.core.physics.compute_funcs

# -*- coding: utf-8 -*-
"""
===============================================================================
Physics functions (:mod:`sknano.core.physics.compute_funcs`)
===============================================================================

.. currentmodule:: sknano.core.physics.compute_funcs

"""
from __future__ import absolute_import, division, print_function, \
    unicode_literals
__docformat__ = 'restructuredtext en'

import numpy as np

from sknano.core.math import Vector

__all__ = ['compute_centroid', 'compute_inertia_tensor']


[docs]def compute_centroid(coords): """Compute the centroid of coordinates. .. math:: \\mathbf{C} = \\frac{\\sum_{i=1}^{N}m_i\\mathbf{r}_i}{\\sum_{i=1}^{N}m_i} Returns ------- C : `~sknano.core.math.Vector` The position vector of the centroid coordinates. """ C = Vector(np.mean(coords, axis=0)) C.rezero() return C
[docs]def compute_inertia_tensor(masses, coords): """Compute the inertia tensor.""" x, y, z = [coords[:, i] for i in range(3)] Ixx = (masses * (y**2 + z**2)).sum() Iyy = (masses * (x**2 + z**2)).sum() Izz = (masses * (x**2 + y**2)).sum() Ixy = Iyx = (-masses * x * y).sum() Ixz = Izx = (-masses * x * z).sum() Iyz = Izy = (-masses * y * z).sum() return np.array([[Ixx, Ixy, Ixz], [Iyx, Iyy, Iyz], [Izx, Izy, Izz]])