Здравствуйте, Аноним, Вы писали:
А>Как определить, попадает ли в прямоугольник незамкнутая кривая Безье (неважно полностью или частично)?
GDI+ тут не причем. Нужно искать общее геометрическое место точек, для этого нужно знать уравнение кривой. Поскольку это полиномиальная кривая Безье, то уравнения в чистом виде для нее нет — только для кусков между узлами. Т.е. для каждого куска между соседними узлами ищите пересечение области значений точек прямоугольника и точек данного куска кривой.
Re: GDI+ пересечение незамкнутой кривой и прямоугольника
Здравствуйте, oleksa_ak, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
А>>Как определить, попадает ли в прямоугольник незамкнутая кривая Безье (неважно полностью или частично)?
_>геометрической место точек кривой безье полностью содержится внутри описанного вокруг узлов многоугольника.
верно, в качестве быстрого решения вполне пойдет. если не нужна попиксельная точность...
Re[3]: GDI+ пересечение незамкнутой кривой и прямоугольника
Здравствуйте, 23W, Вы писали:
_>>геометрической место точек кривой безье полностью содержится внутри описанного вокруг узлов многоугольника. 23W>верно, в качестве быстрого решения вполне пойдет. если не нужна попиксельная точность...
Да и в качестве почти точного решения можно подобный подход использовать.
Например, если описанный многоугольник не пересекается с нужным прямоугольником, то отвечаем однозначно нет. Если опорная точка в начале или в конце кривой попала внутрь нужного прямоугольника, то отвечаем однозначно да. Если оба условия не выполняются, то с использованием алгоритма де Кастельжо разбиваем исходную кривую на части и рекурсивно проверяем их.
Тут как раз можно, ограничивая максимальную глубину рекурсии, очень легко регулировать соотношение между скоростью работы и точностью полученного ответа.
Re: GDI+ пересечение незамкнутой кривой и прямоугольника
Здравствуйте, Аноним, Вы писали:
А>Как определить, попадает ли в прямоугольник незамкнутая кривая Безье (неважно полностью или частично)?
Если свет клином на GDI+ не сошелся, то по идее можно Direct2D для этого использовать. В частности см. ID2D1Geometry::CompareWithGeometry