如何找出圆从矩形中伸出多少

问题描述 投票:0回答:1

这个圆悬挂在矩形之外的面积是多少(想象矩形两端延伸到(无穷大,无穷大)),以及如何将其推广到任何半径的任何圆以及任何矩形尺寸。

Circle of radius 7, origin at (3,2), partly hanging out of a rectangle that has a corner at (0,0), stretching out infinitely in both positive directions1

我有一个编码问题,我需要计算多个不同圆的圆在矩形中的百分比,当矩形的角被覆盖时,我在代码中遇到困难。如果没有角问题,我可以简单地查看每个突出边缘的距离,然后使用一些圆/三角数学来找到每个外部位的面积。但是一旦角被覆盖,代码就会对角位进行计数:在圆位于 (0,0) 的极端情况下,它将左半部分计为出局,将上半部分计为出局,并得出整个圆出局的结论。我画了图表,但没能找到一种方法来发现被多算的区域。我最初尝试找到外三角形的尺寸,但我也无法弄清楚。

我知道有一个答案,因为只有一种可能性有足够的信息,但我不知道如何解决。

这是我到目前为止的代码,它只是计算垂直于轴的线段覆盖的面积,因此当这些线段重叠时会过度计算。 xbounds 是矩形宽度的元组 (low, high),ybounds1 (low, high) 是矩形高度的元组,这些只是说明矩形在 x 和 y 轴上开始和结束的位置,实际上,第一个值是 0,因为矩形从零开始,第二个值是非常大的数字。 范围是圆的半径。 Pos 是一个虚数,代表原点,其中 real 是 x 坐标,imag 是 y 坐标。

r2 = range*range
outarea = 0
        
if (b:= -pos.real+range+xbounds[0])>0:
    theta = 2*acos(1-b/range)
    outarea=0.5*r2*(theta-sin(theta))
        
if (b:= pos.real+range-xbounds[1])>0:
    theta = 2*acos(1-b/range)
    outarea+=0.5*r2*(theta-sin(theta))
        
if (b:= -pos.imag+range+ybounds[0])>0:
    theta = 2*acos(1-b/range)
    outarea+=0.5*r2*(theta-sin(theta))
        
if (b:= pos.imag+range-ybounds[1])>0:
    theta = 2*acos(1-b/range)
    outarea+=0.5*r2*(theta-sin(theta))
python math coordinates shapes
1个回答
0
投票

如果角(我称之为 O)在圆的内部,你可以

  • 在两个交点 A 和 B 之间画一条线。

  • 求直角三角形ABO的面积。

  • 获取 A 和 B 之间以圆 C 中心为中心的扇形面积。这应该是

    pi*r*r*percentage
    ,其中
    percentage
    可以通过使用 atan2 计算得到射线 CA 和 CB 的角度,然后将它们的差除以 2pi。

  • 计算直角三角形ABC的面积。

  • 弦AB与圆之间的面积是面积(扇形)-面积(三角形ABC)。

  • 圆与矩形交点的面积为(弦与圆之间的面积)+面积(三角形ABC)

  • 矩形外圆的面积是圆的面积减去它们的交点。

© www.soinside.com 2019 - 2024. All rights reserved.