GeneralPath curveTo - PullRequest
       8

GeneralPath curveTo

2 голосов
/ 16 июня 2011

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

MyPoint pointStart = list.get(0);
    path.moveTo(pointStart.getLocationX(), pointStart.getLocationY());
    MyPoint pointEnd = list.get(list.size() - 1);
    for (int i = 1; i < list.size() - 1; i++) {
        MyPoint point = list.get(i);
        if (i % 3 == 0) {
            MyPoint controlPoint1 = list.get(i - 2);
            MyPoint controlPoint2 = list.get(i - 1);
            MyPoint endPoint = point;
            path.curveTo(controlPoint1.getLocationX(), controlPoint1.getLocationY(), controlPoint2.getLocationX(), controlPoint2.getLocationY(), endPoint.getLocationX(), endPoint.getLocationY());
            ((Graphics2D) g).draw(path);
        }
    }
    path.lineTo(pointEnd.getLocationX(), pointEnd.getLocationY());

Ответы [ 2 ]

2 голосов
/ 16 июня 2011

GeneralPath.curveTo() использует кривые Безье , для которых контрольные точки НЕ должны быть частью самой кривой, но здесь для определения перегиба кривой в конечных точках (как видно в кривой, нарисованной на бывшей ссылке в Википедии).

Кажется, вы ищете сплайн-кривую , которая пересекает все указанные точки. К сожалению, этот тип кривой не поддерживается Java2D. Но вы, вероятно, могли бы реализовать это, если у вас есть хорошие знания геометрии (и с помощью Википедии), и вы можете потратить некоторое время.

Другой способ, может быть (хотя я не пробовал), для данной пары точек Pi & Pi + 1 соединиться с кривой, чтобы определить контрольные точки на основе предыдущих и следующих точек Pi-1 и Pi +2; возможно, стоит провести расследование.

1 голос
/ 20 февраля 2013

Этот вопрос несколько рассматривается в следующем посте.Сначала я наткнулся на этот пост, поэтому я добавляю ссылку для всех, кто сюда заходит.

Как создать кривую Безье, чтобы представить сглаженную ломаную линию?* Первый ответ в этом посте дает хорошее объяснение того, как построить «хорошие» контрольные точки Безье.Я использовал аналогичный метод и получил хорошие результаты, то есть плавные кривые.

Также в последнем абзаце предыдущего ответа в основном описывается построение сплайна Безье (одна из многих сплайн-кривых).

...