Commit 9f0eda63 authored by Dongseong Hwang's avatar Dongseong Hwang Committed by Commit Bot

base: Quaternion::ToSting() reports normal vector and theta.

Chromium uses Quaternion for only rotation quaternion, so make it report
rotation info.

For the information, for the given rotation quaternion q,
q = (con(abs(v_theta)/2), v_theta/abs(v_theta) * sin(abs(v_theta)/2))

Change-Id: I11c574d05c621078b3b9a15ad647e9ddfe501828
Reviewed-on: https://chromium-review.googlesource.com/920749
Commit-Queue: Dongseong Hwang <dongseong.hwang@intel.com>
Reviewed-by: default avatarDongseong Hwang <dongseong.hwang@intel.com>
Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553444}
parent ebc10f07
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
#include "base/numerics/math_constants.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "ui/gfx/geometry/vector3d_f.h" #include "ui/gfx/geometry/vector3d_f.h"
...@@ -92,7 +93,14 @@ Quaternion Quaternion::Normalized() const { ...@@ -92,7 +93,14 @@ Quaternion Quaternion::Normalized() const {
} }
std::string Quaternion::ToString() const { std::string Quaternion::ToString() const {
return base::StringPrintf("[%f %f %f %f]", x_, y_, z_, w_); // q = (con(abs(v_theta)/2), v_theta/abs(v_theta) * sin(abs(v_theta)/2))
float abs_theta = acos(w_) * 2;
float scale = 1. / sin(abs_theta * .5);
gfx::Vector3dF v(x_, y_, z_);
v.Scale(scale);
return base::StringPrintf("[%f %f %f %f], v:", x_, y_, z_, w_) +
v.ToString() +
base::StringPrintf(", θ:%fπ", abs_theta / base::kPiFloat);
} }
} // namespace gfx } // namespace gfx
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment