我一直在研究如何仅使用 canvas2d 和椭圆数学来渲染线框透视正确的球体。 这很有趣,但我很快意识到
ellipse()
函数在规范方面有一个非常奇怪的实现。
事实上,
ellipse
函数需要 7(或 8)个参数:
ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle)
startAngle
是这样描述的:
椭圆开始的角度,从正 x 轴顺时针测量并以弧度表示。
给定一个参数
0 <= t <= 2 * PI
,我们可以像这样计算椭圆上关联点的位置:
let dx = radiusX * cos(t)
let dy = radiusY * sin(t)
let px = x + dx * cos(rotation) - dy * sin(rotation)
let py = y + dx * sin(rotation) + dy * cos(rotation)
如果我们使用
startAngle = t
,我们的椭圆将在我们的点开始它的弧线。但。 但是。 t
是 NOT 角度,绝对不是我们点与椭圆 x 轴的角度。显然有些人仍然称之为偏心角,但我的观点仍然成立。
事实上,如果我们尝试使椭圆的弧从特定的angle开始,我们可以看到结果是not我们期望的,除非椭圆是圆(
radiusX = radiusY
)或startAngle
是 PI / 2
的倍数。
我的主张是函数 应该总是 表现得像它在 corrected case with the current specification.
要么那样,要么改变规范来讨论
t
和 startAngle
的参数 endAngle
,并且 避免 说它们是角度,因为目前它们肯定不是。
有谁知道这个实现/规范是怎么来的,如果之前有人报告过这个,如果没有,在哪里进行这样的讨论? 任何其他见解表示赞赏!
我发现了这个related question但它并不令人满意,因为回复仅显示how来纠正功能,但不讨论规范或实现是否应该更正。