IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
Triangle3d.h
Go to the documentation of this file.
1 // Triangle3d.h:
3 // -------------
4 //
14 
15 #ifndef __IPSDKMATH_TRIANGLE3D_H__
16 #define __IPSDKMATH_TRIANGLE3D_H__
17 
20 
21 namespace ipsdk {
22 namespace math {
23 
26 
28 IPSDK_FORCEINLINE ipReal64
29 trianglePerimeter(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0,
30  const ipReal64 x1, const ipReal64 y1, const ipReal64 z1,
31  const ipReal64 x2, const ipReal64 y2, const ipReal64 z2)
32 {
33  return distance(x0, y0, z0, x1, y1, z1) +
34  distance(x0, y0, z0, x2, y2, z2) +
35  distance(x1, y1, z1, x2, y2, z2);
36 }
37 
39 IPSDK_FORCEINLINE ipReal64
40 triangleArea(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0,
41  const ipReal64 x1, const ipReal64 y1, const ipReal64 z1,
42  const ipReal64 x2, const ipReal64 y2, const ipReal64 z2)
43 {
44  ipReal64 crossProdX, crossProdY, crossProdZ;
45  crossProduct(x0-x1, y0-y1, z0-z1, x0-x2, y0-y2, z0-z2,
46  crossProdX, crossProdY, crossProdZ);
47 
48  return 0.5 * normL2(crossProdX, crossProdY, crossProdZ);
49 }
50 
53 IPSDK_FORCEINLINE void
54 triangleNormal(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0,
55  const ipReal64 x1, const ipReal64 y1, const ipReal64 z1,
56  const ipReal64 x2, const ipReal64 y2, const ipReal64 z2,
57  ipReal64& nx, ipReal64& ny, ipReal64& nz)
58 {
59  crossProduct(x1-x0, y1-y0, z1-z0,
60  x2-x0, y2-y0, z2-z0,
61  nx, ny, nz);
62 }
63 
67 IPSDK_FORCEINLINE bool
68 triangleUnitNormal(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0,
69  const ipReal64 x1, const ipReal64 y1, const ipReal64 z1,
70  const ipReal64 x2, const ipReal64 y2, const ipReal64 z2,
71  ipReal64& nx, ipReal64& ny, ipReal64& nz)
72 {
73  triangleNormal(x0, y0, z0, x1, y1, z1, x2, y2, z2, nx, ny, nz);
74  const ipReal64 norm = normL2(nx, ny, nz);
75  if (norm != 0) {
76 
77  nx /= norm;
78  ny /= norm;
79  nz /= norm;
80 
81  return true;
82  }
83  else
84  return false;
85 }
86 
89 
90 } // end of namespace math
91 } // end of namespace ipsdk
92 
93 #endif // __IPSDKMATH_TRIANGLE3D_H__
Definition of import/export macro for library.
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
IPSDK_FORCEINLINE bool triangleUnitNormal(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0, const ipReal64 x1, const ipReal64 y1, const ipReal64 z1, const ipReal64 x2, const ipReal64 y2, const ipReal64 z2, ipReal64 &nx, ipReal64 &ny, ipReal64 &nz)
computation of triangle unit normal from its vertives coordinates
Definition: Triangle3d.h:68
IPSDK_FORCEINLINE ipReal64 triangleArea(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0, const ipReal64 x1, const ipReal64 y1, const ipReal64 z1, const ipReal64 x2, const ipReal64 y2, const ipReal64 z2)
computation of triangle area from its vertives coordinates
Definition: Triangle3d.h:40
IPSDK_FORCEINLINE void triangleNormal(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0, const ipReal64 x1, const ipReal64 y1, const ipReal64 z1, const ipReal64 x2, const ipReal64 y2, const ipReal64 z2, ipReal64 &nx, ipReal64 &ny, ipReal64 &nz)
computation of triangle normal from its vertives coordinates
Definition: Triangle3d.h:54
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
IPSDK_FORCEINLINE ipReal64 trianglePerimeter(const ipReal64 x0, const ipReal64 y0, const ipReal64 z0, const ipReal64 x1, const ipReal64 y1, const ipReal64 z1, const ipReal64 x2, const ipReal64 y2, const ipReal64 z2)
computation of triangle perimeter from its vertives coordinates
Definition: Triangle3d.h:29
IPSDK_FORCEINLINE ipReal64 distance(const T x1, const T y1, const T x2, const T y2)
Euclidian distance between 2d points.
Definition: Point2d.h:30
Utility functions used to handle points 3d.
IPSDK_FORCEINLINE void crossProduct(const T x1, const T y1, const T z1, const T x2, const T y2, const T z2, T &xRes, T &yRes, T &zRes)
Cross product of two 3d vectors.
Definition: Vector3d.h:49
IPSDK_FORCEINLINE ipReal64 normL2(const T x, const T y)
L2 norm of a 2d vector.
Definition: Vector2d.h:32