У меня есть программа для рисования, в которой пользователь может выполнять трассировку пальцем, и, как и в программе FingerPaint , для отображения линий рисуется серия Path
.
Теперь я делаю обнаружение столкновений, чтобы позволить пользователю войти в режим «стирания» и удалить выбранные строки, и пытаюсь определить, как отслеживать отдельные пиксели Path
.По сути, я отслеживаю RectF
, который охватывает Path
, и если RectF
пересекается, когда в режиме стирания, я бы хотел сделать тест пересечения пиксель за пикселем.Итак, мне нужно создать некоторую структуру для хранения пикселей, вероятно, двумерного массива, где каждый элемент будет равен 1 или 0, основываясь на том, занят ли нижележащий пиксель нарисованным Path
.
Это последняя часть, с которой я борюсь.Пока пользователь рисует линию, я передаю переданные значения X / Y в качестве контрольных точек для квадратичной кривой Безье через Path.quadTo()
.Проблема в том, что, хотя Path
использует эти точки для представления непрерывной линии, мне дают только отдельные точки X / Y от сенсорного устройства.По сути, мне нужен способ дублировать то, что делает сам объект Path
, и взять пройденные точки X / Y и интерполировать это в непрерывную кривую, но в виде набора координат X / Y, а не объекта Path
...
Есть какие-нибудь указатели, чтобы начать это?
Спасибо
РЕДАКТИРОВАТЬ / БОЛЬШЕ:
Хорошо, как я уже говорил, каждый Path
создается (примерно) с помощью метода, найденного в FingerPaint , что означает, что это серия сегментов, где каждый сегмент представляет собой квадратичную кривую Безье.Учитывая, что я знаю P0, P1 и P2, когда я добавляю эти изогнутые сегменты к большему пути, я могу определить координаты X / Y вдоль кривой с помощью:
Итак,Моя единственная проблема сейчас заключается в определении «непрерывного» набора смежных координат X / Y, чтобы в этом наборе не было промежутков, через которые мог бы пройти палец пользователя, не ударяя по нему.Это будет означать определение каждой точки X / Y с интервалом в 1 пиксель.Поскольку приведенная выше формула будет давать точки с бесконечным числом интервалов, учитывая значения T в диапазоне от 0 до 1, есть ли идеи, как программно определить правильные значения T, которые будут давать точки с интервалами в 1 пиксель?