gpt4 book ai didi

c++ - 数值稳定的角平分线算法

转载 作者:行者123 更新时间:2023-11-30 01:40:24 25 4
gpt4 key购买 nike

有没有数值稳定的角平分线算法?

问题如下:

  • 给定三个 vector (二维)A、B、C
  • 找到角 B 的平分线(AB 和 BC 之间的角)

实际上我是按以下方式计算的:

  • 标准化 AB
  • 标准化 BC
  • 求 (AB+CD)/2f(中点)
  • 平分线是 B 和中点之间的直线。

我的方法的问题是,当角度接近 180°(AB 几乎平行于 BC)时,平分线非常不准确(当然是因为中点几乎与 B 重合)。当前的算法非常不准确,有时生成的平分线几乎与其他 2 条线段之一平行。

是的,没有“强制转换”问题,所有计算均以单精度 float 完成。

最佳答案

如果将 BA 旋转 +90° 并将 BC 旋转 -90°,则角平分线保持不变。

所以如果情况稳定,即BA和BC的点积为正,就用原来的公式。

如果它是负数,应用旋转,对于 BA (x,y) -> (-y,x) 和对于 BC (x, y) -> (y,-x),这也使点积为正。像以前一样处理新载体。

如果您尝试这个,您会注意到平分线方向的跳跃现在发生在 vector 之间的角度 -90° 处。避免这种跳跃是不可能的,因为一个连续的平分线只有经过两圈(固定 BA 和移动 C)后才会相同。

关于c++ - 数值稳定的角平分线算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43435055/

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