Unity  

Calculating 3D Distance Between Two Points: Enabling Real-Time Collision Avoidance in Autonomous Mining

Table of Contents

  • Introduction

  • What Is 3D Euclidean Distance?

  • The Math Behind the Formula

  • Real-World Scenario: Autonomous Haul Trucks in Underground Mines

  • Efficient Implementation in Python

  • Complete Code with Validation and Edge Cases

  • Best Practices for Safety-Critical Systems

  • Conclusion

Introduction

In a world increasingly driven by automation, knowing the exact distance between two points in 3D space isn’t just academic—it’s a matter of safety, efficiency, and operational continuity. From drones to robots, any system moving in three dimensions relies on precise distance calculations.

This article explains how to compute the 3D distance between two points and demonstrates its critical role in autonomous mining operations, where a single miscalculation could lead to catastrophic collisions deep underground.

What Is 3D Euclidean Distance?

The 3D distance between two points P1​=(x1​,y1​,z1​) and P2​=(x2​,y2​,z2​) is the straight-line length connecting them in three-dimensional space. It’s derived from the Pythagorean theorem extended to three dimensions.

This metric is foundational in robotics, gaming, aerospace, and industrial automation.

The Math Behind the Formula

The Euclidean distance d is calculated as:

2

Simple? Yes. But in real-time systems, numerical stability, performance, and error handling turn this one-liner into mission-critical code.

Real-World Scenario: Autonomous Haul Trucks in Underground Mines

PlantUML Diagram

Modern mining operations deploy driverless haul trucks that navigate narrow, GPS-denied tunnels hundreds of meters underground. Each truck is equipped with LiDAR and inertial sensors that report its 3D position (x,y,z) relative to a fixed mine coordinate system.

A central safety system continuously computes the distance between every pair of nearby vehicles. If two trucks come within 10 meters, the system triggers emergency slowdowns.

Why not 2D? Because mine tunnels have steep inclines, ramps, and vertical shafts—ignoring the z -axis could mistake a truck directly above for one far ahead, causing a false sense of safety.

Accurate 3D distance = no collisions = no downtime = lives protected.

Efficient Implementation in Python

Here’s a robust, production-ready function:

import math
from typing import Tuple

def distance_3d(p1: Tuple[float, float, float], p2: Tuple[float, float, float]) -> float:
    """
    Compute the Euclidean distance between two 3D points.
    
    Args:
        p1, p2: Tuples of (x, y, z) coordinates.
    
    Returns:
        Distance as a non-negative float.
    
    Raises:
        ValueError: If inputs are not 3-element tuples or lists.
    """
    if len(p1) != 3 or len(p2) != 3:
        raise ValueError("Each point must have exactly 3 coordinates (x, y, z).")
    
    dx = p2[0] - p1[0]
    dy = p2[1] - p1[1]
    dz = p2[2] - p1[2]
    
    return math.sqrt(dx*dx + dy*dy + dz*dz)

Complete Code

import math
from typing import Tuple

def distance_3d(p1: Tuple[float, float, float], p2: Tuple[float, float, float]) -> float:
    """
    Compute the Euclidean distance between two 3D points.
    
    Args:
        p1, p2: Tuples of (x, y, z) coordinates.
    
    Returns:
        Distance as a non-negative float.
    
    Raises:
        ValueError: If inputs are not 3-element tuples.
    """
    # Use explicit len() check for robust dimension validation
    if len(p1) != 3 or len(p2) != 3:
        raise ValueError("Each point must have exactly 3 coordinates (x, y, z).")
    
    dx = p2[0] - p1[0]
    dy = p2[1] - p1[1]
    dz = p2[2] - p1[2]
    
    # Efficiently compute the square root of the sum of squares
    return math.sqrt(dx*dx + dy*dy + dz*dz)

# ----------------------------------------------------------------------
# Test Suite
# ----------------------------------------------------------------------

