Distance Between Point and Triangle in 3D

Similar documents
Intersection of a Triangle and a Cone

Intersection of Moving Sphere and Triangle

Intersection of an Oriented Box and a Cone

Extraction of Level Sets from 2D Images

Least-Squares Fitting of Data with B-Spline Curves

Perspective Mappings. Contents

Intersection of Box and Ellipsoid

Level Set Extraction from Gridded 2D and 3D Data

Minimum-Area Rectangle Containing a Set of Points

f xx (x, y) = 6 + 6x f xy (x, y) = 0 f yy (x, y) = y In general, the quantity that we re interested in is

Minimum-Volume Box Containing a Set of Points

Kochanek-Bartels Cubic Splines (TCB Splines)

Tessellation of a Unit Sphere Starting with an Inscribed Convex Triangular Mesh

Math 2 Coordinate Geometry Part 3 Inequalities & Quadratics

Multivariate Calculus Review Problems for Examination Two

Lecture IV Bézier Curves

MATH 890 HOMEWORK 2 DAVID MEREDITH

Mat 241 Homework Set 7 Due Professor David Schultz

Partial Derivatives. Partial Derivatives. Partial Derivatives. Partial Derivatives. Partial Derivatives. Partial Derivatives

CS 410/584, Algorithm Design & Analysis, Lecture Notes 8

Rewrite the equation in the left column into the format in the middle column. The answers are in the third column. 1. y 4y 4x 4 0 y k 4p x h y 2 4 x 0

Clipping a Mesh Against a Plane

Math 7 Glossary Terms

CS 410/584, Algorithm Design & Analysis, Lecture Notes 8!

TOURNAMENT OF THE TOWNS, Glossary

MA 243 Calculus III Fall Assignment 1. Reading assignments are found in James Stewart s Calculus (Early Transcendentals)

Curve Construction via Local Fitting

Computational Geometry

GEOMETRY BASIC GEOMETRICAL IDEAS. 3) A point has no dimensions (length, breadth or thickness).

4 Mathematics Curriculum. Module Overview... i Topic A: Lines and Angles... 4.A.1. Topic B: Angle Measurement... 4.B.1

MAT175 Overview and Sample Problems

COMPUTATIONAL GEOMETRY

Geometric Computations for Simulation

Optimizations and Lagrange Multiplier Method

Lesson 3.6 Overlapping Triangles

In other words, we want to find the domain points that yield the maximum or minimum values (extrema) of the function.

Lifting Transform, Voronoi, Delaunay, Convex Hulls

Practice problems. 1. Given a = 3i 2j and b = 2i + j. Write c = i + j in terms of a and b.

2 Solution of Homework

EXTREME POINTS AND AFFINE EQUIVALENCE

Worksheet A GRAPHS OF FUNCTIONS

Computational Geometry

Go Math 3 rd Grade Meramec Valley R-3 School District. Yearly Plan. 1 Updated 6/24/16

B.Stat / B.Math. Entrance Examination 2017

3.3 Optimizing Functions of Several Variables 3.4 Lagrange Multipliers

Lecture 3.2 Methods for Structured Mesh Generation

Multivariate Calculus: Review Problems for Examination Two

Mrs. Daniel s Geometry Vocab List

Computational Geometry. HKU ACM ICPC Training 2010

= f (a, b) + (hf x + kf y ) (a,b) +

UNM - PNM STATEWIDE MATHEMATICS CONTEST XLI. February 7, 2009 Second Round Three Hours

4751 (C1) Introduction to Advanced Mathematics

Area of Lattice Point Polygons. Andrejs Treibergs. Wednesday, January 16, 2019

Triangulation and Convex Hull. 8th November 2018

3.7. Vertex and tangent

Quadric Surfaces. Six basic types of quadric surfaces: ellipsoid. cone. elliptic paraboloid. hyperboloid of one sheet. hyperboloid of two sheets

? Answer:

Appendix E Calculating Normal Vectors

Analytic Geometry Vocabulary Cards and Word Walls Important Notes for Teachers:

