Найти координату Y вдоль кривой Безье Path.quadTo - PullRequest
1 голос
/ 27 марта 2020

Учитывая значение X (или процент), мне нужно найти координату Y точки вдоль квадратичной c кривой Безье

Кривая является частью линейной диаграммы, нарисованной в android с использованием этой :

Path.quadTo(prev.x, prev.y, (p.x + prev.x)/2, (p.y + prev.y)/2);

1 Ответ

1 голос
/ 28 марта 2020

Формула для кривой Quadrati c Безье:

x = (1 - t) * (1 - t) * p[0].x + 2 * (1 - t) * t * p[1].x + t * t * p[2].x;
y = (1 - t) * (1 - t) * p[0].y + 2 * (1 - t) * t * p[1].y + t * t * p[2].y;

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

Вам придется протестировать на android и посмотреть, надеюсь, это отправит вас на правильный путь.

var c = document.getElementById("c");
var ctx = c.getContext("2d");

function drawCurve(p) {
  ctx.beginPath();
  ctx.bezierCurveTo(p[0].x, p[0].y, p[1].x, p[1].y, p[2].x, p[2].y);
  ctx.stroke();

  ctx.fillStyle = "red";
  for (var i = 0; i < 100; i++) {  
    ctx.beginPath();  
    t = i/100; 
    x = (1 - t) * (1 - t) * p[0].x + 2 * (1 - t) * t * p[1].x + t * t * p[2].x;
    y = (1 - t) * (1 - t) * p[0].y + 2 * (1 - t) * t * p[1].y + t * t * p[2].y;

    ctx.arc(x, y, 1, 0, 2 * Math.PI);
    ctx.fill();
  }
}

drawCurve([
  {x:10, y:120},
  {x:340, y:120},
  {x:340, y:20},
])

drawCurve([
  {x:50, y:10},
  {x:180, y:150},
  {x:240, y:10},
])
<canvas id="c" width="350" height="150"></canvas>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...