Source code for unipy.math.geometry

"""Geometrical toolkit.

"""


import math
import pandas as pd


__all__ = ['Ellipse']


[docs]class Ellipse: """Create an ellipse. Attributes ---------- diameter radius center angle """ def __init__(self, diameter): """ Parameters ---------- diameter """ assert isinstance(diameter, tuple) == True assert len(diameter) == 2 self.diameter = diameter self.radius = (int(diameter[0]/2), int(diameter[1]/2)) self.center = (int(math.floor(diameter[0]/2 + 1)), int(math.floor(diameter[1]/2 + 1)) ) self.angle = 0
[docs] def coordinates(self): diameter = self.diameter """ Ellipse equation: (x-center_x)^2/radius_x^2 + (y-center_y)^2/radius_y^2 = 1 x = center_x + radius_x * cos(t) y = center_y + radius_y * sin(t) """ sine, cosine = math.sin(self.angle), math.cos(self.angle) # Get Center Coordinates center_x, center_y = self.center radius_x, radius_y = self.radius # Define an Ellipse Function ellipse_func = lambda x, y: (pow(x - center_x, 2) / pow(radius_x, 2)) + (pow(y - center_y, 2) / pow(radius_y, 2)) <= 1 coord_list = [(x, y) for x in range(0, diameter[0]) for y in range(0, diameter[1]) if (pow(x - center_x, 2) / pow(radius_x, 2)) + (pow(y - center_y, 2) / pow(radius_y, 2)) <= 1] coords = pd.DataFrame(coord_list, columns=['xcoord', 'ycoord']) return coords