# frozen_string_literal: true
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/type/quaternion.proto

require 'google/protobuf'


descriptor_data = "\n\x1cgoogle/type/quaternion.proto\x12\x0bgoogle.type\"8\n\nQuaternion\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\x12\t\n\x01z\x18\x03 \x01(\x01\x12\t\n\x01w\x18\x04 \x01(\x01\x42o\n\x0f\x63om.google.typeB\x0fQuaternionProtoP\x01Z@google.golang.org/genproto/googleapis/type/quaternion;quaternion\xf8\x01\x01\xa2\x02\x03GTPb\x06proto3"

pool = Google::Protobuf::DescriptorPool.generated_pool

begin
  pool.add_serialized_file(descriptor_data)
rescue TypeError
  # Compatibility code: will be removed in the next major version.
  require 'google/protobuf/descriptor_pb'
  parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
  parsed.clear_dependency
  serialized = parsed.class.encode(parsed)
  file = pool.add_serialized_file(serialized)
  warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
  imports = [
  ]
  imports.each do |type_name, expected_filename|
    import_file = pool.lookup(type_name).file_descriptor
    if import_file.name != expected_filename
      warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
    end
  end
  warn "Each proto file must use a consistent fully-qualified name."
  warn "This will become an error in the next major version."
end

module Google
  module Type
    Quaternion = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.type.Quaternion").msgclass
  end
end

#### Source proto file: google/type/quaternion.proto ####
#
# // Copyright 2024 Google LLC
# //
# // Licensed under the Apache License, Version 2.0 (the "License");
# // you may not use this file except in compliance with the License.
# // You may obtain a copy of the License at
# //
# //     http://www.apache.org/licenses/LICENSE-2.0
# //
# // Unless required by applicable law or agreed to in writing, software
# // distributed under the License is distributed on an "AS IS" BASIS,
# // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# // See the License for the specific language governing permissions and
# // limitations under the License.
#
# syntax = "proto3";
#
# package google.type;
#
# option cc_enable_arenas = true;
# option go_package = "google.golang.org/genproto/googleapis/type/quaternion;quaternion";
# option java_multiple_files = true;
# option java_outer_classname = "QuaternionProto";
# option java_package = "com.google.type";
# option objc_class_prefix = "GTP";
#
# // A quaternion is defined as the quotient of two directed lines in a
# // three-dimensional space or equivalently as the quotient of two Euclidean
# // vectors (https://en.wikipedia.org/wiki/Quaternion).
# //
# // Quaternions are often used in calculations involving three-dimensional
# // rotations (https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation),
# // as they provide greater mathematical robustness by avoiding the gimbal lock
# // problems that can be encountered when using Euler angles
# // (https://en.wikipedia.org/wiki/Gimbal_lock).
# //
# // Quaternions are generally represented in this form:
# //
# //     w + xi + yj + zk
# //
# // where x, y, z, and w are real numbers, and i, j, and k are three imaginary
# // numbers.
# //
# // Our naming choice `(x, y, z, w)` comes from the desire to avoid confusion for
# // those interested in the geometric properties of the quaternion in the 3D
# // Cartesian space. Other texts often use alternative names or subscripts, such
# // as `(a, b, c, d)`, `(1, i, j, k)`, or `(0, 1, 2, 3)`, which are perhaps
# // better suited for mathematical interpretations.
# //
# // To avoid any confusion, as well as to maintain compatibility with a large
# // number of software libraries, the quaternions represented using the protocol
# // buffer below *must* follow the Hamilton convention, which defines `ij = k`
# // (i.e. a right-handed algebra), and therefore:
# //
# //     i^2 = j^2 = k^2 = ijk = −1
# //     ij = −ji = k
# //     jk = −kj = i
# //     ki = −ik = j
# //
# // Please DO NOT use this to represent quaternions that follow the JPL
# // convention, or any of the other quaternion flavors out there.
# //
# // Definitions:
# //
# //   - Quaternion norm (or magnitude): `sqrt(x^2 + y^2 + z^2 + w^2)`.
# //   - Unit (or normalized) quaternion: a quaternion whose norm is 1.
# //   - Pure quaternion: a quaternion whose scalar component (`w`) is 0.
# //   - Rotation quaternion: a unit quaternion used to represent rotation.
# //   - Orientation quaternion: a unit quaternion used to represent orientation.
# //
# // A quaternion can be normalized by dividing it by its norm. The resulting
# // quaternion maintains the same direction, but has a norm of 1, i.e. it moves
# // on the unit sphere. This is generally necessary for rotation and orientation
# // quaternions, to avoid rounding errors:
# // https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions
# //
# // Note that `(x, y, z, w)` and `(-x, -y, -z, -w)` represent the same rotation,
# // but normalization would be even more useful, e.g. for comparison purposes, if
# // it would produce a unique representation. It is thus recommended that `w` be
# // kept positive, which can be achieved by changing all the signs when `w` is
# // negative.
# //
# message Quaternion {
#   // The x component.
#   double x = 1;
#
#   // The y component.
#   double y = 2;
#
#   // The z component.
#   double z = 3;
#
#   // The scalar component.
#   double w = 4;
# }
