Canvas2D ellipse()规范与实现是否存在错误?
Canvas2D ellipse()函数的startAngle参数规范与实现矛盾问题
我最近在研究只用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并非角度,更不是该点相对于椭圆x轴的角度。尽管有人称其为偏心角(eccentric angle),但这无法改变当前规范描述不准确的事实。
实际上,当我们尝试让椭圆弧从特定角度开始时,结果往往不符合预期,除非该椭圆是圆形(radiusX = radiusY)或者startAngle为PI / 2的整数倍。
我的观点是:这个函数要么按照当前规范中“修正后”的逻辑运行,要么修改规范,将startAngle和endAngle明确描述为参数t,避免称它们为角度——因为它们显然并非角度。
请问有人了解该实现/规范的由来吗?是否有人曾反馈过此问题?若没有,应在何处发起相关讨论?欢迎提供其他见解!
我找到过一个相关问题,但回复仅展示了如何修正该函数,未探讨是否应修正规范或实现,因此并不令人满意。
内容的提问来源于stack exchange,提问作者flupe
相关产品推荐
相关产品推荐

