Source code for pyleecan.Methods.Geometry.Arc.is_on_line
# -*- coding: utf-8 -*-
from numpy import exp, pi, angle, abs as np_abs
[docs]def is_on_line(self, Z):
"""Check is a point defined by its complex coordinate is on the arc
Parameters
----------
self : Arc
An Arc object
Z : complex
Complex coordinate of the point
Returns
-------
is_on_line : bool
True if the point is on the arc
"""
Zc = self.get_center()
R = self.comp_radius()
# Check if on the circle
if abs(np_abs(Z - Zc) - R) > 1e-6:
return False
# Check if point is begin or end
begin = self.get_begin()
end = self.get_end()
if np_abs(Z - begin) < 1e-6:
return True
if np_abs(Z - end) < 1e-6:
return True
# Go to the coordinate system Zc as center, begin on X > 0 axis
Ze = (end - Zc) * exp(-1j * angle(begin - Zc))
Z = (Z - Zc) * exp(-1j * angle(begin - Zc))
alpha = self.get_angle()
Ae = angle(Ze) % (2 * pi)
Az = angle(Z) % (2 * pi)
if alpha > 0: # Trigo direction
if Ae > Az:
return True
return False
# Clockwise direction
if Az > Ae:
return True
return False