Какая самая лучшая линия SMoothing Algo для android - PullRequest
2 голосов
/ 07 октября 2011

Я хочу сделать более плавную линию, которую я рисую, получая точки касания.Линия - это рисунок, но с углами.Я использую функцию квадрата, чтобы нарисовать кривую, но у кривой иногда есть углы, когда точки находятся близко друг к другу.Что можно сделать, чтобы найти решение этой проблемы?

1 Ответ

1 голос
/ 07 октября 2011

Я специально не отвечал на этот вопрос ранее, потому что вы используете Android API и функцию Quad, и я подумал, что будет способ увеличить нет.точек в кривой Безье Quadratic это рисование.Я сделал гугл и ничего не нашел сам, но я ждал, чтобы кто-нибудь опубликовал трюк с помощью Android API.

Похоже, что плавность должна быть достигнута вручную путем рисования более высокого разрешения БезьеКривая с использованием кода: Quad функция рисует Quadratic Bezier Curve , здесь - это хорошая ссылка для алгоритма рисования кривых Безье, все, что вам нужно сделать, это увеличить значение no.точек на кривой: Формула квадратичной кривой Безье имеет вид: `

[x, y] = (1 - t) 2P0 + 2 (1 - t) tP1 + t2P2

`И вам нужно уменьшить t, чтобы цикл повторялся больше, чтобы было больше точек и вы могли нарисовать более плавную кривую.

Вот код, который интересен(Я немного изменил его, чтобы мне было проще объяснять):

double t = 0;

Point prevPoint = CalculateBezierPoint(t, p0, p1, p2, p3);
for(int i = 0; i <= 100; i++)
{
  Point nextPoint = CalculateBezierPoint(t, p0, p1, p2, p3); //see this part from the link i have given

  //Draw line from previous point to next point.
  prevPoint = nextPoint;
  t = t + (1/100)    
}

Чтобы сделать более плавную кривую, увеличьте количество сегментов в цикле for (1000 и т. Д., Поэкспериментируйте с этим), такжеизмените эту строку t = t + (1/100) (разделите значение на большее число выбранных вами сегментов, i

Используйте это решение в качестве последнего варианта, если вы найдете способ сделать это с помощью Android API, пожалуйста, опубликуйте его здесь какхорошо, и если у кого-то еще есть способ сделать это, пожалуйста, напишите, я жду ответов.

...