1) Представьте линию с помощью уравнения A*x+B*y=C
, так что если она проходит через (x1,y1)
и (x2,y2)
, тогда уравнение будет x*(y2-y1)+y*(x1-x2)=x1*y2-x2*y1
.
2) Расстояние со знаком любой точки(xp,yp)
до линии:
d = (A*xp+B*yp-C)/sqrt(A*A+B*B)
или
d=( yp*(x2-x1)-xp*(y2-y1)+x1*y2-x2*y1 )/sqrt((x2-x1)^2+(y2-y1)^2)
Когда d
переключает знак, то точка только что пересекла линию
3) Для малыхприращение времени Dt
положение точки изменяется на
(Dxp,Dyp)=Dt*(Vx+Omg*(Vy*t-yp),Vy+Omg*(xp-Vx*t))
, где Omg
- это скорость вращения (в вашем случае Omg=Degrees
), (Vx,Vy)
- это средняя скорость (в нашем случае (Velocity,0)
) и t
- время.
4) Найдите расстояние d1
во время t1
и оцените расстояние d2
через некоторое время в t2
.Чтобы сделать нулевое расстояние между временными шагами Dtc
от t1
, проведите линию через две оценки расстояния
d_est = d1 + (d2-d1)*Dtc/(t2-t1)
и решите d_est=0
для Dtc = d1*(t2-t1)/(d1-d2)
.
Конечно, вместо оценки следующей позиции, вы можете сделать шаг и измерить его, а затем вернуться назад во времени к точке пересечения.Несмотря на это, я дал вам инструменты, чтобы решить это численно.