Source code for gdsfactory.components.ellipse

from __future__ import annotations

import numpy as np
from numpy import cos, pi, sin, sqrt

import gdsfactory as gf
from gdsfactory.component import Component
from gdsfactory.typings import LayerSpec


[docs] @gf.cell def ellipse( radii: tuple[float, float] = (10.0, 5.0), angle_resolution: float = 2.5, layer: LayerSpec = "WG", ) -> Component: """Returns ellipse component. Args: radii: Semimajor and semiminor axis lengths of the ellipse. angle_resolution: number of degrees per point. layer: Specific layer(s) to put polygon geometry on. The orientation of the ellipse is determined by the order of the radii variables; if the first element is larger, the ellipse will be horizontal and if the second element is larger, the ellipse will be vertical. """ c = gf.Component() a = radii[0] b = radii[1] t = np.linspace(0, 360, int(360 / angle_resolution) + 1) * pi / 180 r = a * b / (sqrt((b * cos(t)) ** 2 + (a * sin(t)) ** 2)) xpts = r * cos(t) ypts = r * sin(t) c.add_polygon(points=(xpts, ypts), layer=layer) return c
if __name__ == "__main__": c = ellipse() c.show(show_ports=True)