15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/geometry/vector2d_f.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cmath> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/stringprintf.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string Vector2dF::ToString() const { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::StringPrintf("[%f %f]", x_, y_); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool Vector2dF::IsZero() const { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return x_ == 0 && y_ == 0; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Vector2dF::Add(const Vector2dF& other) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x_ += other.x_; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) y_ += other.y_; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Vector2dF::Subtract(const Vector2dF& other) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x_ -= other.x_; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) y_ -= other.y_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)double Vector2dF::LengthSquared() const { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<double>(x_) * x_ + static_cast<double>(y_) * y_; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)float Vector2dF::Length() const { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<float>(std::sqrt(LengthSquared())); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Vector2dF::Scale(float x_scale, float y_scale) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) x_ *= x_scale; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) y_ *= y_scale; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)double CrossProduct(const Vector2dF& lhs, const Vector2dF& rhs) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<double>(lhs.x()) * rhs.y() - 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<double>(lhs.y()) * rhs.x(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)double DotProduct(const Vector2dF& lhs, const Vector2dF& rhs) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<double>(lhs.x()) * rhs.x() + 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<double>(lhs.y()) * rhs.y(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Vector2dF ScaleVector2d(const Vector2dF& v, float x_scale, float y_scale) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Vector2dF scaled_v(v); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scaled_v.Scale(x_scale, y_scale); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return scaled_v; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 61