<p>A rigid body has 6 degrees of freedom, in 3D- space. So that means you need 6 values to represent the object. The common way to do this is to store a position vector for position and 3 rotations. But for obvious reasons any 6 variables that are independent of each other would do this.  </p>

<p>The problem with vectors is that they aren't the most efficient way to store the data. If you have a vector for origin and a normal you still need one value for the rotation around the normal resulting in seven variables (this is called an axis angle rotation). Two reference points on object has same problem since you dont know the rotation around the axis of point 1 and point 2 leading to 7 variables.</p>

<p><a href="https://i.sstatic.net/UkkSi.png" rel="noreferrer"><img src="https://i.sstatic.net/UkkSi.png" alt="enter image description here"></a></p>

<p><strong>Image 1</strong>: Storing vectors of 2 points has a freedom to rotate along the axis of those the vectors </p>

<p>Now storing extra values can be beneficial for other purposes than position and orientation. So it is quite common to store 7 values for solid bodies. This way it is easier to interpolate so that you dont need to convert between representations all the time.</p>

CC BY-SA 3.0
2017-06-10T16:18:04.190Z
Very interesting. Now one question that I have is how does the transformation matrices look like (both for translation and rotation)? A matrix that if applied to all the origin points will give me the new object.
angel_30
CC BY-SA 3.0
2017-06-11T00:17:59.123Z
That could be the beginning of a new question... We also have many questions tagged [transformations](https://computergraphics.stackexchange.com/questions/tagged/transformations)
trichoplax is on Codidact now
CC BY-SA 3.0
2017-06-12T19:00:53.457Z
@trichoplax ok. My new question is posted here: https://computergraphics.stackexchange.com/questions/5230
angel_30
CC BY-SA 3.0
2017-06-10T10:28:12.517Z
2017-06-10T11:39:07.803Z
2017-06-10T11:39:07.803Z
joojaa
<p>You need a position, and an orientation.</p>

<p>Positions are easy, obviously -- just 3 coordinates.</p>

<p>There are <strong>many</strong> different ways to represent an orientation: start reading <a href="https://en.wikipedia.org/wiki/Rotation_matrix" rel="nofollow noreferrer">here</a>, or <a href="https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions" rel="nofollow noreferrer">here</a>. The common ones are rotation matrices, quaternions, and Euler angles.</p>

<p>In theory, an orientation has only 3 degrees of freedom, so you ought to be able to represent it with three numbers. But representations that use 3 numbers inevitably have discontinuities or singularities (like "<a href="https://en.wikipedia.org/wiki/Gimbal_lock" rel="nofollow noreferrer">gimbal lock</a>"), so using 4 numbers (e.g. a quaternion) is more practical.</p>

CC BY-SA 3.0
2017-07-12T13:44:37.653Z
You dont actually need a rotation at all, it is practical but not needed. Also singularities in euler angles is only a problem if you intend to interpolate stuff.
joojaa
CC BY-SA 3.0
2017-07-13T00:26:26.117Z
Apparently we have different understandings of the word "rotation". So I changed to use "orientation", instead. Clearly you **do** need an orientation if you want to orient objects in 3D.
bubba
CC BY-SA 3.0
2017-07-12T13:01:46.553Z
2017-07-13T00:20:52.597Z
2017-07-13T00:20:52.597Z
bubba
<p>Let's assume we have a 3D object (in 3D space). We get a single representation vertex from this whole 3D object. Given the fact that the object can be moved and rotated in the space in any direction, what are the minimum set of other information to add to uniquely identify the object's direction and translation in space?</p>

<p>For instance lets consider this 3D object. If we have one single point as a reference, we can construct the whole object (the spatial dependency of other points/vertices are known). The single point can infer the movement. But the object can also rotate in any axis. I was initially thinking with a single normal vector added we can infer the object in space. But looks like we need at least two vectors (am I right?) because the object can also rotate around the normal vector. If we have another vector (maybe orthogonal to the first one), we can infer the whole 3D location. With that we can infer the degree of rotation around the normal axis. Is this right?</p>

<p>Another alternative can be to store 3 reference points. Right?</p>

<p><a href="https://i.sstatic.net/73jq5.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/73jq5.png" alt="enter image description here"></a></p>

CC BY-SA 3.0
2017-06-10T04:54:02.550Z
What if there's rotation around a different axis than the normal?
user1118321
CC BY-SA 3.0
2017-06-10T16:11:26.143Z
The normal changes then.
angel_30
<3d><transformations><computational-geometry><normal-mapping><mapping>
Minimum requirements to uniquely represent a 3D object in space
angel_30
# Minimum requirements to uniquely represent a 3D object in space

(Asked by: username_0 on 2017-06-09)

Let's assume we have a 3D object (in 3D space). We get a single representation vertex from this whole 3D object. Given the fact that the object can be moved and rotated in the space in any direction, what are the minimum set of other information to add to uniquely identify the object's direction and translation in space?

For instance lets consider this 3D object. If we have one single point as a reference, we can construct the whole object (the spatial dependency of other points/vertices are known). The single point can infer the movement. But the object can also rotate in any axis. I was initially thinking with a single normal vector added we can infer the object in space. But looks like we need at least two vectors (am I right?) because the object can also rotate around the normal vector. If we have another vector (maybe orthogonal to the first one), we can infer the whole 3D location. With that we can infer the degree of rotation around the normal axis. Is this right?

Another alternative can be to store 3 reference points. Right?

[![enter image description here](https://i.sstatic.net/73jq5.png)](https://i.sstatic.net/73jq5.png)

**Tags:** 3d, transformations, computational-geometry, normal-mapping, mapping

> **Comments:**
> **username_1**: What if there's rotation around a different axis than the normal?  
> **username_0**: The normal changes then.  

---

## 2 answers

### Answer by username_2 on 2017-06-10. Score: 6 | Accepted answer

A rigid body has 6 degrees of freedom, in 3D- space. So that means you need 6 values to represent the object. The common way to do this is to store a position vector for position and 3 rotations. But for obvious reasons any 6 variables that are independent of each other would do this.

The problem with vectors is that they aren't the most efficient way to store the data. If you have a vector for origin and a normal you still need one value for the rotation around the normal resulting in seven variables (this is called an axis angle rotation). Two reference points on object has same problem since you dont know the rotation around the axis of point 1 and point 2 leading to 7 variables.

[![enter image description here](https://i.sstatic.net/UkkSi.png)](https://i.sstatic.net/UkkSi.png)

**Image 1**: Storing vectors of 2 points has a freedom to rotate along the axis of those the vectors

Now storing extra values can be beneficial for other purposes than position and orientation. So it is quite common to store 7 values for solid bodies. This way it is easier to interpolate so that you dont need to convert between representations all the time.

> **Comments:**
> **username_0**: Very interesting. Now one question that I have is how does the transformation matrices look like (both for translation and rotation)? A matrix that if applied to all the origin points will give me the new object.  
> **username_3**: That could be the beginning of a new question... We also have many questions tagged [transformations](https://computergraphics.stackexchange.com/questions/tagged/transformations)  
> **username_0**: @username_3 ok. My new question is posted here: https://computergraphics.stackexchange.com/questions/5230  

---

### Answer by username_4 on 2017-07-12. Score: 0

You need a position, and an orientation.

Positions are easy, obviously -- just 3 coordinates.

There are **many** different ways to represent an orientation: start reading [here](https://en.wikipedia.org/wiki/Rotation_matrix), or [here](https://en.wikipedia.org/wiki/Rotation_formalisms_in_three_dimensions). The common ones are rotation matrices, quaternions, and Euler angles.

In theory, an orientation has only 3 degrees of freedom, so you ought to be able to represent it with three numbers. But representations that use 3 numbers inevitably have discontinuities or singularities (like "[gimbal lock](https://en.wikipedia.org/wiki/Gimbal_lock)"), so using 4 numbers (e.g. a quaternion) is more practical.

> **Comments:**
> **username_2**: You dont actually need a rotation at all, it is practical but not needed. Also singularities in euler angles is only a problem if you intend to interpolate stuff.  
> **username_4**: Apparently we have different understandings of the word "rotation". So I changed to use "orientation", instead. Clearly you **do** need an orientation if you want to orient objects in 3D.  

---

