我尝试了下面的代码,如果矩形的宽度与其高度相同,则会得到一个很好的近似圆;但它并没有画出一个巨大的椭圆形,“角落”非常尖锐。有什么建议吗?
float width = rect.width();
float height = rect.height();
float centerX = rect.width() / 2;
float centerY = rect.height() / 2;
float diameter = Math.min(width, height);
float length = (float) (0.5522847498 * diameter/2);
path.moveTo(0, centerY);
path.cubicTo(0, centerY - length, 0, centerX - length, 0, centerX, 0);
path.cubicTo(centerX + length, 0, width, centerY - length, height, centerY);
path.cubicTo(width, centerY + length, centerX + length, height, centerX, height);
path.cubicTo(centerX - length, height, 0, centerY + length, 0, centerY);
答案 0 :(得分:1)
您应该根据它所在的轴来缩放length
,以便从每个圆弧端点到相邻控制点的距离是(不固定但是)与您平行移动的轴的固定部分那一点。
答案 1 :(得分:0)
如果它是一个真正的矩形,有直角,那么应该很容易。椭圆的长轴和短轴等于矩形边长,椭圆的中心位于矩形对角线的交点处。
我不知道如何表达它,因为Bezier样条曲线偏离我的头顶,但是椭圆的经典方程应该很容易编写,只要你先转换到适当的坐标系(例如x -axis沿矩形/椭圆的长轴,y轴沿矩形/椭圆的短轴)。