def run_tests():
    """Runs a series of tests to validate the distance_3d function."""
    print("--- Running Validation Tests ---")
    
    # Test 1: Simple axis-aligned points (3, 4, 0) triangle
    d = distance_3d((0, 0, 0), (3, 4, 0))
    assert abs(d - 5.0) < 1e-9
    print(" Test 1: (0,0,0) to (3,4,0) = 5.0")
    
    # Test 2: Full 3D (4-1, 6-2, 8-3) = (3, 4, 5) triangle
    d = distance_3d((1, 2, 3), (4, 6, 8))
    expected = math.sqrt(3**2 + 4**2 + 5**2)  # sqrt(50) ≈ 7.071
    assert abs(d - expected) < 1e-9
    print(f" Test 2: Full 3D distance ≈ {d:.3f}")
    
    # Test 3: Same point
    d = distance_3d((5.5, -2.1, 10), (5.5, -2.1, 10))
    assert d == 0.0
    print(" Test 3: Identical points → distance = 0.0")
    
    # Test 4: Negative coordinates
    d = distance_3d((-1, -1, -1), (1, 1, 1)) # dx=2, dy=2, dz=2. sqrt(4+4+4) = sqrt(12)
    assert abs(d - math.sqrt(12)) < 1e-9
    print(" Test 4: Negative coordinates handled correctly")
    
    # Test 5: Invalid input dimension
    try:
        distance_3d((0, 0), (1, 1, 1)) # p1 has 2 elements
        # If the above line runs without error, the assert fails:
        assert False, "Should have raised ValueError"
    except ValueError:
        print(" Test 5: Caught invalid input (2D point in 3D function)")
    
    print("\n--- All tests passed! ---")
    
    # Real-world example from prompt
    truck_a = (120.5, -45.2, -320.0)  
    truck_b = (125.0, -43.8, -319.5)
    dist = distance_3d(truck_a, truck_b)
    print(f"\n  Alert: Truck A and B are {dist:.2f} meters apart.")
    if dist < 10.0:
        print(" Emergency slowdown triggered!")
    else:
        print(" Safe operating distance maintained.")
        
# ----------------------------------------------------------------------
# Interactive Mode
# ----------------------------------------------------------------------

def get_point_input(prompt: str) -> Tuple[float, float, float]:
    """Helper function to safely get three float coordinates from the user."""
    while True:
        try:
            # Prompt user for input
            input_str = input(f"{prompt} (e.g., 1.0, -2.5, 30): ").strip()
            
            # Split and convert to floats
            coords = [float(c.strip()) for c in input_str.split(',')]
            
            # Validate dimension
            if len(coords) != 3:
                print(" Error: You must enter exactly 3 coordinates (x, y, z).")
                continue
                
            return tuple(coords)
            
        except ValueError:
            print(" Error: Invalid input. Please ensure all coordinates are valid numbers.")

def interactive_mode():
    """Allows the user to input two 3D points and computes their distance."""
    print("\n\n--- Interactive 3D Distance Calculator ---")
    print("This tool computes the Euclidean distance between two points P1 and P2.")
    
    try:
        # Get input for P1
        p1 = get_point_input("Enter coordinates for Point P1")
        
        # Get input for P2
        p2 = get_point_input("Enter coordinates for Point P2")
        
        # Calculate distance
        dist = distance_3d(p1, p2)
        
        print("\n **Calculation Result** ")
        print(f"P1: {p1}")
        print(f"P2: {p2}")
        print(f"The distance between P1 and P2 is: **{dist:.4f}**")
        
    except Exception as e:
        print(f"\n An unexpected error occurred: {e}")

if __name__ == "__main__":
    # Run tests first to ensure the core function is working
    run_tests()
    
    # Then run the interactive mode
    interactive_mode()

Output

1

Best Practices for Safety-Critical Systems

  • Validate inputs rigorously—garbage in = disaster out.

  • Use math.sqrt, not exponentiation, for better performance and precision.

  • Avoid square roots when only comparing distances (use squared distance to save CPU).

  • Log distances with units (e.g., meters) to prevent unit confusion.

  • Add tolerance thresholds for floating-point comparisons in alerts.

  • Integrate with heartbeat monitoring—if distance stops updating, assume sensor failure.

For high-performance needs, consider numpy.linalg.norm, but for embedded or safety-critical systems, pure Python with validation is often preferred for determinism.

Conclusion

The 3D distance formula may look simple, but in autonomous mining—where vehicles weigh 200+ tons and operate in pitch-black tunnels—it’s the invisible guardian preventing billion-dollar accidents. By implementing this calculation with care, validation, and real-world context, you transform a textbook equation into a lifesaving tool. Whether you’re building robots, VR experiences, or mine safety systems, remember: in 3D space, every meter counts.