Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Аппроксимация движения пальца в кривые Безье

#android #алгоритм


Существуют ли готовые решения для  Android?
Если нет, как лучше реализовать?
    


Ответы

Ответ 1



Да, вы можете отследить точки начала и конца, max и min отклонения и использовать преобразования bezier. В классе Path, есть Квадратичные и Кубические преобразования кривых cubicTo и quadTo Вот простой пример для теста с методом quadTo: public class DrawBezierLine extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new DrawView(this)); } class DrawView extends View { Paint p; public DrawView(Context context) { super(context); p = new Paint(Paint.ANTI_ALIAS_FLAG); p.setStrokeWidth(5); p.setStyle(Paint.Style.STROKE); } @Override protected void onDraw(Canvas canvas) { p.setColor(Color.RED); canvas.drawPath(makeBezierLine(50, 50, 200, 300), p); } } private Path makeBezierLine(float x1, float y1, float x3, float y3) { final Path path = new Path(); path.moveTo(x1, y1); final float x2 = 0; final float y2 = 200; path.quadTo(x2,y2, x3,y3); return path; } } где x1,y1 -начальная точка. x3,y3 - конечная точка, x2,y2 - точка отклонения. Но для вашего примера, больше подойдет кубическое преобразование, очень часто используется в рисовалках. Добавлю: Интерполяторы используют аналогию сложных кривых Безье и могут быть использованы, для решения многих задач. Также никто вам не мешает создать свой алгоритм преобразования, используя свои данные, что может быть актуальней и возможно проще.

Комментариев нет:

Отправить комментарий