gpt4 book ai didi

c++ - 将椭圆转换为折线

转载 作者:太空狗 更新时间:2023-10-29 20:12:38 26 4
gpt4 key购买 nike

我目前有几个省略号。它们由一个中心点定义,然后是两个 vector ,一个指向最小轴,另一个指向最大轴。

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

有没有人知道如何解决这个问题?

谢谢。

最佳答案

(假设代表椭圆轴的两个 vector 与坐标轴平行)

如果您有一条从椭圆中心以 angle 角度发出的径向射线,则该射线与椭圆相交于一点

x = x_half_axis * cos(angle);
y = y_half_axis * sin(angle);

其中 x_half_axisy_half_axis 仅对半轴 vector 的长度(幅值)进行老化。

因此,只需选择足够小的角度步长 delta。在整个 [0...2*Pi] 范围内扫过您的中心点,从 0 角度开始,然后是 delta角度,然后是 2 * delta 角度等等。对于每个 angle 值,椭圆点的坐标将由上述公式给出。这样您将生成椭圆的多边形表示。

如果您的 delta 相对较大(椭圆上有几个点),那么应该仔细选择它以确保您的“椭圆多边形”很好地闭合:2*Pi应该分成整数个 delta 步骤。尽管对于较小的 delta 值,它并不重要。


如果您的最小-最大轴 vector 不平行于坐标轴,您仍然可以使用上述方法,然后通过应用相应的旋转变换将结果点变换到适当的最终位置。


虽然固定增量角步进有一些缺点。它在椭圆的最小轴(曲率较小)附近生成更密集的多边形点序列,并在最大轴(曲率更大)附近生成更稀疏的点序列。这实际上与理想行为相反:在较高曲率的区域具有较高的点密度会更好。

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

关于c++ - 将椭圆转换为折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26386047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com