Finding time of collision between a point moving in uniform circular motion and a circle moving linearly

321 Views Asked by At

I am introducing uniform circular motion into my continuous collision detection system.
Given a point moving in uniform circular motion $P =(d \cos (v_a t), d \sin(v_a t))$, I want to find the time of collision with a circle moving in a straight line $C = (x_1 + v_x t, y_1 + v_y t)$.
I tried to plug this information into the distance formula and to get the values of t that would equate the distance with the radius of the circle but it's not really working out.

$$(d \cos (v_a t) - x_1 - v_x t)^2 + (d \sin(v_a t) - y_1 - v_y t)^2 = r^2$$

I was unable to get a solution using Wolfram and I don't have enough knowledge in the subject to really go further given than I can't find anything on Google.
If there's no way to find the appropriate value for $t$ (which should be the first positive one if there's more), then I'd like suggestions on how I could proceed in finding an appropriate way to approximate it or a different approach.
I'll also need to probably do something similar for a point and a segment instead of a circle next.

1

There are 1 best solutions below

0
On BEST ANSWER

Introduction

Given two points in the plane:

$$ P\left(x_P + d\,\cos(\varphi_0 + \omega\,t),\,y_P + d\,\sin(\varphi_0 + \omega\,t)\right), \quad \quad \quad C\left(x_C + v_x\,t,\,y_C + v_y\,t\right) $$

with $d > 0$, by the Pythagorean theorem they are at a distance $r > 0$ when:

$$ \left(x_C + v_x\,t - x_P - d\,\cos(\varphi_0 + \omega\,t)\right)^2 + \left(y_C + v_y\,t - y_P - d\,\sin(\varphi_0 + \omega\,t)\right)^2 = r^2\,. $$

We are interested in calculating the smallest $t \ge 0$ that verifies this equation.


Numerical solve with graphic inspection

By developing the squares and grouping, we have:

$$ a\,t^2 + b\,t + c = \left(x_0 + v_x\,t\right)\cos(\varphi_0 + \omega\,t) + \left(y_0 + v_y\,t\right)\sin(\varphi_0 + \omega\,t) $$

i.e.

$$ \begin{cases} y_1 = a\,t^2 + b\,t + c \\ y_2 = \left(x_0 + v_x\,t\right)\cos(\varphi_0 + \omega\,t) + \left(y_0 + v_y\,t\right)\sin(\varphi_0 + \omega\,t) \\ y_1 = y_2 \end{cases} $$

where the parameters have been defined:

$$ \small x_0 \equiv x_C - x_P\,, \quad y_0 \equiv y_C - y_P\,, \quad a \equiv \frac{v_x^2 + v_y^2}{2\,d}\,, \quad b \equiv \frac{x_0\,v_x + y_0\,v_y}{d}\,, \quad c \equiv \frac{x_0^2 + y_0^2 + d^2 - r^2}{2\,d}\,. $$

In particular, assuming:

$$ x_P = y_P = \varphi_0 = 0\,, \quad x_C = y_C = \omega = 1\,, \quad v_x = v_y = -1\,, \quad d = 3\,, \quad r = 2.5 $$

graphically it's equivalent to identifying the following intersections:

enter image description here

where a numerical approximation of $t = \beta$ can be easily calculated by the Newton-Raphson method. It's clear that in order to automate this method, graphic inspection must be eliminated.


A possible numerical automation

Defined the function $f : \mathbb{R} \to \mathbb{R}$ of law:

$$ f(t) := \left(x_C + v_x\,t - x_P - d\,\cos(\varphi_0 + \omega\,t)\right)^2 + \left(y_C + v_y\,t - y_P - d\,\sin(\varphi_0 + \omega\,t)\right)^2 - r^2 $$

and defined the following temporal parameters respectively:

$$ t_i = 0\,, \quad \quad \quad t_f = \delta t\,, \quad \quad \quad t_{\max} = T $$

while:

$$ f(t_i) \cdot f(t_f) > \epsilon \quad \quad \land \quad \quad t_f < t_{\max} $$

with $\epsilon > 0$ a fixed tolerance, we calculate:

$$ t_i = t_f\,, \quad \quad \quad t_f = t_f + \delta t\,. $$

If $f$ has at least one zero for $0 \le t < T$, a closed and limited interval $\left[t_i,\,t_f\right]$ will be identified.

Since $f$ is continuous in this interval and such that $f(t_i) \cdot f(t_f) < \epsilon$, the Bolzano's theorem ensures the existence of at least one zero and if $\delta t$ is small enough this zero is also unique!

This done, calculated the midpoint of this interval:

$$ t_0 = \frac{t_i + t_f}{2} $$

according to the Newton-Raphson method, while:

$$ \left|\frac{f(t_0)}{f'(t_0)}\right| > \epsilon $$

we calculate:

$$ t_0 = t_0 - \frac{f(t_0)}{f'(t_0)} $$

which according to the previous numerical example gives $t_0 \approx 0.642034$.

It's clear that the greatest difficulty is in identifying the parameters $0 < \delta t < T$, which will be defined on the basis of a careful analysis and after many numerical tests based on one's own numerical needs. If there were more efficient strategies, I am ready to take notes. ^_^