Я хочу вычислить точку пересечения линии и многоугольника или двух линий и т. Д. Как рассчитать эту точку с помощью Boost.Geometry?
хотя я никогда не использовал библиотеку наддува в моем университете, нам приходилось делать подобные вычисления на самом базовом движке 2d игры.
Тогда я решил это с помощью векторов, у меня был вектор для положения и один для направления линии, и я рассчитал точку столкновения с другой линией на основе предоставленной информации. (используя atan2, чтобы узнать направление в радианах / градусах)
когда я сделал это с объектом (квадрат), я взял 4 угла объекта и вычислил, была ли позиция линии в данных позициях Y (будучи Y значениями верха и низа квадрата) в пределах области X площадь.
Я в настоящее время на работе, поэтому я не могу дать вам код, который я использовал, но это должно дать вам приблизительное представление о подходе.
я знаю, что это не совсем то, что вы ищете, но это может быть полезно для дальнейшего использования
В случае, если кто-то наткнется на это, как я сделал, как намекнул этот ответ, операция выполняется 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
,