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

发布于 2024-08-28 08:00:52 字数 240 浏览 5 评论 0原文

我不知道如何解决以下问题:

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

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

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

i'm not sure how to solve the following problem:

i have a triangle with each of the three known vertex positions A,B,C being inaccurate, meaning they can each deviate up to certain known radii rA, rB, rC into arbitrary directions.

given such a triangle, i want to calculate how much the difference of two specific edge lengths (for instance the difference between lengths of edge a and edge b) of the triangle may change in the worst case. is there any elegant mathematical solution to this problem?

the naive way i thought of is calculating all 360^3 angle combinations and measuring the edge differences for each case, which is a rather high overhead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拥醉 2024-09-04 08:00:52

下图说明了解决方案:

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 的边界圆的单个角度来迭代地发现(并且是单独的,因为它们彼此独立)。

我怀疑有一个解析解。这是一个有趣的问题,但还不足以让我对这个特定的任务猛烈抨击。对不起。 ;-)

The following image illustrates the solution:

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

Some points to note:

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

The last point hints that the solution can be found by solving from the centers A and B, and then adding the radii rA and rB. Thus the locations of C1 and C2 may be discovered iteratively (and separately, since they are independent of each other) by varying just a single angle around C's bounding circle.

I suspect that there's an analytical solution. It's an interesting problem, but not enough for me to bash my head against this particular task. Sorry. ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文