将椭圆转换为折线

djc*_*476 4 c++ geometry ellipse

我目前有几个省略号.这些由中心点定义,然后是两个矢量,一个指向最小轴,另一个指向最大轴.

但是,对于我正在创建的程序,我需要能够将这些形状作为折线处理.我很确定必须有从我可用的数据中生成一组点的公式,但我不确定如何去做.

有没有人有任何关于如何去做的想法?

谢谢.

AnT*_*AnT 6

(假设表示椭圆轴的两个矢量都是平滑的坐标轴)

如果您有一个径向光线从省略号的中心以角度发出angle,则该光线在点处与椭圆相交

x = x_half_axis * cos(angle);
y = y_half_axis * sin(angle);
Run Code Online (Sandbox Code Playgroud)

在哪里x_half_axisy_half_axis年龄只是你的半轴向量的长度(大小).

所以,只需选择一些足够小的角度步长delta.在[0...2*Pi]该步骤的整个范围内扫描您的中心点,从0角度,delta角度,2 * delta角度等开始.对于每个angle值,椭圆点的坐标将由上面的公式给出.这样您将生成椭圆的多边形表示.

如果你delta的相对较大(椭圆上的几个点),那么应该仔细选择它以确保你的"椭圆形多边形"很好地关闭:2*Pi应该分成几个delta步骤.虽然delta价值很小,但并不重要.


如果最小 - 最大轴向量与坐标轴不平行,您仍然可以使用上述方法,然后通过应用相应的旋转变换将结果点转换为正确的最终位置.


固定三角形步进虽然有一些缺点.它在椭圆的最小轴(曲率较小)附近产生更密集的多边形点序列,在最大轴附近产生更稀疏的点序列(曲率更大).这实际上与期望的行为相反:在较高曲率的区域中具有较高的点密度是更好的.

如果这对您来说是个问题,那么您可以更新算法以使其使用可变步进.当我们接近最大轴时,角度δ应该逐渐减小,并且当我们接近最小轴时,角度增量应该增加.