Source code for xsect.calc.polygon

from __future__ import division
import numpy as np
from .boundary import close_points, section_summary

__all__ = ['polygon_points', 'polygon_summary']


[docs]def polygon_points(n, radius, thickness=None, is_inscribed=True): """ Returns an array of boundary points for a polygon. Parameters ---------- n : int The number of sides to the polygon. radius : float The radius of the polygon. thickness : float The thickness of the wall. If None, the cross section will be assumed to be solid. is_inscribed : bool If True, an inscribed polygon will be generated for the specified radius. Otherwise, a circumscribed polygon will be generated. """ c = np.cos(np.pi/n) if is_inscribed: ro = radius else: ro = radius / c ang = np.linspace(0.5*np.pi, 2.5*np.pi, n+1) ang = np.column_stack([np.cos(ang), np.sin(ang)]) points = ro * ang if thickness is not None: if is_inscribed: ri = ro - thickness / c else: ri = (radius - thickness) / c p = ri * ang[::-1] points = np.concatenate([points, p]) return close_points(points)
[docs]def polygon_summary(n, radius, thickness=None, is_inscribed=True): """ Returns a dictionary with a summary of polygon section properties. Parameters ---------- n : int The number of sides to the polygon. radius : float The radius of the polygon. thickness : float The thickness of the wall. If None, the cross section will be assumed to be solid. is_inscribed : bool If True, an inscribed polygon will be generated for the specified radius. Otherwise, a circumscribed polygon will be generated. """ p = polygon_points(n, radius, thickness, is_inscribed) return section_summary(p)