Log1 Contest Round 1 Theta Circles & Polygons. 4 points each. 5 points each

Line Arrangement. Chapter 6

8.6 Three-Dimensional Cartesian Coordinate System

6 Mathematics Curriculum

Parameterization of triangular meshes

Triangle-Free Geometric Intersection Graphs with No Large Independent Sets

4 = 1 which is an ellipse of major axis 2 and minor axis 2. Try the plane z = y2

Constructing a Cycle Basis for a Planar Graph

Total. Math 2130 Practice Final (Spring 2017) (1) (2) (3) (4) (5) (6) (7) (8)

Notes for Recitation 9

Harvard-MIT Mathematics Tournament February 19, 2005

Prime Time (Factors and Multiples)

PURPLE COMET MATH MEET April 2011 HIGH SCHOOL - PROBLEMS. The ratio of 3 to the positive number n is the same as the ratio of n to 192. Find n.

MA 323 Geometric Modelling Course Notes: Day 14 Properties of Bezier Curves

This blog addresses the question: how do we determine the intersection of two circles in the Cartesian plane?

Geometric Algorithms. Geometric search: overview. 1D Range Search. 1D Range Search Implementations

Geometric Constructions

Understanding Geospatial Data Models

Mathematics Curriculum

Triangulation by Ear Clipping

UNC Charlotte 2009 Comprehensive March 9, 2009

Lecture 25: Bezier Subdivision. And he took unto him all these, and divided them in the midst, and laid each piece one against another: Genesis 15:10

Grade 4. Massachusetts Curriculum Framework for Mathematics 42

Glossary of dictionary terms in the AP geometry units

Preparing High School Geometry Teachers to Teach the Common Core

MAT203 OVERVIEW OF CONTENTS AND SAMPLE PROBLEMS

G.CO Reflections and Isosceles

Discrete Mathematics I So Practice Sheet Solutions 1

Computational Geometry

Curves, Tangent Planes, and Differentials ( ) Feb. 26, 2012 (Sun) Lecture 9. Partial Derivatives: Signs on Level Curves, Tangent

Chapter 3. Quadric hypersurfaces. 3.1 Quadric hypersurfaces Denition.

CS3621 Midterm Solution (Fall 2005) 150 points

8.3 Technology: Loci and Conics

9 About Intersection Graphs

Chapter 15: Functions of Several Variables

Topic: Topic 1-Numeration

OpenGL Graphics System. 2D Graphics Primitives. Drawing 2D Graphics Primitives. 2D Graphics Primitives. Mathematical 2D Primitives.

Chapter - 2: Geometry and Line Generations

Chapter 11 Arc Extraction and Segmentation

Unit 13: Periodic Functions and Trig

GENERALISED GEOMETRY

Transcription:

Distance Between Point and Triangle in 3D David Eberly, Geometric Tools, Redmond WA 98052 https://www.geometrictools.com/ This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. Created: September 28, 1999 Last Modified: October 29, 2017 Contents 1 Mathematical Formulation 2 2 The Algorithm 2 3 Implementation 5 1

1 Mathematical Formulation The problem is to compute the minimum distance between a point P and a triangle T(s, t) = B + se 0 + te 1 for (s, t) D = (s, t) : s 0, t 0, s + t 1. The minimum distance is computed by locating the values ( s, t) D so that T( s, t) is the triangle point closest to P. The squared-distance from P to any point T(s, t) on the triangle is the quadratic function Q(s, t) = T(s, t) P 2 = as 2 + 2bst + ct 2 + 2ds + 2et + f (1) for (s, t) D and where a = E 0 E 0, b = E 0 E 1, c = E 1 E 1, d = E 0 (B P), e = E 1 (B P) and f = (B P) (B P). Quadratics are classified by the sign of ac b 2, which for Q(s, t) is ac b 2 = (E 0 E 0 )(E 1 E 1 ) (E 0 E 1 ) 2 = E 0 E 1 2 > 0 (2) The positivity is based on the assumption that the two edges E 0 and E 1 of the triangle are linearly independent, so their cross product is a nonzero vector. Also observe that a 2b + c = E 0 E 0 2E 0 E 1 + E 1 E 1 = E 0 E 1 2 > 0 (3) The goal is to minimize Q(s, t) over D. Because Q is a continuously differentiable function, the minimum occurs either at an interior point of D where the gradient Q = 2(as + bt + d, bs + ct + e) = (0, 0) or at a point on the boundary of D. 2 The Algorithm The gradient of Q is zero only when s = (be cd)/(ac b 2 ) and t = (bd ae)/(ac b 2 ). If ( s, t) D, then we have found the minimum of Q; otherwise, the minimum must occur on the boundary of the triangle. To find the correct boundary, consider the partitioning of the plane shown in Figure 1. Figure 1. Partitioning of the st-plane by triangle domain D. 2

