// 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.

#include "cobalt/math/point3_f.h"

#include "base/stringprintf.h"

namespace cobalt {
namespace math {

std::string Point3F::ToString() const {
  return base::StringPrintf("%f,%f,%f", x_, y_, z_);
}

Point3F operator+(const Point3F& lhs, const Vector3dF& rhs) {
  float x = lhs.x() + rhs.x();
  float y = lhs.y() + rhs.y();
  float z = lhs.z() + rhs.z();
  return Point3F(x, y, z);
}

// Subtract a vector from a point, producing a new point offset by the vector's
// inverse.
Point3F operator-(const Point3F& lhs, const Vector3dF& rhs) {
  float x = lhs.x() - rhs.x();
  float y = lhs.y() - rhs.y();
  float z = lhs.z() - rhs.z();
  return Point3F(x, y, z);
}

// Subtract one point from another, producing a vector that represents the
// distances between the two points along each axis.
Vector3dF operator-(const Point3F& lhs, const Point3F& rhs) {
  float x = lhs.x() - rhs.x();
  float y = lhs.y() - rhs.y();
  float z = lhs.z() - rhs.z();
  return Vector3dF(x, y, z);
}

}  // namespace math
}  // namespace cobalt
