Создайте круг из 4 узлов и изогнутых краев в prefuse

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

Круг должен состоять из 4 узлов и 4 изогнутых краев. Узлы визуализируются с помощью ShapeRenderer и позиционируются как «+», края с помощью средства рендеринга краев, чтобы изогнуть их. Прямо сейчас у меня проблема, что ребра входят во все узлы по бокам, что нормально для верхнего и нижнего узла, но не работает для левого и правого узла, поскольку они должны входить в узлы сверху и снизу. , и поэтому я получаю не идеальный круг, а скорее что-то яйцевидное.

Кто-нибудь знает, как я могу изменить положение ребер, входящих в узлы, или как повернуть эти узлы на 90 градусов?


person tonicaboni    schedule 27.11.2012    source источник


Ответы (2)


Метод установки контрольных точек в EdgeRenderer выглядит очень просто:

protected void getCurveControlPoints(EdgeItem eitem, Point2D[] cp, 
                double x1, double y1, double x2, double y2) 
{
    double dx = x2-x1, dy = y2-y1;      
    cp[0].setLocation(x1+2*dx/3,y1);
    cp[1].setLocation(x2-dx/8,y2-dy/8);
}

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

Пожалуйста, поделитесь своим решением здесь для других, если это так.

person alex.rind    schedule 30.11.2012
comment
спасибо за ответ, я попробую как можно скорее и дам вам знать, если это сработает - person tonicaboni; 01.12.2012

Хорошо, я пробовал кое-что и придумал следующее:

      protected void getCurveControlPoints(EdgeItem eitem, Point2D[] cp, 
                    double x1, double y1, double x2, double y2) 
    {
        double dx = x2-x1, dy = y2-y1;      
//        cp[0].setLocation(x1+2*dx/3,y1);
//        cp[1].setLocation(x2-dx/8,y2-dy/8);
        cp[0].setLocation(x1+2*dx/3,y1);
        cp[1].setLocation(x2,y2-dy/3);
    }

Это работает для меня, я не уверен, что это идеальный круг, но я не вижу разницы. Я также не очень понимаю, почему это работает, потому что я добавляю 2*dx/3 к x1, а вычитаю только dy/3 из y2. Кто-нибудь знает, почему это работает?

person tonicaboni    schedule 01.12.2012