计算径向菜单的角度

时间:2015-08-20 07:06:32

标签: jquery css css3 math geometry

我正在处理a demo page的副本。我发现菜单项(li)的对齐是使用nth-child伪选择器和rotate属性完成的。我在演示中面临的问题是:

  • 菜单项的数量是固定的。在我计划使用它的页面上,菜单项的数量是动态的,因为它从一个用户变为另一个用户。

  • 它的方向高达180度,而我希望它是一个完整的360度。

为了克服这些问题,我决定使用jQuery来计算菜单项的数量,然后将相应的rotate值应用于每个项目。

在调查CSS时,我发现在7个菜单项的情况下,旋转角度值为:

    第一个孩子
  • -20度
  • 第二个孩子12度
  • 第3个孩子44度
  • 第4个孩子76度,依此类推。

总结:

  

第一个孩子的-20度,并为接下来的6个孩子继续增加32度

现在我正在努力弄清楚它背后的数学。我希望根据菜单项的数量动态计算这些值。我应该用什么公式来为每个孩子找到合适的角度?

2 个答案:

答案 0 :(得分:1)

计算菜单项的数量。 所以你想在它们之间划分360d。 简单地通过划分你了解每个菜单项度

var each_item_degree = 360 / number_of_items;

你应该从拳头孩子到最后一个孩子each_item_degree添加。
它会给你你想要的东西,但没有任何余地。对于它们之间的边距,你可以很容易地从360减少总边距,例如如果7项是32d女巫从-20到12开始,从15d开始下一个。它给你3D边距。
祝你好运。

答案 1 :(得分:1)

我们可以通过一些代数来计算出公式。我们来做吧!

线性部分

假设我们要将数量y分成n个大小为x的{​​{1}}部分,这些部分由大小为p*x的间隙分隔。

如果除了最后一个部分之外的每个部分之后都有间隙,则会有n-1个间隙。

因此,我们有:

n*x + (n-1)*p*x  =  y

(n + (n-1)*p) * x  =  y

x  =  y / (n + (n-1)*p)

例如,如果数量为180,并且我们希望将大小为x的7个部分分隔为0.1*x的间隙,我们会得到:

x  =  360 / (7 + 6*0.1)

   =  23.6842

现在让我们考虑从每个部分开始到下一部分的总距离。

如果某个部分从位置t0开始,则下一部分从位置t1开始,以便:

t1  =  t0 + x + p*x

继续上述数字,我们得到:

t1  =  t0 + 23.6842 + 0.1*23.6842

    =  t0 + 26.0526

现在我们知道截面起点是26.0526单位,每节是23.6842单位。

圆形部分

如果我们细分的数量是圆形,则计算结果不同,因为最后一部分和第一部分也用间隙分隔。换句话说,圆圈中存在n个缺口。

现在我们有:

n*x + n*p*x  =  y

(n + n*p) * x  =  y

x  =  y / (n + n*p)

因此,如果我们将360度划分为7个大小为x且间距为0.1*x的小节,我们会得到:

x  =  360 / (7 + 0.1*7)

   =  46.7532

这是一个部分的大小。一个部分的起点t0与下一部分的起点t1之间的距离为:

t1  =  t0 + x + p*x

    =  t0 + 46.7532 + 0.1*46.7532

    =  51.4285

总之,从每个部分的开头到下一部分的开头的距离是51.4285,每个部分的长度是46.7532。