В настоящее время я работаю с проектом траекторий снукера. Мне удалось вычислить формулу пересечения кия и шаров.
Я получаю линию для рисования в кадре изображения, но вместо ее рисования от первой точки пересечения (между ключевой линией и внешним кольцом шара) до центра шара, ее рисование наоборот, от центра шара до точки пересечения.
Итак, эта ситуация делает способ, которым мяч должен проецировать движение, неправильное.
Это формула, которую я делаю, когда пересечение происходит
else
{
circleLineIntercept = true;
cout << "intercept happen" << endl;
float mu = (-b + sqrt(b*b - 4 * a*c)) / (2 * a);
//The intersection points = (ix,iy)
//This calculate for first intersection
float ix1 = pt1.x + mu * (dx);
float iy1 = pt1.y + mu * (dy);
//This calculate for second intersection
mu = (-b + sqrt(b*b - 4 * a*c)) / (2 * a);
float ix2 = pt2.x + mu * (dx);
float iy2 = pt2.y + mu * (dy);
Это в основном код для рисования детали ..
В основном я просто получаю точку пересечения и рисую ее в центре шара. Но то, что происходит, это наоборот, линия проходит от центра к перекрестку.
if (flag == true)
{
Point intercept(intx, inty);
Point first_point_intercept(ix1, iy1);
Point second_point_intercept(ix2, iy2);
line(imgFrame,first_point_intercept,center, Scalar(255, 0, 255), 1,8);
}