Region 0 is the triangular domain D of Q(s, t). If ( s, t) is in region 0, the point T( s, t) closest to P is interior to the triangle. Suppose ( s, t) is in region 1. The level curves of Q are those curves in the st-plane for which Q is a constant. The level curves are ellipses because the graph of Q is a paraboloid. At the point where Q = (0, 0), the level curve degenerates to a single point ( s, t). The global minimum of Q occurs there, call it V min. As the level values V increase from V min, the corresponding ellipses are increasingly farther away from ( s, t). There is a smallest level value V 0 for which the corresponding ellipse (implicitly defined by Q = V 0 ) just touches the triangle domain edge s + t = 1 at a pair (s 0, t 0 ) where s 0 [0, 1] and t 0 = 1 s 0. For level values V < V 0, the corresponding ellipses do not intersect D. For level values V > V 0, portions of D lie inside the corresponding ellipses. In particular, any points of intersection of such an ellipse with the edge must have a level value V > V 0. Therefore, Q(s, 1 s) > Q(s 0, t 0 ) for s [0, 1] and s s 0. The point (s 0, t 0 ) provides the minimum squared distance between P and the triangle. The triangle point is an edge point. Figure 2 illustrates the idea by showing various level curves. Figure 2. Various level curves Q(s, t) = V. An alternate way of visualizing where the minimum distance point occurs on the boundary is to intersect the graph of Q with the plane s + t = 1. The curve of intersection is a parabola and is the graph of F (s) = Q(s, 1 s) for s [0, 1]. Now the problem has been reduced by one dimension to minimizing a function F (s) for s [0, 1]. The minimum of F (s) occurs either at an interior point of [0, 1], in which case F (s) = 0 at that point, or at an endpoint s = 0 or s = 1. Figure 2 shows the case when the minimum occurs at an interior point. At that point the ellipse is tangent to the line s + t = 1. In the endpoint cases, the ellipse may just touch one of the vertices of D, but not necessarily tangentially. To distinguish between the interior-point and endpoint cases, the same partitioning idea applies in the 1- dimensional case. The interval [0, 1] partitions the real line into three intervals, s < 0, s [0, 1] and s > 1. Let F (ŝ) = 0. If ŝ < 0, then F (s) is an increasing function for s [0, 1]. The minimum restricted to [0, 1] must occur at s = 0, in which case Q attains its minimum at (s, t) = (0, 1). If ŝ > 1, then F (s) is a decreasing function for s [0, 1]. The minimum for F occurs at s = 1 and the minimum for Q occurs at (s, t) = (1, 0). Otherwise, ŝ [0, 1], F attains its minimum at ŝ and Q attains its minimum at (s, t) = (ŝ, 1 ŝ). The occurrence of ( s, t) in region 3 or 5 is handled in the same way as when the global minimum is in region 1. If ( s, t) is in region 3, then the minimum occurs at (0, t 0 ) for some t 0 [0, 1]. If ( s, t) is in region 5, 3

