2016-09-02 11 views
0

Я развиваю игру. Пользователь рисует кривую на экране пальцем, затем я получаю пользовательские точки касания.Как нарисовать гладкую кривую между пользовательскими точками?

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

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

Может ли кто-нибудь мне помочь?

здесь добавить picture, чтобы показать, что я имею в виду

+0

[Кривая Безье] (https://en.wikipedia.org/wiki/B%C3%A9zier_curve). Посмотрите, хватит ресурсов. Чтобы переместить или удалить точки, которые «не подходят», это наука сама по себе, требующая довольно много статистического анализа по точкам ... Это, возможно, не стоит проблем на данном этапе. – ppeterka

+0

@ppeterka Спасибо, но это не помогает мне, моя игра должна нарисовать точно сенсорный путь пользователя. – MehDi

+0

Узнайте о [сплайнах] (https://www.particleincell.com/2012/bezier-splines/), который использует набор кривых Безье для соединения множества точек. Если вы начинаете с так много точек, что ваши кривые зазубрены, вы можете пожертвовать несколькими точками и применить [алгоритм упрощения пути] (http://mourner.github.io/simplify-js/). – markE

ответ

0

Как я узнал из Adobe Photoshop и Illustrator, тем больше очков вы добавляете, тем более неровное изображение будет выглядеть. При рисовании вы можете пропустить любую точку или что-то еще. Это может привести к неточным чертежам, если пользователь быстро перемещается, поэтому вы можете проверить, находится ли пропущенная точка близко или далеко.

final int len = pointsX.length, far = 50; 
for (int i = 0; i < len; i++) 
{ 
    if (i % 2 == 0) //If even, draw 
    { 
     //Draw code 
    } 
    else if (Math.abs(pointsX[i] - pointsX[i-1]) > far || Math.abs(pointsY[i] - pointsY[i-1]) > far) 
    { //If the index is odd, check if the distance from the current to the last point is far. 
     //If it is far, draw. If not far, skip the draw, so it doesn't appear as jagged. 
     //Draw code 
    } 
} 
+0

Спасибо, у меня была такая же идея в прошлом, что пропустить одну точку каждого из двух, и у нее не было хорошего результата. Но идея проверки расстояния двух точек, а затем определение скипа или нет, Кажется, это хорошая идея. Я попробую это позже и сообщит результат. Хорошо использовать этот подход рядом с другими решениями :) Еще раз спасибо. (и извините за плохой английский) – MehDi

+0

О нет, это не помогает . Мне действительно нужно изменить зубчатые точки, b ut спасибо в любом случае – MehDi

 Смежные вопросы

  • Нет связанных вопросов^_^