Вычислить точку пересечения между линией и многоугольником с помощью Boost.Geometry

Я хочу вычислить точку пересечения линии и многоугольника или двух линий и т. Д. Как рассчитать эту точку с помощью Boost.Geometry?

0

Решение

хотя я никогда не использовал библиотеку наддува в моем университете, нам приходилось делать подобные вычисления на самом базовом движке 2d игры.

Тогда я решил это с помощью векторов, у меня был вектор для положения и один для направления линии, и я рассчитал точку столкновения с другой линией на основе предоставленной информации. (используя atan2, чтобы узнать направление в радианах / градусах)

когда я сделал это с объектом (квадрат), я взял 4 угла объекта и вычислил, была ли позиция линии в данных позициях Y (будучи Y значениями верха и низа квадрата) в пределах области X площадь.

Я в настоящее время на работе, поэтому я не могу дать вам код, который я использовал, но это должно дать вам приблизительное представление о подходе.

я знаю, что это не совсем то, что вы ищете, но это может быть полезно для дальнейшего использования

0

Другие решения

В случае, если кто-то наткнется на это, как я сделал, как намекнул этот ответ, операция выполняется bg::intersection на самом деле зависит от типа объекта, который вы предоставляете в результате.

Давайте определимся

typedef bg::model::d2::point_xy<double> BPoint;
typedef bg::model::multi_point<BPoint> BMultiPoint;
typedef bg::model::multi_linestring<BLineString> BMultiLineString;

затем работает

BMultiPoint mp;
bg::intersection(line, polygon, mp);
bg::intersection(line, other_line, mp);

вернет точки пересечения между polygon и lineзатем между line и other_line,

С другой стороны, обратите внимание, что

BMultiLineString mls;
bg::intersection(line, polygon, mls);

Вернём части line где это совпадает с polygon,

0

По вопросам рекламы [email protected]