then the minimum occurs at (s 0, 0) for some s 0 [0, 1]. Determining whether the first contact point is at an interior or endpoint of the appropriate interval is handled the same as discussed previously. If ( s, t) is in region 2, it is possible the level curve of Q that provides first contact with the triangle touches either edge s + t = 1 or edge s = 0. Because the global minimum occurs in region 2, the negative of the gradient at the corner (0, 1) cannot point inside D. The geometric intuition for this is the following. There is a level curve of Q that just touches the triangle and for which the region inside the triangle and the region inside the level curve do not overlap. The level curve does one of the following. 1. Touches the edge for which s + t = 1. 2. Touches the corner at (0, 1). 3. Touches the edge for which s = 0. Figure 3 illustrates the three cases. Figure 3. Three ways a level curve with center in region 2 touches the triangle. The left diagram shows the level curve touching the edge s = 0 tangentially. The middle diagram shows the level curve touching the edge at (0, 1) nontangentially. The right diagram shows the level curve touching the edge s + t = 1 tangentially. At any point on the level curve, Q is in the direction towards the inside of the ellipse, which implies it cannot point inside the triangle. To decide which of the these three cases occurs, we can analyze the signs of the directional derivates of Q along the two edges of the triangle sharing vertex (0, 1). 1. For edge s + t = 1, an edge direction pointing away from the vertex is (1, 1)/ 2. The directional derivative at the vertex in this direction is ((1, 1)/ 2) Q(0, 1). If it is negative, the minimum must occur on the edge s+t = 1 at some s > 0. If s < 1, we have the situation illustrated in the left diagram of Figure 3. If s 1, the minimum occurs at the vertex (1, 0) where s = 1. 4

2. For edge s = 0, an edge direction pointing away from the vertex is (0, 1). The directional derivative at the vertex in this direction is (0, 1) Q(0, 1). If it is negative, the minimum must occur on the edge s = 0 at some t. If 0 < t < 1, we have the situation illustrated in the right diagram of Figure 3. If t > 1, the minimum occurs at the vertex (0, 1), which is the situation illustrated in the middle diagram of Figure 3. If t 0, the minimum occurs at the vertex (0, 0). 3. It is not geometrically possible for the two aforementioned directional derivatives to be negative at the same time. This allows an implementation to use a simple if-then-else statement applied to the sign of one of the directional derivatives. It is sufficient to analyze the sign of (1, 1) Q(0, 1) because the normalization of the edge direction does not change the sign. The same type of argument applies in region 6 at the vertex (1, 0). The edge direction for s + t = 1 is ( 1, 1)/ 2 and the directional derivative is (( 1, 1)/ 2) Q(1, 0). The edge direction for t = 0 is ( 1, 0) and the directional derivative if ( 1, 0) Q(1, 0). And the same type of argument applies in region 4 at the vertex (0, 0). The edge direction for t = 0 is (1, 0) and the directional derivative is (1, 0) Q(0, 0). The edge direction for s = 0 is (0, 1) and the directional derivative is (0, 1) Q(0, 0). 3 Implementation The implementation of the algorithm is designed so that at most one floating point division is used when computing the minimum distance and corresponding closest points. Moreover, the division is deferred until it is needed. In some cases no division is needed. Quantities that are used throughout the code are computed first. In particular, the values computed are D = B P, a = E 0 E 0, b = E 0 E 1, c = E 1 E 1, d = E 0 D, e = E 1 D and f = D D. The code actually computes δ = ac b 2 rather than δ = ac b 2 because it is possible for small edge lengths that some floating point round-off errors lead to a small negative quantity for ac b 2. In the theoretical development, we computed s = (be cd)/δ and (bd ae)/δ so that Q( s, t) = (0, 0). The location of the global minimum is then tested to see whether it is in the triangle domain D. If so, then we have already determined what we need to compute the minimum distance. If not, then the boundary of D must be tested. To defer the division by δ, the code instead computes s = be cd and t = bd ae and tests for containment in a scaled domain, s [0, δ], t [0, δ] and s + t δ. If in this set, the divisions are performed. If not, the boundary of the triangle is tested. The general outline of the conditionals for determining which region contains ( s, t) is shown in Listing 1. 5

