Один из довольно простых способов сделать это - представить эллипс и вектор в их декартовых формах
x ^ 2 / a ^ 2 + y ^ 2 / b ^ 2 = 1, гдеa & b - длины большой (половинной ширины) и малой (половинной высоты) осей, а центр эллипса предполагается равным (0,0)
и
y - ypos = m (x - xpos), где xpos и ypos - положение вашего вектора, а m - наклон, косинус угла (направления), который он составляет с xось.
Решите их вместе, чтобы получить перехват, и используйте Пифагор для вычисления расстояния.
Предполагается, что центр эллипса находится в точке (0,0), а осипараллельны осям координат x и y. Если это не так, то вам понадобится более общее уравнение для эллипса, которое подробно обсуждается здесь, в Википедии .
Как указывает Вирдан в своем комментарии, вы можете получить 0, 1 или 2 решения.
0, если вектор начинается вне эллипса и полностью его пропускает.
1, если вектор является касательным к эллипсу.
2, есливектор либо проходит через эллипс, либо его начальная точка находится внутри эллипса.
В случае 2 решений допустимы значения 0,1 или 2
Если направление вектора направлено отэллипс, тогда решения для обратного вектора, тот, который указывает на 180 градусов в противоположном направлении. Это может также относиться к касательному решению. Таким образом, решение (решения) недопустимо по вашим критериям.
Если начальная точка находится внутри эллипса, то одно решение будет для результата, которого вы хотите, а другое - для обратного вектора. Таким образом, будет действительным только одно решение.
Если вектор проходит через эллипс, тогда оба решения действительны, ваш выбор, если вы игнорируете самое дальнее.