Source code for pyleecan.Methods.Geometry.Arc.intersect_line

# -*- coding: utf-8 -*-

from numpy import exp, pi, angle, abs as np_abs

from ....Functions.Geometry.inter_line_circle import inter_line_circle


[docs]def intersect_line(self, Z1, Z2): """Return a list (0, 1 or 2 complex) of coordinates of the intersection of the arc with a line defined by two complex Parameters ---------- self : Arc An Arc object Returns ------- Z_list: list Complex coordinates of the intersection (if any) """ Zc = self.get_center() R = self.comp_radius() # Get intersetion between line and the full circle Zlist = inter_line_circle(Z1=Z1, Z2=Z2, R=R, Zc=Zc) # Keep only the points actually on the arc Zlist = [Z for Z in Zlist if self.is_on_line(Z)] # Order the intersection points (begin=>intersect1=>intersection2=>end) if len(Zlist) == 2: begin = self.get_begin() if np_abs(Zlist[0] - begin) < 1e-6: # First point is begin return Zlist if np_abs(Zlist[1] - begin) < 1e-6: # Second point is begin return Zlist[::-1] # Go to the coordinate system Zc as center, begin on X > 0 axis Z1 = (Zlist[0] - Zc) * exp(-1j * angle(begin - Zc)) Z2 = (Zlist[1] - Zc) * exp(-1j * angle(begin - Zc)) alpha = self.get_angle() A1 = angle(Z1) % (2 * pi) A2 = angle(Z2) % (2 * pi) # Check if Zlist needs to be reversed if alpha > 0 and A1 > A2: return Zlist[::-1] if alpha < 0 and A2 > A1: return Zlist[::-1] return Zlist