当圆与边界框的边相交时,在边界框中查找圆的固定长度圆弧的半径

时间:2015-02-16 12:24:19

标签: math

我有一个边界框,表示为具有宽度和高度的笛卡尔起点(0,0)。

我有一个圆心,中心点可以在边界框内的任何位置。 圆的周长是固定的。

当圆与边界框的边相交时,形成弧。 这个新弧的长度必须是原始圆的周长。

圆的中心的位置是已知的,因为从中心到边界框的边缘的距离是已知的。

当您靠近边界框的边缘时,圆的半径必须增加以保持弧长相同

弧的起点和终点未知,因为半径未知。

这就是我被困住的地方。只知道边界框的距离和弧的固定长度我怎样才能找到圆的半径?

我画了一张图片来代表这个问题,但由于缺乏声誉,我无法发帖。

我将非常感谢您对此的任何帮助,因为我花了很多天试图解决这个问题。

我想要实现的是可以在中心点周围显示具有固定数量的项目(固定大小)的径向菜单。固定长度是所有菜单项可以适应的计算长度。

我在.net中实现这个,但是为了这个查询它纯粹是一个数学问题。

编辑:这是问题的图像:

Illustration

2 个答案:

答案 0 :(得分:0)

这是一种可能的攻击方式。让我们写一些名字:

  • alpha =圆圈截取右侧水平线的角度
  • r = radius
  • arc ="可见"的长度圈(已知)
  • L =长度到边缘(已知)(让我们假设L> 0)
  • Pi数字pi。

使用arc = radius * angle(弧度),我们有:

arc = Pi * r + 2 * alpha * r
sin(alpha) = L / r

在第一个等式中求解alpha

alpha = arc / (2 * r) - Pi / 2

使用sin(a - b) = sin(a)cos(b) - cos(a)sin(b)

L / r = sin(alpha)= -cos(arc /(2 * r))

现在放u = L/r。由于L已知,u成为未知。替换:

u = -cos(arc /(2 * L)* u)

最后放F = arc / (2 * L)。然后F已知且

u = - cos(F * u)

因此,问题减少到解决这个方程,这将需要一些数值算法。

答案 1 :(得分:0)

我所做的是创建一个乘数,然后将距边缘的距离设为Y = 0到150并将其映射到2到1,如果Y = 150,则map = 1,如果Y = 0,则地图为2所以,如果y = 75,那么map = 1.5 ect

然后将此映射用作乘数 radius = radius * map

这让我足够接近...... 然后在角落里我为X做同样的事情并将2乘数加在一起,所以如果你在远角的两个map = 2和 所以radius = radius *(mapX + mapY)

在边缘加倍,在角落加四倍。哪个足够接近