Listing 1. The general outline for determining which region contains ( s, t). s = b e c d ; t = b d a e ; det = a c b b ; i f ( s + t <= d e t ) i f ( s < 0 ) i f ( t < 0 ) r e g i o n 4 r e g i o n 3 i f ( t < 0 ) r e g i o n 5 r e g i o n 0 i f ( s < 0 ) r e g i o n 2 i f ( t < 0 ) r e g i o n 6 r e g i o n 1 The block of code for handling region 0 is shown in Listing 2. Listing 2. The source code when ( s, t) is in region 0. s /= det ; t /= det ; 6

The block of code for handling region 1 is shown in Listing 3. Listing 3. The source code when ( s, t) is in region 1. The minimum distance must occur on the line s + t = 1. The elliptical level curve touches the line for some real number ŝ. If ŝ 0, the minimum distance occurs at s = 0; if ŝ 1, the minimum distance occurs at s = 1; otherwise, the minimum distance occurs at s = ŝ. // F (s) = Q(s, 1 s) = (a 2b + c)s 2 + 2((b + d) (c + e))s + (c + 2e + f) // F (s)/2 = (a 2b + c)s + ((b + d) (c + e)) // F (ŝ) = 0 when ŝ = ((c + e) (b + d))/(a 2b + c) // a 2b + c > 0, so only the sign of (c + e) (b + d) must be analyzed numer = ( c + e ) ( b + d ) ; i f ( numer <= 0 ) denom = a 2 b + c ; i f ( numer >= denom ) s = 1 ; s = numer / denom ; t = 1 s ; The block of code for handling region 3 is shown in Listing 4. Listing 4. The source code when ( s, t) is in region 3. The minimum distance must occur on the line s = 0. The elliptical level curve touches the line for some real number ˆt. If ˆt 0, the minimum distance occurs at t = 0; if ˆt 1, the minimum distance occurs at t = 1; otherwise, the minimum distance occurs at t = ˆt. // F (t) = Q(0, t) = ct 2 + 2et + f // F (t)/2 = ct + e // F (ˆt) = 0 when ˆt = e/c i f ( e >= 0 ) i f ( e >= c ) t = 1 ; t = e / c ; 7

The block of code for handling region 5 is shown in Listing 5. Listing 5. The source code when ( s, t) is in region 5. The minimum distance must occur on the line t = 0. The elliptical level curve touches the line for some real number ŝ. If ŝ 0, the minimum distance occurs at s = 0; if ŝ 1, the minimum distance occurs at s = 1; otherwise, the minimum distance occurs at s = ŝ. // F (s) = Q(s, 0) = as 2 + 2ds + f // F (s)/2 = at + d // F (ŝ) = 0 when ŝ = d/a i f ( d >= 0 ) i f ( d >= a ) s = 1 ; s = d / a ; 8

The block of code for handling region 2 is shown in Listing 6. Listing 6. The source code when ( s, t) is in region 2. The minimum distance must occur on the line s + t = 1 when (1, 1) Q(0, 1) < 0 and the elliptical level curve touches the line for some real number ŝ > 0. If ŝ 1, the minimum distance occurs at s = 1; otherwise, the minimum distance occurs at s = ŝ. When (0, 1) Q(0, 1) 0, the minimum distance must occur on the line s = 0 with t 1. // Q(s, t)/2 = (as + bt + d, bs + ct + e) // (1, 1) Q(0, 1)/2 = (1, 1) (b + d, c + e) = (b + d) (c + e) // (0, 1) Q(0, 1)/2 = (0, 1) (b + d, c + e) = (c + e) // minimum on edge s + t = 1 if (1, 1) Q(0, 1) < 0; otherwise, minimum on edge s = 0 tmp0 = b + d ; tmp1 = c + e ; i f ( tmp1 > tmp0 ) // minimum on edge s + t = 1 w i t h s > 0 // F (s) = Q(s, 1 s) = (a 2b + c)s 2 + 2((b + d) (c + e))s + (c + 2e + f) // F (s)/2 = (a 2b + c)s + ((b + d) (c + e)) // F (ŝ) = 0 when ŝ = ((c + e) (b + d))/(a 2b + c) // a 2b + c > 0, so only the sign of (c + e) (b + d) must be analyzed numer = tmp1 tmp0 ; denom = a 2 b + c ; i f ( numer >= denom ) s = 1 ; s = numer / denom ; t = 1 s ; // minimum on edge s = 0 w i t h t <= 1 // F (t) = Q(0, t) = ct 2 + 2et + f // F (t)/2 = ct + e // F (ˆt) = 0 when ˆt = e/c i f ( tmp1 <= 0 ) t = 1 ; i f ( e >= 0 ) t = e / c ; 9

