Perception Tool Kit (PTK) API Guide
plane.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2018 Texas Instruments Incorporated
4  *
5  * All rights reserved not granted herein.
6  *
7  * Limited License.
8  *
9  * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10  * license under copyrights and patents it now or hereafter owns or controls to make,
11  * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12  * terms herein. With respect to the foregoing patent license, such license is granted
13  * solely to the extent that any such patent is necessary to Utilize the software alone.
14  * The patent license shall not apply to any combinations which include this software,
15  * other than combinations with devices manufactured by or for TI ("TI Devices").
16  * No hardware patent is licensed hereunder.
17  *
18  * Redistributions must preserve existing copyright notices and reproduce this license
19  * (including the above copyright notice and the disclaimer and (if applicable) source
20  * code license limitations below) in the documentation and/or other materials provided
21  * with the distribution
22  *
23  * Redistribution and use in binary form, without modification, are permitted provided
24  * that the following conditions are met:
25  *
26  * * No reverse engineering, decompilation, or disassembly of this software is
27  * permitted with respect to any software provided in binary form.
28  *
29  * * any redistribution and use are licensed by TI for use only with TI Devices.
30  *
31  * * Nothing shall obligate TI to provide you with source code for the software
32  * licensed and provided to you in object code.
33  *
34  * If software source code is provided to you, modification and redistribution of the
35  * source code are permitted provided that the following conditions are met:
36  *
37  * * any redistribution and use of the source code, including any resulting derivative
38  * works, are licensed by TI for use only with TI Devices.
39  *
40  * * any redistribution and use of any object code compiled from the source code
41  * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42  *
43  * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44  *
45  * may be used to endorse or promote products derived from this software without
46  * specific prior written permission.
47  *
48  * DISCLAIMER.
49  *
50  * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53  * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59  * OF THE POSSIBILITY OF SUCH DAMAGE.
60  *
61  */
62 #pragma once
63 #ifndef PTK_PLANE_H
64 #define PTK_PLANE_H
65 
71 #include <stdint.h>
72 
73 #include <perception/base/point.h>
75 
81 #ifdef __cplusplus
82 extern "C" {
83 #endif
84 
90 typedef struct
91 {
93  float nx;
94 
96  float ny;
97 
99  float nz;
100 
102  float d;
103 
104 } PTK_Plane;
105 
126 int32_t PTK_Plane_set(PTK_Plane *dst, float nx, float ny, float nz, float d);
127 
137 void PTK_Plane_normalize(PTK_Plane *dst, PTK_Plane *src);
138 
152 void PTK_Plane_transform(PTK_Plane *dst, PTK_Plane *src, const PTK_RigidTransform *M_dst_src);
153 
170 float PTK_Plane_dot(const PTK_Plane *plane, const PTK_Point *point);
171 
190 int32_t PTK_Plane_construct(PTK_Plane *plane, PTK_Point *a, PTK_Point *b, PTK_Point *c);
191 
204 void PTK_Plane_projectPoint(PTK_Plane *plane, PTK_Point *proj, PTK_Point *point);
205 
206 #ifdef __cplusplus
207 }
208 #endif
209 
210 #endif
void PTK_Plane_normalize(PTK_Plane *dst, PTK_Plane *src)
Normalize plane parameters so that nx^2+ny^2+nz^2=1.
void PTK_Plane_projectPoint(PTK_Plane *plane, PTK_Point *proj, PTK_Point *point)
Project 3D point onto the plane.
Declarations for PTK_Point and PTK_Vector struct+functions.
float ny
Definition: plane.h:96
float PTK_Plane_dot(const PTK_Plane *plane, const PTK_Point *point)
Dot product between a plane and a 3d point (x,y,z), which is out = x*nx + y*nx + z*nz - d...
int32_t PTK_Plane_set(PTK_Plane *dst, float nx, float ny, float nz, float d)
Set all four values for a point as a convenience function. At least one of nx, ny, nz must be non-zero.
void PTK_Plane_transform(PTK_Plane *dst, PTK_Plane *src, const PTK_RigidTransform *M_dst_src)
Apply the given rigid transformation to represent the plane (given in src reference frame) in dst ref...
float nz
Definition: plane.h:99
Rigid Transform Matrix (single precision).
Definition: rigidTransform.h:85
Definition of a plane.
Definition: plane.h:90
Definition of a point.
Definition: point.h:136
float nx
Definition: plane.h:93
Declaration of structures and functions for rigid transforms.
float d
Definition: plane.h:102
int32_t PTK_Plane_construct(PTK_Plane *plane, PTK_Point *a, PTK_Point *b, PTK_Point *c)
Construct normalized plane from 3 non-colinear points in 3D space by taking cross product...