Попробуйте опросить координаты Y кривой Безье, но вместо этого получили прямую линию? - PullRequest
0 голосов
/ 25 января 2019

Я хочу получить список значений координат Y по сгенерированному мной пути кривой Безье.

Но все, что я получил, - это прямая линия, что пошло не так?

Вот кодфрагмент:

private static ArrayList<Integer> ys;

path.moveTo(point0.x, point0.y); //the origin, 0,0
path.cubicTo(point1.x, point1.y, point2.x, point2.y, point3.x, point3.y);//nothing wrong with the coordinates of these points as I checked them repeatedly and used several online websites to verify

PathMeasure pm = new PathMeasure(path, false);

float aCoordinates[] = {0f, 0f};

for (int i = 1;i<=totalNumberOfDots;i++) {
    pm.getPosTan(pm.getLength()*(float)i/totalNumberOfDots, aCoordinates, null);
    ys.add(Math.round(aCoordinates[1]));
}

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

1 Ответ

0 голосов
/ 26 января 2019

Таким образом, очевидно, что для использования этого метода cubicPath лучше иметь соотношение оси Y и Y: 1: 1 вместо произвольного.

То есть изобразите сплошной квадрат, в котором каждая сторона имеет одинаковую длину.Зафиксируйте все свои точки P0, P1, P2, P3 по сторонам этого квадрата, чтобы получить кубическую кривую Безье.В конце дня ваша первая и последняя точка (P0 и P3) должна быть либо:

(0,0) (squareLength, squareLength)

или это:

(0, squareLength) (squareLength, 0)

Я настоятельно советую не использовать неравную ось X к Y, это БУДЕТ вам многопроблема в том, что кривая будет выглядеть довольно странно, и в моем случае моя ось Y имеет диапазон от 1 до 1000, в то время как ось X имеет диапазон только от 1 до 50, кривая была настолько растянута, что если вы строите ее, она выглядитпрямая линия

...