- Home /

# physics & rotation question

how two perpendicular vectors can have a dot product not equal to 0 in Unity?

Thats my script for a simple Cube, that moves only in 2D:

`void OnCollisionEnter(Collision collision) { ContactPoint contact = collision.contacts[0];`

` `

```
//Calculate reflection Vector3 on collision normal
reflect_direction = Vector3.Reflect(rigidbody.velocity.normalized, contact.normal);
impact_direction = rigidbody.velocity.normalized;
angle = Vector3.Dot(reflect_direction, impact_direction);
```

`} `

Now for example In my on screen display I see values as:

angle == 0,9852035

impact_direction == 0.1, 1.0, 0.0

reflect_direction == -0.1, 1.0, 0.0

How on earth is the dot product close to 1 !?!?!?!

Also what worries me is the fact, that for this example, the ship was flaying with big velocity in the OX axis and the impact_direction shows, that the OY value is bigger ?!?

Any help?

**Answer** by VS48
·
Nov 11, 2010 at 05:13 PM

Well, those vectors are not perpendicular, they are reflected along the X axis.

And their dot product is:

(-0.1*0.1)+(1.0*1.0)+(0.0*0.0) = (-0.01)+(1.0) = 0.99

So to get the angle, you'd have to divide the dot product by the product of the magnitudes of the two vectors. Ex:

```
angle /= (Vector3.Magnitude(reflect_direction) * Vector3.Magnitude(impact_direction));
```

*Edit: Woops, don't forget to take arc-cosine of the above result to get the angle!*

Or, you can just use the Vector3::Angle function:

```
angle = Vector3.Angle(reflect_direction, impact_direction);
```

### Your answer

### Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.