(假设表示椭圆轴的两个矢量都是平滑的坐标轴)
如果您有一个径向光线从省略号的中心以角度发出angle,则该光线在点处与椭圆相交
x = x_half_axis * cos(angle);
y = y_half_axis * sin(angle);
Run Code Online (Sandbox Code Playgroud)
在哪里x_half_axis和y_half_axis年龄只是你的半轴向量的长度(大小).
所以,只需选择一些足够小的角度步长delta.在[0...2*Pi]该步骤的整个范围内扫描您的中心点,从0角度,delta角度,2 * delta角度等开始.对于每个angle值,椭圆点的坐标将由上面的公式给出.这样您将生成椭圆的多边形表示.
如果你delta的相对较大(椭圆上的几个点),那么应该仔细选择它以确保你的"椭圆形多边形"很好地关闭:2*Pi应该分成几个delta步骤.虽然delta价值很小,但并不重要.
如果最小 - 最大轴向量与坐标轴不平行,您仍然可以使用上述方法,然后通过应用相应的旋转变换将结果点转换为正确的最终位置.
固定三角形步进虽然有一些缺点.它在椭圆的最小轴(曲率较小)附近产生更密集的多边形点序列,在最大轴附近产生更稀疏的点序列(曲率更大).这实际上与期望的行为相反:在较高曲率的区域中具有较高的点密度是更好的.
如果这对您来说是个问题,那么您可以更新算法以使其使用可变步进.当我们接近最大轴时,角度δ应该逐渐减小,并且当我们接近最小轴时,角度增量应该增加.