Skip to content

distance_ssDistanceSsDistanceSsdistance_ssdistance_ss🔗

Short description🔗

distance_ssDistanceSsDistanceSsdistance_ssdistance_ss — Calculate the distances between two line segments.

Signature🔗

distance_ss( point.y RowA1, point.x ColumnA1, point.y RowA2, point.x ColumnA2, point.y RowB1, point.x ColumnB1, point.y RowB2, point.x ColumnB2, out real DistanceMin, out real DistanceMax )void DistanceSs( const HTuple& RowA1, const HTuple& ColumnA1, const HTuple& RowA2, const HTuple& ColumnA2, const HTuple& RowB1, const HTuple& ColumnB1, const HTuple& RowB2, const HTuple& ColumnB2, HTuple* DistanceMin, HTuple* DistanceMax )static void HOperatorSet.DistanceSs( HTuple rowA1, HTuple columnA1, HTuple rowA2, HTuple columnA2, HTuple rowB1, HTuple columnB1, HTuple rowB2, HTuple columnB2, out HTuple distanceMin, out HTuple distanceMax )def distance_ss( row_a1: MaybeSequence[Union[float, int]], column_a1: MaybeSequence[Union[float, int]], row_a2: MaybeSequence[Union[float, int]], column_a2: MaybeSequence[Union[float, int]], row_b1: MaybeSequence[Union[float, int]], column_b1: MaybeSequence[Union[float, int]], row_b2: MaybeSequence[Union[float, int]], column_b2: MaybeSequence[Union[float, int]] ) -> Tuple[Sequence[float], Sequence[float]]

def distance_ss_s( row_a1: MaybeSequence[Union[float, int]], column_a1: MaybeSequence[Union[float, int]], row_a2: MaybeSequence[Union[float, int]], column_a2: MaybeSequence[Union[float, int]], row_b1: MaybeSequence[Union[float, int]], column_b1: MaybeSequence[Union[float, int]], row_b2: MaybeSequence[Union[float, int]], column_b2: MaybeSequence[Union[float, int]] ) -> Tuple[float, float]Herror distance_ss( double RowA1, double ColumnA1, double RowA2, double ColumnA2, double RowB1, double ColumnB1, double RowB2, double ColumnB2, double* DistanceMin, double* DistanceMax )

Herror T_distance_ss( const Htuple RowA1, const Htuple ColumnA1, const Htuple RowA2, const Htuple ColumnA2, const Htuple RowB1, const Htuple ColumnB1, const Htuple RowB2, const Htuple ColumnB2, Htuple* DistanceMin, Htuple* DistanceMax )

static void HMisc::DistanceSs( const HTuple& RowA1, const HTuple& ColumnA1, const HTuple& RowA2, const HTuple& ColumnA2, const HTuple& RowB1, const HTuple& ColumnB1, const HTuple& RowB2, const HTuple& ColumnB2, HTuple* DistanceMin, HTuple* DistanceMax )

static void HMisc::DistanceSs( double RowA1, double ColumnA1, double RowA2, double ColumnA2, double RowB1, double ColumnB1, double RowB2, double ColumnB2, double* DistanceMin, double* DistanceMax )

static void HMisc.DistanceSs( HTuple rowA1, HTuple columnA1, HTuple rowA2, HTuple columnA2, HTuple rowB1, HTuple columnB1, HTuple rowB2, HTuple columnB2, out HTuple distanceMin, out HTuple distanceMax )

static void HMisc.DistanceSs( double rowA1, double columnA1, double rowA2, double columnA2, double rowB1, double columnB1, double rowB2, double columnB2, out double distanceMin, out double distanceMax )

Description🔗

The operator distance_ssDistanceSs calculates the minimum and maximum distance between two line segments. As input the coordinates of the start and end point of the first line segment (RowA1rowA1row_a1,ColumnA1columnA1column_a1, RowA2rowA2row_a2,ColumnA2columnA2column_a2) and of the second line segment (RowB1rowB1row_b1,ColumnB1columnB1column_b1,RowB2rowB2row_b2,ColumnB2columnB2column_b2) are used. The parameters DistanceMindistanceMindistance_min and DistanceMaxdistanceMaxdistance_max return the result of the calculation. If the line segments are intersecting, DistanceMindistanceMindistance_min returns zero.

Parameter Broadcasting🔗

This operator supports parameter broadcasting. This means that each parameter can be given as a tuple of length 1 or N. Parameters with tuple length 1 will be repeated internally such that the number of computed distances is always N.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on internal data level.

Parameters🔗

RowA1rowA1row_a1 (input_control) point.y(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Row coordinate of the first point of the line segment.

ColumnA1columnA1column_a1 (input_control) point.x(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Column coordinate of the first point of the line segment.

RowA2rowA2row_a2 (input_control) point.y(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Row coordinate of the second point of the line segment.

ColumnA2columnA2column_a2 (input_control) point.x(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Column coordinate of the second point of the line segment.

RowB1rowB1row_b1 (input_control) point.y(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Row coordinate of the first point of the line.

ColumnB1columnB1column_b1 (input_control) point.x(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Column of the first point of the line.

RowB2rowB2row_b2 (input_control) point.y(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Row coordinate of the second point of the line.

ColumnB2columnB2column_b2 (input_control) point.x(-array) → (real / integer)HTuple (double / Hlong)HTuple (double / int / long)MaybeSequence[Union[float, int]]Htuple (double / Hlong)

Column coordinate of the second point of the line.

DistanceMindistanceMindistance_min (output_control) real(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Minimum distance between the line segments.

DistanceMaxdistanceMaxdistance_max (output_control) real(-array) → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Maximum distance between the line segments.

Example🔗

(HDevelop)


dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
Row1 := 300
Column1 := 200
Row2 := 100
Column2 := 300
gen_contour_polygon_xld (Line1, [Row1,Row2], [Column1,Column2])
Column := 100
Offset := 30
for Row := 40 to 100 by 20
  gen_contour_polygon_xld (Line2, [Row, Row+Offset], \
                           [Column, Column+Offset])
  distance_ss (Row, Column, Row+Offset, Column+Offset, Row1, Column1, \
               Row2, Column2, DistanceMin, DistanceMax)
  Offset := Offset+50
endfor
(C)
create_tuple(&RowA1, 1)\;
set_i(RowA1, 8, 0)\;
create_tuple(&ColumnA1, 1)\;
set_i(ColumnA1, 7, 0)\;
create_tuple(&RowA2, 1)\;
set_i(RowA2, 15, 0)\;
create_tuple(&ColumnA2, 1)\;
set_i(ColumnA2, 11, 0)\;
create_tuple(&RowB1, 1)\;
set_i(RowB1, 2, 0)\;
create_tuple(&ColumnB1, 1)\;
set_i(ColumnB1, 4, 0)\;
create_tuple(&RowB2, 1)\;
set_i(RowB2, 6, 0)\;
create_tuple(&ColumnB2, 1)\;
set_i(ColumnB2, 10, 0)\;
T_distance_ss(RowA1,ColumnA1,RowA2,ColumnA2,RowB1,ColumnB1,RowB2,ColumnB2,
              &distance_min,&distance_max)\;
aa_min = get_d(distance_min,0)\;
aa_max = get_d(distance_max,0)\;

Result🔗

distance_ssDistanceSs returns 2 (H_MSG_TRUE).

Combinations with other operators🔗

Combinations

Alternatives

distance_ppDistancePp

See also

distance_plDistancePl, distance_psDistancePs

Module🔗

Foundation