⎕0+⌈3÷⍨1 2×⌊⎕×√3
在线尝试!
一个完整的程序,y
然后x
从标准输入中获取并打印2元素的整数矢量。
工作原理:数学
首先,请注意,任何高斯整数都将放置在菱形的垂直对角线上,对于某些整数点放置在。Z(x,3–√y)x,y
+ W
/|\
/ | \
/ | \
/ + X \
/ | \
+-----|-----+V
\ | /
\ + Y /
\ | /
\ | /
\|/
+ Z
在图中,和。因此,在给定点的垂直位置的情况下,我们可以如下确定最近的爱森斯坦点:WZ¯¯¯¯¯¯¯¯¯=3–√WX¯¯¯¯¯¯¯¯¯¯=XY¯¯¯¯¯¯¯¯=YZ¯¯¯¯¯¯¯=XV¯¯¯¯¯¯¯¯=YV¯¯¯¯¯¯¯¯=13√
Given a point P∈WZ¯¯¯¯¯¯¯¯¯,⎧⎩⎨⎪⎪⎪⎪P∈WX¯¯¯¯¯¯¯¯¯¯⟹the nearest point is WP∈XY¯¯¯¯¯¯¯¯⟹the nearest point is VP∈YZ¯¯¯¯¯¯¯⟹the nearest point is Z
给定一个高斯点,我们首先确定属于哪个钻石,该钻石由偏离轴的钻石数(表示为)来衡量。PPhZx
h=⌊P.y÷3–√⌋
那么的爱森斯坦坐标是Z
Z.xE=P.x+h,Z.yE=2h
现在,我们确定属于哪个段。为此,我们可以如下计算指标:WX¯¯¯¯¯¯¯¯¯¯,XY¯¯¯¯¯¯¯¯,YZ¯¯¯¯¯¯¯ Pw
w=⌊P.y×3–√⌋%3
那么,的情况对应于。最后,的最近爱森斯坦点(它是,或)可以计算为:w=0,1,2YZ¯¯¯¯¯¯¯,XY¯¯¯¯¯¯¯¯,WX¯¯¯¯¯¯¯¯¯¯PZVX
PE.xE=P.x+h+⌈w2⌉,PE.yE=2h+w
使用和的身份,我们可以进一步简化为:hw
y′=⌊P.y×3–√⌋,PE.xE=P.x+⌈y′÷3⌉,PE.yE=⌈2y′÷3⌉
工作原理:代码
⎕0+⌈3÷⍨1 2×⌊⎕×√3
⌊⎕×√3 ⍝ Take the first input (P.y) and calculate y'
⌈3÷⍨1 2× ⍝ Calculate [ceil(y'/3), ceil(2y'/3)]
⎕0+ ⍝ Take the second input(P.x) and calculate [P.x+ceil(y'/3), ceil(2y'/3)]