GeometryOperators#
Overview#
Convert a C# list object to a Python list. |
|
Convert a number and unit to a float. |
|
Retrieve the draft type. |
|
Evaluate the midpoint between two points. |
|
Evaluate the area of a triangle defined by its three vertices. |
|
Evaluate the cross product of two geometry vectors. |
|
Evaluate the dot product between two geometry vectors. |
|
Evaluate the product between a scalar value and a vector. |
|
Evaluate rotation of a vector around an axis. |
|
Evaluate two geometry vectors by subtracting them (a-b). |
|
Evaluate two geometry vectors by adding them (a+b). |
|
Evaluate the Euclidean norm of a geometry vector. |
|
Normalize a geometry vector. |
|
Vector from one point to another point. |
|
Evaluate the distance between two points expressed as their Cartesian coordinates. |
|
Find a point on a plane. |
|
Evaluate the vector distance between point |
|
Check if a point lies on the segment defined by two points. |
|
Check if a segment defined by two points is parallel to a segment defined by two other points. |
|
Evaluate the parallelism coefficient between two segments. |
|
Check if two vectors are collinear (parallel or anti-parallel). |
|
Project a segment onto another segment and check if the projected segment is inside it. |
|
Return the sum of two vertices lists. |
|
Evaluate the angle between two geometry vectors. |
|
Retrieve the axes from the HFSS X axis and Y pointing axis. |
|
Retrieve Euler angles of a frame following the rotation sequence ZXZ. |
|
Retrieve Euler angles of a frame following the rotation sequence ZYZ. |
|
Convert a quaternion to a rotated frame defined by X, Y, and Z axes. |
|
Convert a quaternion to the axis angle rotation formulation. |
|
Convert the axis angle rotation formulation to a quaternion. |
|
Convert a quaternion to Euler angles following rotation sequence ZXZ. |
|
Convert the Euler angles following rotation sequence ZXZ to a quaternion. |
|
Convert a quaternion to Euler angles following rotation sequence ZYZ. |
|
Convert the Euler angles following rotation sequence ZYZ to a quaternion. |
|
Convert the angle from degrees to radians. |
|
Convert the angle from radians to degrees. |
|
Implementation of atan2 that does not suffer from sign issues. |
|
Evaluate the product of two quaternions. |
|
Evaluate the rotation of a vector, defined by a quaternion. |
|
Evaluate the inverse rotation of a vector that is defined by a quaternion. |
|
Evaluate the centroid of a polygon defined by its points. |
|
Return x_pointing and y_pointing vectors as expressions. |
|
Convert a string to a numeric value. Discard the suffix. |
|
Return |
|
Return a list of [x,y,z] numeric values given a coordinate system as input. |
|
Orient a polygon clockwise or counterclockwise. |
|
Evaluate the signed angle between two geometry vectors. |
|
Evaluate the signed angle between two 2D geometry vectors. |
|
Determine if a point is inside, outside the polygon or at exactly at the border. |
|
Determine if a point is inside or outside a polygon, both located on the same plane. |
|
Determine if the two segments a and b are intersecting. |
|
Determine if a segment defined by two points |
|
Check if two vectors are perpendicular. |
|
Check if a point projection lies on the segment defined by two points. |
|
Calculate the distance between a point |
|
Find the largest area rectangles of arbitrary orientation in a polygon. |
|
Ceil of angle. |
|
Radian angle ceiling. |
|
Convert angle to degree with given digits rounding. |
|
Convert to radians with given round. |
|
Given a list of points, finds the closest points to a reference point. |
|
Mirror point about a plane defining by a point on the plane and a normal point. |
|
Detect all points that are placed along lines. |
|
Find the smallest distance between two polygons using KDTree for efficient nearest neighbor search. |
Import detail#
from pyedb.generic.geometry_operators import GeometryOperators
Method detail#
- static GeometryOperators.List2list(input_list) list#
Convert a C# list object to a Python list.
This function performs a deep conversion.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> csharp_list = [1, 2, [3, 4]] >>> go.List2list(csharp_list) [1, 2, [3, 4]]
- static GeometryOperators.parse_dim_arg(string: str | float, scale_to_unit: str | None = None, variable_manager: VariableManager = None) float | str | None#
Convert a number and unit to a float.
Angles are converted in radians.
- Parameters:
- Returns:
Examples
Parse
"2mm".>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> go.parse_dim_arg("2mm") 0.002
Use the optional argument
scale_to_unitto specify the destination unit.>>> go.parse_dim_arg("2mm", scale_to_unit="mm") 2.0
- static GeometryOperators.draft_type_str(val: int) str#
Retrieve the draft type.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> from pyedb.generic.constants import SWEEPDRAFT >>> go.draft_type_str(SWEEPDRAFT.Extended) 'Extended'
- static GeometryOperators.get_mid_point(v1: list[float], v2: list[float]) list[float]#
Evaluate the midpoint between two points.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> p1 = [0.0, 0.0, 0.0] >>> p2 = [2.0, 4.0, 6.0] >>> go.get_mid_point(p1, p2) [1.0, 2.0, 3.0]
- static GeometryOperators.get_triangle_area(v1: list[float], v2: list[float], v3: list[float]) float#
Evaluate the area of a triangle defined by its three vertices.
- Parameters:
- Returns:
floatArea of the triangle.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> v1 = [0.0, 0.0, 0.0] >>> v2 = [1.0, 0.0, 0.0] >>> v3 = [0.0, 1.0, 0.0] >>> go.get_triangle_area(v1, v2, v3) 0.5
- static GeometryOperators.v_cross(a: list[float], b: list[float]) list[float]#
Evaluate the cross product of two geometry vectors.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [1.0, 0.0, 0.0] >>> b = [0.0, 1.0, 0.0] >>> go.v_cross(a, b) [0.0, 0.0, 1.0]
- static GeometryOperators.v_dot(a: list[float], b: list[float]) float | bool#
Evaluate the dot product between two geometry vectors.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [1.0, 2.0, 3.0] >>> b = [4.0, 5.0, 6.0] >>> go.v_dot(a, b) 32.0
- static GeometryOperators.v_prod(s: float, v: list[float]) list[float]#
Evaluate the product between a scalar value and a vector.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> v = [1.0, 2.0, 3.0] >>> go.v_prod(2.0, v) [2.0, 4.0, 6.0]
- static GeometryOperators.v_rotate_about_axis(vector: list[float], angle: float, radians: bool = False, axis: str = 'z') tuple[float, float, float]#
Evaluate rotation of a vector around an axis.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> import math >>> v = [1.0, 0.0, 0.0] >>> go.v_rotate_about_axis(v, 90.0, axis="z") (6.123233995736766e-17, 1.0, 0.0)
- static GeometryOperators.v_sub(a: list[float], b: list[float]) list[float]#
Evaluate two geometry vectors by subtracting them (a-b).
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [5.0, 7.0, 9.0] >>> b = [1.0, 2.0, 3.0] >>> go.v_sub(a, b) [4.0, 5.0, 6.0]
- static GeometryOperators.v_sum(a: list[float], b: list[float]) list[float]#
Evaluate two geometry vectors by adding them (a+b).
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [1.0, 2.0, 3.0] >>> b = [4.0, 5.0, 6.0] >>> go.v_sum(a, b) [5.0, 7.0, 9.0]
- static GeometryOperators.v_norm(a: list[float]) float#
Evaluate the Euclidean norm of a geometry vector.
- Parameters:
- Returns:
floatEvaluated norm in the same unit as the coordinates for the input vector.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [3.0, 4.0, 0.0] >>> go.v_norm(a) 5.0
- static GeometryOperators.normalize_vector(v: list[float]) list[float]#
Normalize a geometry vector.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> v = [3.0, 4.0, 0.0] >>> go.normalize_vector(v) [0.6, 0.8, 0.0]
- static GeometryOperators.v_points(p1: list[float], p2: list[float]) list[float]#
Vector from one point to another point.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> p1 = [1.0, 2.0, 3.0] >>> p2 = [4.0, 6.0, 8.0] >>> go.v_points(p1, p2) [3.0, 4.0, 5.0]
- static GeometryOperators.points_distance(p1: list[float], p2: list[float]) float | bool#
Evaluate the distance between two points expressed as their Cartesian coordinates.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> p1 = [0.0, 0.0, 0.0] >>> p2 = [3.0, 4.0, 0.0] >>> go.points_distance(p1, p2) 5.0
- static GeometryOperators.find_point_on_plane(pointlists: list[list[float]], direction: int = 0) float#
Find a point on a plane.
- static GeometryOperators.distance_vector(p: list[float], a: list[float], b: list[float]) list[float]#
Evaluate the vector distance between point
pand a line defined by two points,aandb.The formula is
d = (a-p)-((a-p)dot p)n, whereais a point of the line (eitheraorb) andnis the unit vector in the direction of the line.- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> p = [0.0, 1.0, 0.0] >>> a = [0.0, 0.0, 0.0] >>> b = [1.0, 0.0, 0.0] >>> go.distance_vector(p, a, b) [0.0, 1.0, 0.0]
- static GeometryOperators.is_between_points(p: list[float], a: list[float], b: list[float], tol: float = 1e-06) bool#
Check if a point lies on the segment defined by two points.
- Parameters:
- Returns:
- bool
Truewhen the point lies on the segment defined by the two points,Falseotherwise.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> p = [0.5, 0.5, 0.0] >>> a = [0.0, 0.0, 0.0] >>> b = [1.0, 1.0, 0.0] >>> go.is_between_points(p, a, b) True
- static GeometryOperators.is_parallel(a1: list[float], a2: list[float], b1: list[float], b2: list[float], tol: float = 1e-06) bool#
Check if a segment defined by two points is parallel to a segment defined by two other points.
- Parameters:
- a1
list[float] List of
[x, y, z]coordinates for the first point of the first segment.- a2
list[float] List of
[x, y, z]coordinates for the second point of the first segment.- b1
list[float] List of
[x, y, z]coordinates for the first point of the second segment.- b2
list[float] List of
[x, y, z]coordinates for the second point of the second segment.- tol
float,optional Linear tolerance. The default is
1e-6.
- a1
- Returns:
- bool
Truewhen successful,Falsewhen failed.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a1 = [0.0, 0.0, 0.0] >>> a2 = [1.0, 0.0, 0.0] >>> b1 = [0.0, 1.0, 0.0] >>> b2 = [1.0, 1.0, 0.0] >>> go.is_parallel(a1, a2, b1, b2) True
- static GeometryOperators.parallel_coeff(a1: list[float], a2: list[float], b1: list[float], b2: list[float]) float#
Evaluate the parallelism coefficient between two segments.
- Parameters:
- a1
list[float] List of
[x, y, z]coordinates for the first point of the first segment.- a2
list[float] List of
[x, y, z]coordinates for the second point of the first segment.- b1
list[float] List of
[x, y, z]coordinates for the first point of the second segment.- b2
list[float] List of
[x, y, z]coordinates for the second point of the second segment.
- a1
- Returns:
floatDot product of 4 vertices of 2 segments.
- static GeometryOperators.is_collinear(a: list[float], b: list[float], tol: float = 1e-06) bool#
Check if two vectors are collinear (parallel or anti-parallel).
- Parameters:
- Returns:
- bool
Trueif vectors are collinear,Falseotherwise.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [1.0, 0.0, 0.0] >>> b = [2.0, 0.0, 0.0] >>> go.is_collinear(a, b) True
- static GeometryOperators.is_projection_inside(a1: list[float], a2: list[float], b1: list[float], b2: list[float]) bool#
Project a segment onto another segment and check if the projected segment is inside it.
- Parameters:
- a1
list[float] List of
[x, y, z]coordinates for the first point of the projected segment.- a2
list[float] List of
[x, y, z]coordinates for the second point of the projected segment.- b1
list[float] List of
[x, y, z]coordinates for the first point of the other segment.- b2
list[float] List of
[x, y, z]coordinates for the second point of the other segment.
- a1
- Returns:
- bool
Truewhen the projected segment is inside the other segment,Falseotherwise.
- static GeometryOperators.arrays_positions_sum(vertlist1: list[list[float]], vertlist2: list[list[float]]) float#
Return the sum of two vertices lists.
- static GeometryOperators.v_angle(a: list[float], b: list[float]) float#
Evaluate the angle between two geometry vectors.
- Parameters:
- Returns:
floatAngle in radians.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> import math >>> a = [1.0, 0.0, 0.0] >>> b = [0.0, 1.0, 0.0] >>> angle = go.v_angle(a, b) >>> math.degrees(angle) 90.0
- static GeometryOperators.pointing_to_axis(x_pointing: list[float], y_pointing: list[float]) tuple[list[float], list[float], list[float]]#
Retrieve the axes from the HFSS X axis and Y pointing axis.
This is as per the definition of the AEDT interface coordinate system.
- static GeometryOperators.axis_to_euler_zxz(x: list[float], y: list[float], z: list[float]) tuple[float, float, float]#
Retrieve Euler angles of a frame following the rotation sequence ZXZ.
Provides assumption for the gimbal lock problem.
- static GeometryOperators.axis_to_euler_zyz(x: list[float], y: list[float], z: list[float]) tuple[float, float, float]#
Retrieve Euler angles of a frame following the rotation sequence ZYZ.
Provides assumption for the gimbal lock problem.
- static GeometryOperators.quaternion_to_axis(q: list[float]) tuple[list[float], list[float], list[float]]#
Convert a quaternion to a rotated frame defined by X, Y, and Z axes.
- static GeometryOperators.quaternion_to_axis_angle(q: list[float]) tuple[list[float], float]#
Convert a quaternion to the axis angle rotation formulation.
- static GeometryOperators.axis_angle_to_quaternion(u: list[float], theta: float) list[float]#
Convert the axis angle rotation formulation to a quaternion.
- static GeometryOperators.quaternion_to_euler_zxz(q: list[float]) tuple[float, float, float]#
Convert a quaternion to Euler angles following rotation sequence ZXZ.
- static GeometryOperators.euler_zxz_to_quaternion(phi: float, theta: float, psi: float) list[float]#
Convert the Euler angles following rotation sequence ZXZ to a quaternion.
- static GeometryOperators.quaternion_to_euler_zyz(q: list[float]) tuple[float, float, float]#
Convert a quaternion to Euler angles following rotation sequence ZYZ.
- static GeometryOperators.euler_zyz_to_quaternion(phi: float, theta: float, psi: float) list[float]#
Convert the Euler angles following rotation sequence ZYZ to a quaternion.
- static GeometryOperators.deg2rad(angle: float) float#
Convert the angle from degrees to radians.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> go.deg2rad(180.0) 3.141592653589793
- static GeometryOperators.rad2deg(angle: float) float#
Convert the angle from radians to degrees.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> import math >>> go.rad2deg(math.pi) 180.0
- static GeometryOperators.atan2(y: float, x: float) float#
Implementation of atan2 that does not suffer from sign issues.
This implementation always returns 0.0 for very small values.
- static GeometryOperators.q_prod(p: list[float], q: list[float]) list[float]#
Evaluate the product of two quaternions.
The product is defined as: p = p0 + p’ = p0 + ip1 + jp2 + kp3. q = q0 + q’ = q0 + iq1 + jq2 + kq3. r = pq = p0q0 - p’ • q’ + p0q’ + q0p’ + p’ x q’.
- static GeometryOperators.q_rotation(v: list[float], q: list[float]) list[float]#
Evaluate the rotation of a vector, defined by a quaternion.
Evaluated as:
q = q0 + q' = q0 + iq1 + jq2 + kq3,w = qvq* = (q0^2 - |q'|^2)v + 2(q' • v)q' + 2q0(q' x v).
- static GeometryOperators.q_rotation_inv(v: list[float], q: list[float]) list[float]#
Evaluate the inverse rotation of a vector that is defined by a quaternion.
It can also be the rotation of the coordinate frame with respect to the vector.
q = q0 + q’ = q0 + iq1 + jq2 + kq3 q* = q0 - q’ = q0 - iq1 - jq2 - kq3 w = q*vq
- static GeometryOperators.get_polygon_centroid(pts: list[list[float]]) list[float]#
Evaluate the centroid of a polygon defined by its points.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> pts = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0]] >>> go.get_polygon_centroid(pts) [0.5, 0.5, 0.0]
- static GeometryOperators.cs_xy_pointing_expression(yaw: str, pitch: str, roll: str) list[list[str]]#
Return x_pointing and y_pointing vectors as expressions.
- static GeometryOperators.get_numeric(s: str | float | None) float#
Convert a string to a numeric value. Discard the suffix.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> go.get_numeric("123.45mm") 123.45
- static GeometryOperators.is_small(s: str | float) bool#
Return
Trueif the number represented by s is zero (i.e very small).- Parameters:
- Returns:
- bool
Trueif the value is very small,Falseotherwise.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> go.is_small(0.0) True >>> go.is_small(1e-20) True >>> go.is_small(1.0) False
- static GeometryOperators.numeric_cs(cs_in: list[str] | str) list[float] | None#
Return a list of [x,y,z] numeric values given a coordinate system as input.
- static GeometryOperators.orient_polygon(x: list[float], y: list[float], clockwise: bool = True) tuple[list[float], list[float]]#
Orient a polygon clockwise or counterclockwise.
The vertices should be already ordered either way. Use this function to change the orientation. The polygon is represented by its vertices coordinates.
- Parameters:
- x
list[float] List of x coordinates of the vertices. Length must be >= 1. Degenerate polygon with only 2 points is also accepted, in this case the points are returned unchanged.
- y
list[float] List of y coordinates of the vertices. Must be of the same length as x.
- clockwisebool,
optional If
Truethe polygon is oriented clockwise, ifFalseit is oriented counterclockwise. The default isTrue.
- x
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> x = [0.0, 1.0, 1.0, 0.0] >>> y = [0.0, 0.0, 1.0, 1.0] >>> x_new, y_new = go.orient_polygon(x, y, clockwise=True)
- static GeometryOperators.v_angle_sign(va: list[float], vb: list[float], vn: list[float], right_handed: bool = True) float#
Evaluate the signed angle between two geometry vectors.
The sign is evaluated respect to the normal to the plane containing the two vectors as per the following rule. In case of opposite vectors, it returns an angle equal to 180deg (always positive). Assuming that the plane normal is normalized (vb == 1), the signed angle is simplified. For the right-handed rotation from Va to Vb: - atan2((va x Vb) . vn, va . vb). For the left-handed rotation from Va to Vb: - atan2((Vb x va) . vn, va . vb).
- Parameters:
- va
list[float] List of
[x, y, z]coordinates for the first vector.- vb
list[float] List of
[x, y, z]coordinates for the second vector.- vn
list[float] List of
[x, y, z]coordinates for the plane normal.- right_handedbool,
optional Whether to consider the right-handed rotation from va to vb. When
False, left-hand rotation from va to vb is considered. The default isTrue.
- va
- Returns:
floatAngle in radians.
- static GeometryOperators.v_angle_sign_2D(va: list[float], vb: list[float], right_handed: bool = True) float#
Evaluate the signed angle between two 2D geometry vectors.
It is the 2D version of the
GeometryOperators.v_angle_signconsidering vn = [0,0,1]. In case of opposite vectors, it returns an angle equal to 180deg (always positive).- Parameters:
- Returns:
floatAngle in radians.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> import math >>> va = [1.0, 0.0] >>> vb = [0.0, 1.0] >>> angle = go.v_angle_sign_2D(va, vb) >>> math.degrees(angle) 90.0
- static GeometryOperators.point_in_polygon(point: list[float], polygon: list[list[float]], tolerance: float = 1e-08) int#
Determine if a point is inside, outside the polygon or at exactly at the border.
The method implements the radial algorithm (https://es.wikipedia.org/wiki/Algoritmo_radial)
- Parameters:
- Returns:
int-1When the point is outside the polygon.0When the point is exactly on one of the sides of the polygon.1When the point is inside the polygon.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> point = [0.5, 0.5] >>> polygon = [[0.0, 1.0, 1.0, 0.0], [0.0, 0.0, 1.0, 1.0]] >>> go.point_in_polygon(point, polygon) 1
- static GeometryOperators.is_point_in_polygon(point: list[float], polygon: list[list[float]]) bool#
Determine if a point is inside or outside a polygon, both located on the same plane.
The method implements the radial algorithm (https://es.wikipedia.org/wiki/Algoritmo_radial)
- Parameters:
- Returns:
- bool
Trueif the point is inside the polygon or exactly on one of its sides.Falseotherwise.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> point = [0.5, 0.5] >>> polygon = [[0.0, 1.0, 1.0, 0.0], [0.0, 0.0, 1.0, 1.0]] >>> go.is_point_in_polygon(point, polygon) True
- static GeometryOperators.are_segments_intersecting(a1: list[float], a2: list[float], b1: list[float], b2: list[float], include_collinear: bool = True) bool#
Determine if the two segments a and b are intersecting.
- Parameters:
- a1
list[float] First point of segment a. List of
[x, y]coordinates.- a2
list[float] Second point of segment a. List of
[x, y]coordinates.- b1
list[float] First point of segment b. List of
[x, y]coordinates.- b2
list[float] Second point of segment b. List of
[x, y]coordinates.- include_collinearbool,
optional If
Truetwo segments are considered intersecting also if just one end lies on the other segment. The default isTrue.
- a1
- Returns:
- bool
Trueif the segments are intersecting.Falseotherwise.
- static GeometryOperators.is_segment_intersecting_polygon(a: list[float], b: list[float], polygon: list[list[float]]) bool#
Determine if a segment defined by two points
aandbintersects a polygon.Points on the vertices and on the polygon boundaries are not considered intersecting.
- static GeometryOperators.is_perpendicular(a: list[float], b: list[float], tol: float = 1e-06) bool#
Check if two vectors are perpendicular.
- Parameters:
- Returns:
- bool
Trueif vectors are perpendicular,Falseotherwise.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> a = [1.0, 0.0, 0.0] >>> b = [0.0, 1.0, 0.0] >>> go.is_perpendicular(a, b) True
- static GeometryOperators.is_point_projection_in_segment(p: list[float], a: list[float], b: list[float]) bool#
Check if a point projection lies on the segment defined by two points.
- Parameters:
- Returns:
- bool
Truewhen the projection point lies on the segment defined by the two points,Falseotherwise.
- static GeometryOperators.point_segment_distance(p: list[float], a: list[float], b: list[float]) float#
Calculate the distance between a point
pand a segment defined by two pointsaandb.
- static GeometryOperators.find_largest_rectangle_inside_polygon(polygon: list[list[float]], partition_max_order: int = 16) list[list[list[float]]]#
Find the largest area rectangles of arbitrary orientation in a polygon.
Implements the algorithm described by Rubén Molano, et al. “Finding the largest area rectangle of arbitrary orientation in a closed contour”, published in Applied Mathematics and Computation. https://doi.org/10.1016/j.amc.2012.03.063. (https://www.sciencedirect.com/science/article/pii/S0096300312003207)
- Parameters:
- Returns:
- static GeometryOperators.radians_over_rounded(angle: float, digits: int) float#
Radian angle ceiling.
- static GeometryOperators.degrees_default_rounded(angle: float, digits: int) float#
Convert angle to degree with given digits rounding.
- static GeometryOperators.radians_default_rounded(angle: float, digits: int) float#
Convert to radians with given round.
- static GeometryOperators.find_closest_points(points_list: list[list[float]], reference_point: list[float], tol: float = 1e-06) list[list[float]] | bool#
Given a list of points, finds the closest points to a reference point.
It returns a list of points because more than one can be found. It works with 2D or 3D points. The tolerance used to evaluate the distance to the reference point can be specified.
- Parameters:
- Returns:
- static GeometryOperators.mirror_point(start: list[float], reference: list[float], vector: list[float]) list[float]#
Mirror point about a plane defining by a point on the plane and a normal point.
- Parameters:
- Returns:
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> start = [1.0, 0.0, 0.0] >>> reference = [0.0, 0.0, 0.0] >>> vector = [1.0, 0.0, 0.0] >>> go.mirror_point(start, reference, vector) [-1.0, 0.0, 0.0]
- static GeometryOperators.find_points_along_lines(points: list[list[float]] | numpy.ndarray, minimum_number_of_points: int = 3, distance_threshold: float | None = None, selected_angles: list[float] | None = None, return_additional_info: bool = False) tuple#
Detect all points that are placed along lines.
The method takes as input a list of 2D points and detects all lines that contain at least 3 points. Optionally, the minimum number of points contained in a line can be specified by setting the argument
minimum_number_of_points. As default, all points along the lines are returned, regardless of their relative distance. Optionally, a distance_threshold can be set. If two points in a line are separated by a distance larger thandistance_threshold, the line is divided in two parts. If one of those parts does not satisfy theminimum_number_of_pointsrequirement, it is discarded. If distance_threshold is set (notNone), the computational time increases.- Parameters:
- points
list[list[float]]ornp.ndarray The points to process. Can be a list of lists where each sublist represents a 2D point
[x, y]coordinates, or a numpy array of shape (n, 2).- minimum_number_of_points
int,optional The minimum number of points that a line must contain. The default is
3.- distance_threshold
floatorNone,optional If two points in a line are separated by a distance larger than distance_threshold, the line is divided in two parts. The default is
None.- selected_angles
list[float]orNone,optional Specify a list of angles in degrees. If specified, the method returns only the lines which have one of the specified angles. The angle is defined as the positive angle of the infinite line with respect to the x-axis It is positive, and between 0 and 180 degrees. For example,
[90]indicated vertical lines parallel to the y-axis,[0]or[180]identifies horizontal lines parallel to the x-axis,45identifies lines parallel to the first quadrant bisector. The default isNone.- return_additional_infobool,
optional Whether to return additional information about the number of elements processed. The default is
False.
- points
- Returns:
tupleThe tuple contains: - lines: a list of lists where each sublist represents a 2D point
[x, y]coordinates in each line. - lines indexes: a list of lists where each sublist represents the index of the point in each line.The index is referring to the point position in the input point list.
number of processed points: optional, returned if
return_additional_infoisTruenumber of processed lines: optional, returned if
return_additional_infoisTrue- number of detected lines after
minimum_number_of_pointsis applied: optional, returned if
return_additional_infoisTrue
- number of detected lines after
- number of detected lines after
distance_thresholdis applied: optional, returned if
return_additional_infoisTrue
- number of detected lines after
- static GeometryOperators.smallest_distance_between_polygons(polygon1: list[tuple[float, float]], polygon2: list[tuple[float, float]]) float#
Find the smallest distance between two polygons using KDTree for efficient nearest neighbor search.
- Parameters:
- Returns:
floatThe smallest distance between any two points from the two polygons.
Examples
>>> from pyedb.generic.geometry_operators import GeometryOperators as go >>> polygon1 = [(1, 1), (4, 1), (4, 4), (1, 4)] >>> polygon2 = [(5, 5), (8, 5), (8, 8), (5, 8)] >>> go.smallest_distance_between_polygons(polygon1, polygon2) 1.4142135623730951