Calculate the Tangent Line of a Circle
Given a circle with it's center point \(M\), the radius \(r\) and an angle \(\alpha\) of the radius line, how can one calculate the tangent line on the circle in point \(T\)? The trick is, that the radius line and the tangent line are perpendicular. This means, that their dot-product must be zero.
So, how can this schematic be derived? The intersection point \(T\) is the center point \(M\) plus the radius in the direction of the angle:
\[T = \left(\begin{array}{c} T_x\\ T_y \end{array}\right) = M + r \cdot \left(\begin{array}{c} \sin\alpha\\ \cos\alpha \end{array}\right)\]
Now we need to rotate the vector by 90° in order to get a vector that is perpendicular to the radius line:
\[\vec{v} = \left(\begin{array}{cc} 0 & 1\\ -1 & 0 \end{array}\right) \cdot \vec{MT}\]
Which leads to the line equation:
\[L(s) = T + s \cdot \frac{\vec{v}}{|\vec{v}|}\]
The implementation is therefore also quite simple:
function tangentLine(M, r, alpha) {
T = {
x: M.x + Math.cos(alpha) * r,
y: M.y + Math.sin(alpha) * r
}
v = {
x: T.y - M.y,
y: M.x - T.x
}
norm = Math.hypot(v.x, v.y)
v.x/= norm
v.y/= norm
return [T, v]
}
You might also be interested in the following
- Create a circle out of three points
- Calculate the intersection point of two Lines
- Calculate the intersection points of two Circles
- Calculate the intersection area of two circles
Sorry, comments are closed for this article. Contact me if you want to leave a note.