我正在尝试用多边形制作一个圆圈(我知道我可以使用例如形状渲染器,但我需要这样)。
圆应该由 4 个节点和 4 个弯曲的边缘组成。节点由 ShapeRenderer 渲染并像“+”一样定位,边缘由边缘渲染器弯曲它们。现在我有一个问题,边缘进入侧面的所有节点,这对于顶部和底部节点是可以的,但对于左右节点不起作用,因为它们应该进入顶部和底部的节点,所以我没有得到一个完美的圆圈,而是更多的蛋形。
有谁知道我如何改变边缘进入节点的位置或如何将这个节点旋转 90 度?
我正在尝试用多边形制作一个圆圈(我知道我可以使用例如形状渲染器,但我需要这样)。
圆应该由 4 个节点和 4 个弯曲的边缘组成。节点由 ShapeRenderer 渲染并像“+”一样定位,边缘由边缘渲染器弯曲它们。现在我有一个问题,边缘进入侧面的所有节点,这对于顶部和底部节点是可以的,但对于左右节点不起作用,因为它们应该进入顶部和底部的节点,所以我没有得到一个完美的圆圈,而是更多的蛋形。
有谁知道我如何改变边缘进入节点的位置或如何将这个节点旋转 90 度?
设置控制点的方法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);
}
可能,您必须覆盖它以设置达到您想要的曲线。
如果是这种情况,请在此处分享您的解决方案。
好的,我正在尝试一些东西并想出了以下内容:
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。有人知道为什么会这样吗?