查找对象的行

时间:2016-12-09 00:54:46

标签: math geometry vertex

我正在尝试创建一个由四边形组成的程序形状。

我希望能够使用任何四元组并使用它的索引来查找它所在的行。

从图像中取四边形9。我可以使用什么样的函数来查找行(在这种情况下,从0索引为2)。四轮车20怎么样?

行总是在宽度上改变2个四边形,每边一个。

对不起,这有点令人费解,但我不确定如何处理这个问题。

QuadDiagram

2 个答案:

答案 0 :(得分:1)

假设直径d和四位数q。我声称行从0到d-1。此外,还有(d / 2)(2 + d)个元素。更简单的情况是如果0 <= q <(d / 4)(2 + d),在这种情况下我们处于前半部分。然后索引是trunc(( - 1 + sqrt(1 + 4 * q))/ 2)。这来自于使用观察,即行n以n(n + 1)开始,其可以用算术系列的总和正式显示,然后向后工作并求解二次方程。 另一方面,如果我们处于后半部分(d / 4)(2 + d)&lt; = q&lt;(d / 2)(2 * d)并且我们通过从末尾取偏移来解决。让q&#39; be(d / 2)(2 + d)-1-q。将上述指数公式应用于q&#39;而不是q,并从d-1中减去结果以得到q的行的索引。 我可能会在这里或那里一个人离开,但我认为这是它的要点。

答案 1 :(得分:0)

我在想,因为这是发布到一个编程站点的,也许更合乎逻辑的是给出一个可以实现的功能而不需要抽出大量的数学,而只是依赖于添加。我认为跟随并且更难搞乱会更容易(虽然我可能低估了我的陷入困境的能力,而且我几乎做到了。)

as.numeric(df[,51])                  #convert the column to numeric
len = length(unique(df[,51]))        #find number of unique values
diff = max(df[,51]) - min(df[,51])   #calculate difference between min and max
ord = (len - 1) / diff               # calculate the increment if equally spaced

#subtract the max value from second to max value to find the actual increment (only uses last two values)
step = sort(unique(df[,51]),partial=len)[len] -
sort(unique(df[,51]),partial=len-1)[len-1] 

ord == step                          #check if the last increment equals the implied increment