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

4
我不确定如何解决以下问题:
我有一个三角形,其中每个已知顶点位置A、B、C都不准确,这意味着它们可以朝任意方向偏离一定的已知半径rA、rB、rC。
给定这样一个三角形,我想计算两个特定边长(例如边a和边b的长度差)的差异在最坏情况下可能会发生多少变化。是否有优雅的数学解决方案?
我想到的天真方法是计算所有360^3个角度组合,并测量每种情况下的边缘差异,这是一种相当高的开销。

46656000次计算一生只需完成一次,听起来并不像是很高的开销。 - shoosh
1个回答

4
以下图片说明了解决方案: MinMaxEdgeDiff.png http://www.freeimagehosting.net/uploads/b0f0f84635.png 需要注意以下几点:
  1. Line segments AC1 and BC1 represent the largest possible value of |BC| - |AC|, while lines AC2 and BC2 represent the smallest possible value. At C1, the tangent to the circle must bisect the angle made by AC1 and BC1; likewise for C2.
  2. AC1 (when extended via the dashed line) and AC2 both go through A. Likewise, BC1 and BC2 go through B. Any deviation from the center, and the lines would longer be maximally long or minimally short.
  3. The largest and smallest differences are:

    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_)
    

    Thus the variation between the largest and smallest differences is:

    d1 - d2 = (|B->C1| - |A->C1|) - (|B->C2| - |A->C2|) + 2*(_rA_ + _rB_)
    
最后一点提示,解决方案可以通过从中心A和B解决,然后添加半径rA和rB来找到。因此,C1和C2的位置可以通过在C的边界圆周围变化一个角度来迭代地(并且分别)发现(因为它们彼此独立)。我怀疑有一种分析解决方案。这是一个有趣的问题,但不足以让我去尝试解决它。对不起。;-)

非常感谢您详细而生动的答案!我完全忽视了最后一点! - stingrey
没问题,@stingrey。顺便说一下,我稍微修正了一下数学公式(没有什么大问题;我只是在减法中交换了d1和d2以更好地匹配讨论)。 - Marcelo Cantos
我在 Mac 上使用了 LineForm。它是一个简陋但功能不错的工具,适用于快速制作简单的插图。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接