Skip to contents

Typically, the angle between two vectors v1 and v2 can be obtained with:

acos((v1 %*% v2) / (norm(v1, "2") * norm(v2, "2")))

However, this approach is numerically unstable. The version provided here is numerically stable and based on the Angle Between Vectors Julia package by Jeffrey Sarnoff (MIT license), implementing an algorithm provided by Prof. W. Kahan in these notes (see page 15).

Usage

angle_btw(v1, v2)

Arguments

v1

First vector.

v2

Second vector.

Value

Angle between v1 and v2 in radians.

Examples

angle_btw(c(1.0, 1.0, 1.0, 1.0), c(1.0, 0.0, 0.0, 0.0)) * 180 / pi
#> [1] 60