Как интерполировать между двумя точками для рисования с более высоким разрешением - PullRequest
0 голосов
/ 16 января 2012

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

Я хочу «сгладить» линию, чтобы добавить больше точек междукаждая точка, которую регистрирует мышь:

Illustration

Черные линии показывают результат, зеленые - то, что я хочу.Красные точки - это действительные точки, а зеленые - интерполированные.

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

var interX:Number = lastMouseX+(lastMouseSpeed.x/2);
var interY:Number = lastMouseY+(lastMouseSpeed.y/2);

//Also tried: lastMouseX+(this.mouseX-lastMouseX)/2;
// also jittery

graphics.lineTo(interX, interY);

graphics.lineTo(this.mouseX, this.mouseY);

lastMouseSpeed.x = this.mouseX-lastMouseX;
lastMouseSpeed.y = this.mouseY-lastMouseY;

lastMouseX = this.mouseX;
lastMouseY = this.mouseY;

результат гораздо более неровный, чем обычный.

Извините, но я не могу сделать скриншоты (по какой-то причине он копирует мой экран как черный)

1 Ответ

2 голосов
/ 16 января 2012

Вы, вероятно, хотите что-то вроде сплайн-интерполяции , хотя возможны и другие подходы.

Причина, по которой ваш текущий подход не работает, состоит в том, что вы хотите сделать для точки между краснымточки 1 и 2 зависят от красной точки 3, но вы не учитываете эти уравнения.Учет этого дает возможность надлежащим образом учитывать кривизну, но это все же более сложно.

...