【问题标题】:Create circle out of 4 nodes and curved edges in prefuse在 prefuse 中创建 4 个节点和弯曲边缘的圆
【发布时间】:2012-11-27 22:26:55
【问题描述】:

我正在尝试用多边形制作一个圆圈(我知道我可以使用例如形状渲染器,但我需要这样)。

圆应该由 4 个节点和 4 个弯曲的边缘组成。节点由 ShapeRenderer 渲染并定位为“+”,边缘由边缘渲染器弯曲它们。现在我有一个问题,边缘进入侧面的所有节点,这对于顶部和底部节点是可以的,但对于左右节点不起作用,因为它们应该进入顶部和底部的节点,所以我没有得到一个完美的圆圈,而是更多的蛋形。

有人知道如何更改边缘进入节点的位置或如何将这些节点旋转 90 度吗?

【问题讨论】:

    标签: prefuse


    【解决方案1】:

    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);
    }
    

    可能,你必须重写它来设置你想要的曲线。

    如果是这种情况,请在此处分享您的解决方案。

    【讨论】:

    • 感谢您的回答,我会尽快尝试并告诉您是否有效
    【解决方案2】:

    好的,我正在尝试一些东西并想出了以下内容:

          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,但仅从 y2 中减去 dy/3。有人知道为什么会这样吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多