Рисование ломаной дорожки в Android - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать график: 1 / (x Squared - 1)

Как видите, график выглядит красиво: enter image description here

код ниже др aws график выше. Но я не хочу, чтобы вертикальные асимптоты отображались.

path.moveTo(valx, valy);
path.quadTo(x, y, middle2, middle);
path.lineTo(x, y); // I think this is what causes the vertical asymptotes to show
canvas.drawPath(path, points);
path.reset();

Глядя на линию path.lineTo выше, я вижу, что путь соединяет точки с линией. Вот почему рисуются вертикальные асимптоты.

Идея, которую я реализовал, заключается в следующем. В псевдокоде:

//split the x axis into regions and compute a limiting value for each region
Boolean drawMe = false;
//region1: those x values less than the first asymptote = -1
if(Float.compare(x values , first asymptote = -1) < 0 && Float.compare(absolute value of
(Math.abs(x value) - Math.abs(first asymptote) , 0.01f ) > 0)drawMe = true

//region2: those x values between both asymptotes which are -1 and 1:
if(Float.compare(x values , first asymptote) > 0 && Float.compare(x values , second asymptote) < 0
   && Float.compare(absolute value of(Math.abs(x value) - Math.abs(first asymptote) , 0.01f) > 0
   && Float.compare(absolute value of(Math.abs(x value) - Math.abs(second asymptote) , 0.01f) > 0)
   drawMe = true;

//region3: those x values greater than the second asymptote = 1:
if(Float.compare(x values , second asymptote) > 0 && Float.compare(absolute value of(Math.abs(x value) - Math.abs(second asymptote) , 0.01f) > 0 ) drawMe = true;

if(drawMe){
path.moveTo(valx, valy);
path.quadTo(x, y, middle2, middle);
path.lineTo(x, y); // I think this is what causes the vertical asymptotes to show
canvas.drawPath(path, points);
path.reset();
}

Однако, разбивая ось x на области, мы получаем ту же самую вещь снова. Мне нужно найти способ остановить рисование асимптот, и я думаю, что большая проблема заключается в строке кода: path.lineTo

Любые предложения

1 Ответ

0 голосов
/ 25 марта 2020

Решение заключается в следующем:

  • Делить ось x на области в зависимости от того, где вертикальные асимптоты l ie

  • когда точки добавляются к пути, убедитесь, что значение x точки не равно l ie в пределах определенного порога вертикальной асимптоты

  • DONT, не сбрасывает путь, и DONT не рисует путь. Подождите, пока l oop не добавит все точки, кроме тех, которые находятся в пределах определенного порога вертикальной асимптоты.
  • Если эти точки не добавить к пути, путь будет разбит и покажет правильные значения. graph
  • ПОСЛЕ ТОГО, КАК l oop заканчивает добавление точек к пути, рисует путь

    Сначала закройте путь: path.close () ; Тогда: canvas.drawPath (путь, точки);

Лог c был правильным , за исключением того, что я не преобразовывал значения х и вертикальные значения асимптоты, как я сделал для остальных точек. Вот почему путь снова и снова рисовался совершенно одинаково.

Посмотрите на картинки, я даже смог разбить асимптоты:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...