我有一个边界框,表示为具有宽度和高度的笛卡尔起点(0,0)。
我有一个圆心,中心点可以在边界框内的任何位置。 圆的周长是固定的。
当圆与边界框的边相交时,形成弧。 这个新弧的长度必须是原始圆的周长。
圆的中心的位置是已知的,因为从中心到边界框的边缘的距离是已知的。
当您靠近边界框的边缘时,圆的半径必须增加以保持弧长相同
弧的起点和终点未知,因为半径未知。
这就是我被困住的地方。只知道边界框的距离和弧的固定长度我怎样才能找到圆的半径?
我画了一张图片来代表这个问题,但由于缺乏声誉,我无法发帖。
我将非常感谢您对此的任何帮助,因为我花了很多天试图解决这个问题。
我想要实现的是可以在中心点周围显示具有固定数量的项目(固定大小)的径向菜单。固定长度是所有菜单项可以适应的计算长度。
我在.net中实现这个,但是为了这个查询它纯粹是一个数学问题。
编辑:这是问题的图像:
答案 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)
在边缘加倍,在角落加四倍。哪个足够接近