Chromium Code Reviews| Index: ui/gfx/vector3d_f.h |
| diff --git a/ui/gfx/vector3d_f.h b/ui/gfx/vector3d_f.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a2845f89267880e28b4634df450471e30c520402 |
| --- /dev/null |
| +++ b/ui/gfx/vector3d_f.h |
| @@ -0,0 +1,101 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +// Defines a simple float vector class. This class is used to indicate a |
| +// distance in two dimensions between two points. Subtracting two points should |
| +// produce a vector, and adding a vector to a point produces the point at the |
| +// vector's distance from the original point. |
| + |
| +#ifndef UI_GFX_VECTOR3D_F_H_ |
| +#define UI_GFX_VECTOR3D_F_H_ |
| + |
| +#include <string> |
| + |
| +#include "ui/base/ui_export.h" |
| +#include "ui/gfx/vector2d_f.h" |
| + |
| +namespace gfx { |
| + |
| +class UI_EXPORT Vector3dF { |
| + public: |
| + Vector3dF(); |
| + Vector3dF(float x, float y, float z); |
| + |
| + explicit Vector3dF(const Vector2dF& other); |
| + |
| + float x() const { return x_; } |
| + void set_x(float x) { x_ = x; } |
| + |
| + float y() const { return y_; } |
| + void set_y(float y) { y_ = y; } |
| + |
| + float z() const { return z_; } |
| + void set_z(float z) { z_ = z; } |
| + |
| + // True if all components of the vector are 0. |
| + bool IsZero() const; |
| + |
| + // Add the components of the |other| vector to the current vector. |
| + void Add(const Vector3dF& other); |
| + // Subtract the components of the |other| vector from the current vector. |
| + void Subtract(const Vector3dF& other); |
| + |
| + void operator+=(const Vector3dF& other) { Add(other); } |
| + void operator-=(const Vector3dF& other) { Subtract(other); } |
| + |
| + // Gives the square of the diagonal length of the vector. |
| + double LengthSquared() const; |
| + // Gives the diagonal length of the vector. |
| + float Length() const; |
| + |
| + // Scale all components of the vector by |scale|. |
| + void Scale(float scale) { Scale(scale, scale, scale); } |
| + // Scale the each component of the vector by the given scale factors. |
| + void Scale(float x_scale, float y_scale, float z_scale); |
| + |
| + // Take the cross product of this vector with |other| and become the result. |
| + void Cross(const Vector3dF& other); |
| + |
| + std::string ToString() const; |
| + |
| + private: |
| + float x_; |
| + float y_; |
| + float z_; |
| +}; |
| + |
| +inline bool operator==(const Vector3dF& lhs, const Vector3dF& rhs) { |
| + return lhs.x() == rhs.x() && lhs.y() == rhs.y() && lhs.z() == rhs.z(); |
| +} |
| + |
| +inline Vector3dF operator-(const Vector3dF& v) { |
| + return Vector3dF(-v.x(), -v.y(), -v.z()); |
| +} |
| + |
| +inline Vector3dF operator+(const Vector3dF& lhs, const Vector3dF& rhs) { |
| + Vector3dF result = lhs; |
| + result.Add(rhs); |
| + return result; |
| +} |
| + |
| +inline Vector3dF operator-(const Vector3dF& lhs, const Vector3dF& rhs) { |
| + Vector3dF result = lhs; |
| + result.Add(-rhs); |
| + return result; |
| +} |
| + |
| +// Return the cross product of two vectors. |
| +inline Vector3dF CrossProduct(const Vector3dF& lhs, const Vector3dF& rhs) { |
| + Vector3dF result = lhs; |
| + result.Cross(rhs); |
| + return result; |
| +} |
| + |
| +// Return the dot product of two vectors. |
| +UI_EXPORT float DotProduct(const Vector3dF& lhs, const Vector3dF& rhs); |
|
Peter Kasting
2012/11/01 00:24:58
Should we add this for 2D vectors too?
danakj
2012/11/01 00:39:53
We could, but without any call sites?
Peter Kasting
2012/11/01 01:33:28
Just didn't know if you'd need it. If not don't w
danakj
2012/11/01 01:36:23
Ya, only code doing dot products for cc/ at the mo
|
| + |
| + |
| +} // namespace gfx |
| + |
| +#endif // UI_GFX_VECTOR3D_F_H_ |