crosstest

by Tim C. Lueth, SG-Lib Toolbox: SolidGeometry 5.6 - Analytical Geometry
Introduced first in SolidGeometry 1.0, Creation date: 2012-05-11, Last change: 2025-09-14

return whether a straight line right from point a crosses a line between pa and pb

Description

USED only in insideC (outdated) and insideCPL(important)
-1: if p is left of line pa to pb
0: if p is on the the line pa to pb
+1: if p is left of line pa to pb OR outside of horizontal line pa pb

See Also: crosstest , crosstest2

Example Illustration

 missing image of crosstest(pa,pb,pc)

Syntax

t=crosstest(pa,pb,pc)

Input Parameter

pa: point to test
pb: start point of line
pc: end point of line

Output Parameter

t: -1==cross; 0== on the line; +1 nothing known

Examples

crosstest ([ 0 0], [5 -5], [5 +5])
crosstest ([10 0], [5 -5], [5 +5])
crosstest ([ 5 0], [5 -5], [5 +5])




Copyright 2012-2025 Tim C. Lueth. All rights reserved. The code is the property of Tim C. Lueth and may not be redistributed or modified without explicit written permission. This software may be used free of charge for academic research and teaching purposes only. Commercial use, redistribution, modification, or reverse engineering is strictly prohibited. Access to source code is restricted and granted only under specific agreements. For licensing inquiries or commercial use, please contact: Tim C. Lueth

Algorithm (Workflow)

This algorithm determines the relative position of a point pa with respect to a line segment defined by points pb and pc. It returns a value indicating whether the point is to the left, on, or to the right of the line segment.

Input Parameters

Output Result

Algorithm Steps

  1. Initialize a threshold thr for rounding stability to 1e-12.
  2. Check if all points pa, pb, and pc are on the same horizontal line (same y-coordinate):
    • If pa is between pb and pc horizontally, return 0.
    • Otherwise, return 1.
  3. Ensure pb is below pc by swapping them if necessary.
  4. Check if pa is outside the vertical bounds of the line segment:
    • If pa is below pb or above pc, return 1.
  5. Calculate the cross product S to determine the relative position of pa:
    • If S is within the threshold, set S to 0 for stability.
    • If S is positive, return 1.
    • If S is negative, return -1.
    • If S is zero, return 0.
Algorithm explaination created using ChatGPT on 2025-08-19 07:11. (Please note: No guarantee for the correctness of this explanation)

Last html export of this page out of FM database by TL: 2025-09-21