Ris*_*Ris 4 java bezier javafx ellipse openjfx
我正在关注OpenJFX 的源代码。唯一PathIterator支持SEG_LINETO, SEG_QUADTO, SEG_CUBICTO,即直线和二次/三次 B\xc3\xa9zier 曲线。ArcIterator并EllipseIterator返回SEG_CUBICTO,这意味着它将使用三次 B\xc3\xa9zier 曲线段。由于三次 B\xc3\xa9zier 曲线无法准确表示椭圆,因此我认为 Javafx 椭圆和弧不是真实的,而是实际上的近似值。这是正确的吗?
ArcIteratpr和EllipseIterator都迭代(真正的)椭圆并产生(一个或多个的序列)三次 B\xc3\xa9zier 曲线,近似所讨论的弧/椭圆。
\n所以不,当出于路径目的迭代它们时,您没有使用“真正的”弧和椭圆,但Arc2D和Ellipse2D类本身是 100% 真实的弧和椭圆定义。您获得 B\xc3\xa9ziers 的唯一时间是当它们被转换时“因为这样做是安全的”:当您执行诸如将它们绘制到屏幕上之类的操作时,不需要精确的表示。它们只需要在子像素级别上准确即可实现适当的抗锯齿功能。
那么:是吗?椭圆迭代器使用四个立方 B\xc3\xa9ziers,这是行业标准,因为它的精确度很高,而且构造起来很简单,那么它与真实椭圆有多接近呢?那么,对于单位椭圆(即半径为 1 的圆),单个立方体与四分之一真椭圆之间的最大误差为 0.00027为 0.00027 。直观地说,对于最宽处为 20,000 像素的椭圆来说,最多相差 2.7 像素。或者,换句话说:对于最宽处为 5,000 像素的椭圆来说,它的亚像素精度足够准确,即使在 300dpi 屏幕上,椭圆的形状也会如此之大,甚至不适合物理尺寸。具有这种分辨率的设备的尺寸。
\n你永远不会注意到这种差异。所以:不,三次 B\xc3\xa9zier 曲线不能完美地表示椭圆,但可以足够准确地表示它们,以至于与真实的东西没有区别。
\n