jquery - 计算径向菜单的 Angular

标签 jquery css math geometry

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

  • 菜单项的数量是固定的。在我计划使用此功能的页面上,菜单项的数量是动态的,因为它会随着一个用户的不同而变化。

  • 它的方向最大为 180 度,而我希望它是完整的 360 度。

为了克服这些问题,我决定使用 jQuery 来计算菜单项的数量,然后对每个元素应用适当的 rotate 值。

在研究 CSS 后,我发现在有 7 个菜单项的情况下,旋转 Angular 值为:

  • 第一个 child -20度
  • 第二个 child 12 度
  • 第三个 child 为 44 度
  • 第四个 child 为 76 度,依此类推。

总结:

-20 degrees for the first child and keep adding 32 degrees for the next 6 children

现在我正在努力找出其背后的数学原理。我希望根据菜单项的数量动态计算这些值。我应该使用什么公式来为每个 child 找到合适的 Angular ?

最佳答案

我们可以用一些代数来算出这个公式。让我们开始吧!

线性部分

假设我们有一个数量 y,我们希望将其分成 n 个大小为 x 的部分,这些部分之间由大小为 的间隙分隔>p*x.

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

因此,我们有:

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

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

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

例如,如果数量为 180,我们想要制作 7 个大小为 x 的部分,并用大小为 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。

关于jquery - 计算径向菜单的 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32111655/

相关文章:

jquery - 如何在单击图像链接时更改 Div 的内容?

html - 如何在 `fieldset legend `中的中间位置设置文本

python - 如何在没有 SymPy 的情况下计算给定函数的积分?

c# - 为什么 -2 % 360 在 C# 中给出 -2 而不是 358

javascript - 如何在展开前将事件的 Accordion 滚动到顶部

javascript - GSAP 和 jQuery : play animation on the next page load

javascript - 用于动态构建下拉列表的 window.onload 事件的替代方案

html - Iphone 6 css3 使其大小减半

html - 如何使用 CSS 在 HTML 文档中插入换行符

c++ - 确保相机位置始终位于屏幕中心?