• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ui/gfx/vector3d_f.h"
6 
7 #include <cmath>
8 
9 #include "base/strings/stringprintf.h"
10 
11 namespace gfx {
12 
Vector3dF()13 Vector3dF::Vector3dF()
14     : x_(0),
15       y_(0),
16       z_(0) {
17 }
18 
Vector3dF(float x,float y,float z)19 Vector3dF::Vector3dF(float x, float y, float z)
20     : x_(x),
21       y_(y),
22       z_(z) {
23 }
24 
Vector3dF(const Vector2dF & other)25 Vector3dF::Vector3dF(const Vector2dF& other)
26     : x_(other.x()),
27       y_(other.y()),
28       z_(0) {
29 }
30 
ToString() const31 std::string Vector3dF::ToString() const {
32   return base::StringPrintf("[%f %f %f]", x_, y_, z_);
33 }
34 
IsZero() const35 bool Vector3dF::IsZero() const {
36   return x_ == 0 && y_ == 0 && z_ == 0;
37 }
38 
Add(const Vector3dF & other)39 void Vector3dF::Add(const Vector3dF& other) {
40   x_ += other.x_;
41   y_ += other.y_;
42   z_ += other.z_;
43 }
44 
Subtract(const Vector3dF & other)45 void Vector3dF::Subtract(const Vector3dF& other) {
46   x_ -= other.x_;
47   y_ -= other.y_;
48   z_ -= other.z_;
49 }
50 
LengthSquared() const51 double Vector3dF::LengthSquared() const {
52   return static_cast<double>(x_) * x_ + static_cast<double>(y_) * y_ +
53       static_cast<double>(z_) * z_;
54 }
55 
Length() const56 float Vector3dF::Length() const {
57   return static_cast<float>(std::sqrt(LengthSquared()));
58 }
59 
Scale(float x_scale,float y_scale,float z_scale)60 void Vector3dF::Scale(float x_scale, float y_scale, float z_scale) {
61   x_ *= x_scale;
62   y_ *= y_scale;
63   z_ *= z_scale;
64 }
65 
Cross(const Vector3dF & other)66 void Vector3dF::Cross(const Vector3dF& other) {
67   float x = y_ * other.z() - z_ * other.y();
68   float y = z_ * other.x() - x_ * other.z();
69   float z = x_ * other.y() - y_ * other.x();
70   x_ = x;
71   y_ = y;
72   z_ = z;
73 }
74 
DotProduct(const Vector3dF & lhs,const Vector3dF & rhs)75 float DotProduct(const Vector3dF& lhs, const Vector3dF& rhs) {
76   return lhs.x() * rhs.x() + lhs.y() * rhs.y() + lhs.z() * rhs.z();
77 }
78 
ScaleVector3d(const Vector3dF & v,float x_scale,float y_scale,float z_scale)79 Vector3dF ScaleVector3d(const Vector3dF& v,
80                         float x_scale,
81                         float y_scale,
82                         float z_scale) {
83   Vector3dF scaled_v(v);
84   scaled_v.Scale(x_scale, y_scale, z_scale);
85   return scaled_v;
86 }
87 
88 }  // namespace gfx
89