Source code for pyleecan.Methods.Geometry.Segment.comp_distance
from numpy import sqrt, array
from numpy import arccos, array, dot, pi, cross
from numpy.linalg import det, norm
[docs]def distance_numpy(A, B, P):
# from: https://gist.github.com/nim65s/5e9902cd67f094ce65b0
"""segment line AB, point P, where each one is an array([x, y])"""
if all(A == P) or all(B == P):
return 0
if arccos(dot((P - A) / norm(P - A), (B - A) / norm(B - A))) > pi / 2:
return norm(P - A)
if arccos(dot((P - B) / norm(P - B), (A - B) / norm(A - B))) > pi / 2:
return norm(P - B)
return norm(cross(A - B, A - P)) / norm(B - A)
[docs]def comp_distance(self, Z):
"""Compute the distance of a point to the Segment
Parameters
----------
self : Segment
A Segment object
Z : complex
Complex coordinate of the point
Returns
-------
D : float
distance of a point to the Segment
"""
Z1 = array([self.begin.real, self.begin.imag])
Z2 = array([self.end.real, self.end.imag])
Z3 = array([Z.real, Z.imag])
return distance_numpy(Z1, Z2, Z3)