algorithm - 计算不准确的三角形顶点位置对三角形边长的潜在影响

标签 algorithm trigonometry

我不确定如何解决以下问题:

我有一个三角形,三个已知的顶点位置 A、B、C 中的每一个都不准确,这意味着它们每个都可以偏离特定的已知半径 rA、rB、rC 到任意方向。

给定这样一个三角形,我想计算三角形的两个特定边长的差异(例如边 a 和边 b 的长度之间的差异)在最坏的情况下可能会改变多少。这个问题有什么优雅的数学解决方案吗?

我想到的天真的方法是计算所有 360^3 角度组合并测量每种情况的边缘差异,这是一个相当高的开销。

最佳答案

下图说明了解决方案:

MinMaxEdgeDiff.png http://www.freeimagehosting.net/uploads/b0f0f84635.png

一些注意事项:

  1. 线段AC1和BC1代表|BC|的最大可能值- |AC|,而 AC2 和 BC2 行表示可能的最小值。在 C1 处,圆的切线必须平分 AC1 和 BC1 所成的角; C2 也是如此。
  2. AC1(当通过虚线延伸时)和 AC2 都通过 A。同样,BC1 和 BC2 通过 B。任何偏离中心的地方,线都会变得最长或最短。
  3. 最大和最小的区别是:

    d1 = |BC1| - |AC1| = (|B->C1| + _rB_) - (|A->C1| - _rA_)
                       = |B->C1| - |A->C1| + (_rA_ + _rB_)
    
    d2 = |BC2| - |AC2| = (|B->C2| - _rB_) - (|A->C2| + _rA_)
                       = |B->C2| - |A->C2| - (_rA_ + _rB_)
    

    因此最大和最小差异之间的变化是:

    d1 - d2 = (|B->C1| - |A->C1|) - (|B->C2| - |A->C2|) + 2*(_rA_ + _rB_)
    

最后一点暗示可以通过从中心 A 和 B 求解,然后添加半径 rArB 来找到解。因此,C1 和 C2 的位置可以通过仅改变围绕 C 的边界圆的单个角度来迭代地发现(并且分开,因为它们彼此独立)。

我怀疑存在解析解。这是一个有趣的问题,但还不足以让我反对这项特定任务。对不起。 ;-)

关于algorithm - 计算不准确的三角形顶点位置对三角形边长的潜在影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2612568/

相关文章:

android - 三角函数值与实际不符

javascript - 用纯 JS 在 Canvas 游戏中移动三 Angular 形船

Python 数学模块毕业

java - 没有分区函数和最坏和最好情况的复杂性的快速排序

java - 如何计算两个 vector 之间的角度?

algorithm - 查找公共(public) block

arrays - 异或交换可以扩展到两个以上的变量吗?

c++ - 汽车在我的游戏 C++ 中不能正确移动

algorithm - 在未排序的只读数据结构中找到没有多余空间的第 n 大元素

c# - 将具有任何编码的任何文本转换为字节数组 C#