【问题标题】:Calculating adjacent circle segments计算相邻圆段
【发布时间】:2012-06-21 19:22:25
【问题描述】:

我正在尝试开发一个看起来应该是 somewhat like this 的组件

我正在使用 RaphaelJS 来绘制这个并且效果很好。我有一个角度数组,用于计算各个段的路径。我将这些路径存储在一个简单的数组中,因此内圈位于段 [0] 处,以此类推向外螺旋。

我的问题是我需要每个段都知道它是顺时针、逆时针、向内和向外的相邻段,我很难弄清楚如何计算这些段的位置是我的段数组。因此,例如,在上图的情况下,第 2 级的红色段(其中 0 是最内圈)有红色、亮绿色、柿子、浅紫色和深紫色邻居。

也许我需要一个不同的坐标系。如果每个级别都有相同数量和角度分布的线段,那么使用模数就像索引圆形数组一样简单,但事实并非如此。

任何帮助将不胜感激。

非常感谢,

安东尼

【问题讨论】:

  • 当一个片段与两个外部或内部片段重叠时会发生什么?还是更多?
  • 从给定段的角度来看,如果多个外部段“覆盖”该段,则它们都被视为与该原始段相邻。内部段也一样。
  • 您必须遍历相邻的外部和内部段,并检查切片两端的角度是否在/等于彼此段的末端,反之亦然。不是一个“快速”的过程,但可能是最简单的。
  • 您不应该在 Stack Overflow 上发布暂时可用的图片链接,例如您的 Dropbox 链接(现在已经消失,仅在发布您的问题一周后)。 Stack Exchange 有自己的图片服务器,如果您在发布问题时上传图片,您的图片会自动上传和链接。如果您需要再次在问题(或答案)中发布图片,能否重新上传您的图片并使用此功能?

标签: javascript math geometry raphael computational-geometry


【解决方案1】:

我会更改您将分段从一个排序数组存储到每个级别一个排序数组的方式。

然后找到给定段 (S) 的邻居相当容易:左右邻居是该级别数组的前一个和下一个元素。

通过在这些数组中进行几次二分搜索找到相邻级别中的邻居:找到与 S 的起始角和结束角重合的线段,邻居是这两者之间的线段序列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2016-02-05
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多