The block of code for handling region 6 is shown in Listing 7. Listing 7. The source code when ( s, t) is in region 6. The minimum distance must occur on the line s + t = 1 when ( 1, 1) Q(1, 0) < 0 and the elliptical level curve touches the line for some real number ˆt > 0. If ˆt 1, the minimum distance occurs at t = 1; otherwise, the minimum distance occurs at t = ˆt. When ( 1, 0) Q(1, 0) 0, the minimum distance must occur on the line t = 0 with s 1. // Q(s, t)/2 = (as + bt + d, bs + ct + e) // ( 1, 1) Q(1, 0)/2 = ( 1, 1) (a + d, b + e) = (b + e) (a + d) // ( 1, 0) Q(1, 0)/2 = ( 1, 0) (a + d, b + e) = (a + d) // minimum on edge s + t = 1 if ( 1, 1) Q(1, 0) < 0; otherwise, minimum on edge t = 0 tmp0 = b + e ; tmp1 = a + d ; i f ( tmp1 > tmp0 ) // minimum on edge s + t = 1 w i t h t > 0 // F (t) = Q(1 t, t) = (a 2b + c)t 2 + 2((b + e) (a + d))t + (a + 2d + f) // F (t)/2 = (a 2b + c)t + ((b + e) (a + d)) // F (ˆt) = 0 when ˆt = ((a + d) (b + e))/(a 2b + c) // a 2b + c > 0, so only the sign of (a + d) (b + e) must be analyzed numer = tmp1 tmp0 ; denom = a 2 b + c ; i f ( numer >= denom ) t = 1 ; t = numer / denom ; s = 1 t ; // minimum on edge t = 0 w i t h s <= 1 // F (s) = Q(s, 0) = as 2 + 2ds + f // F (s)/2 = at + d // F (ŝ) = 0 when ŝ = d/a i f ( tmp1 <= 0 ) s = 1 ; i f ( d >= 0 ) s = d / a ; 10

The block of code for handling region 4 is shown in Listing 8. Listing 8. The source code when ( s, t) is in region 4. The minimum distance must occur on the line t = 0 when (1, 0) Q(0, 0) < 0 and the elliptical level curve touches the line for some real number ŝ > 0. If ŝ 1, the minimum distance occurs at s = 1; otherwise, the minimum distance occurs at s = ŝ. When (0, 1) Q(0, 0) 0, the minimum distance must occur on the line s = 0 with t 0. // Q(s, t)/2 = (as + bt + d, bs + ct + e) // (1, 0) Q(0, 0)/2 = (1, 0) (d, e) = d // (0, 1) Q(0, 0)/2 = (0, 1) (d, e) = e // minimum on edge t = 0 if (1, 0) Q(0, 0) < 0; otherwise, minimum on edge s = 0 i f ( d < 0 ) // minimum on edge t = 0 w i t h t > 0 // F (s) = Q(s, 0) = as 2 + 2ds + f // F (s)/2 = at + d // F (ŝ) = 0 when ŝ = d/a i f ( d >= a ) s = 1 ; s = d / a ; // minimum on edge s = 0 // F (t) = Q(0, t) = ct 2 + 2et + f // F (t)/2 = ct + e // F (ˆt) = 0 when ˆt = e/c i f ( e >= 0 ) i f ( e >= c ) t = 1 ; t = e / c ; The direction implementation for the point-triangle distance in 3D is GteDistPointTriangleExact.h. An implementation designed to be more robust to floating-point rounding errors when the triangle edges are nearly parallel is GteDistPointTriangle.h. Both implementations actually allow for a problem formulated in n dimensions; that is, the point and triangle can live in n dimensions for any n 2. 11