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