Skia
2DGraphicsLibrary
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkPoint3.h
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkPoint3_DEFINED
9 #define SkPoint3_DEFINED
10 
11 #include "SkScalar.h"
12 
13 struct SK_API SkPoint3 {
14  SkScalar fX, fY, fZ;
15 
16  static SkPoint3 Make(SkScalar x, SkScalar y, SkScalar z) {
17  SkPoint3 pt;
18  pt.set(x, y, z);
19  return pt;
20  }
21 
22  SkScalar x() const { return fX; }
23  SkScalar y() const { return fY; }
24  SkScalar z() const { return fZ; }
25 
26  void set(SkScalar x, SkScalar y, SkScalar z) { fX = x; fY = y; fZ = z; }
27 
28  friend bool operator==(const SkPoint3& a, const SkPoint3& b) {
29  return a.fX == b.fX && a.fY == b.fY && a.fZ == b.fZ;
30  }
31 
32  friend bool operator!=(const SkPoint3& a, const SkPoint3& b) {
33  return !(a == b);
34  }
35 
38  static SkScalar Length(SkScalar x, SkScalar y, SkScalar z);
39 
42  SkScalar length() const { return SkPoint3::Length(fX, fY, fZ); }
43 
48  bool normalize();
49 
52  SkPoint3 makeScale(SkScalar scale) const {
53  SkPoint3 p;
54  p.set(scale * fX, scale * fY, scale * fZ);
55  return p;
56  }
57 
60  void scale(SkScalar value) {
61  fX *= value;
62  fY *= value;
63  fZ *= value;
64  }
65 
69  SkPoint3 operator-() const {
70  SkPoint3 neg;
71  neg.fX = -fX;
72  neg.fY = -fY;
73  neg.fZ = -fZ;
74  return neg;
75  }
76 
80  friend SkPoint3 operator-(const SkPoint3& a, const SkPoint3& b) {
81  SkPoint3 v;
82  v.set(a.fX - b.fX, a.fY - b.fY, a.fZ - b.fZ);
83  return v;
84  }
85 
88  friend SkPoint3 operator+(const SkPoint3& a, const SkPoint3& b) {
89  SkPoint3 v;
90  v.set(a.fX + b.fX, a.fY + b.fY, a.fZ + b.fZ);
91  return v;
92  }
93 
96  void operator+=(const SkPoint3& v) {
97  fX += v.fX;
98  fY += v.fY;
99  fZ += v.fZ;
100  }
101 
104  void operator-=(const SkPoint3& v) {
105  fX -= v.fX;
106  fY -= v.fY;
107  fZ -= v.fZ;
108  }
109 
112  static SkScalar DotProduct(const SkPoint3& a, const SkPoint3& b) {
113  return a.fX * b.fX + a.fY * b.fY + a.fZ * b.fZ;
114  }
115 
116  SkScalar dot(const SkPoint3& vec) const {
117  return DotProduct(*this, vec);
118  }
119 };
120 
121 typedef SkPoint3 SkVector3;
122 typedef SkPoint3 SkColor3f;
123 
124 #endif
Definition: SkPoint3.h:13
void scale(SkScalar value)
Scale the point's coordinates by scale.
Definition: SkPoint3.h:60
void operator+=(const SkPoint3 &v)
Add v's coordinates to the point's.
Definition: SkPoint3.h:96
friend SkPoint3 operator-(const SkPoint3 &a, const SkPoint3 &b)
Returns a new point whose coordinates are the difference between a and b (i.e., a - b) ...
Definition: SkPoint3.h:80
static SkScalar Length(SkScalar x, SkScalar y, SkScalar z)
Returns the Euclidian distance from (0,0,0) to (x,y,z)
SkScalar length() const
Return the Euclidian distance from (0,0,0) to the point.
Definition: SkPoint3.h:42
void operator-=(const SkPoint3 &v)
Subtract v's coordinates from the point's.
Definition: SkPoint3.h:104
SkPoint3 operator-() const
Return a new point whose X, Y and Z coordinates are the negative of the original point's.
Definition: SkPoint3.h:69
friend SkPoint3 operator+(const SkPoint3 &a, const SkPoint3 &b)
Returns a new point whose coordinates are the sum of a and b (a + b)
Definition: SkPoint3.h:88
SkPoint3 makeScale(SkScalar scale) const
Return a new point whose X, Y and Z coordinates are scaled.
Definition: SkPoint3.h:52
static SkScalar DotProduct(const SkPoint3 &a, const SkPoint3 &b)
Returns the dot product of a and b, treating them as 3D vectors.
Definition: SkPoint3.h:112