在Lua中均匀排列圆形点

我成功通过print函数使得点以圆形形状出现,并通过circle变量让其进行恒定旋转的动画。然而,我尝试自动将点分成圆形的1 /点数段,以使它们均匀地铺开而不需要输入每个点的角度,但它们似乎会在圆圈周围超过360度而不是正确排序。

例如,对于5个点,我想要每个圆形覆盖1/5的360度,并在每一侧都有均匀的空间,这应该形成一个正五边形,如果您将点相连。

function love.load() --Only run at startup
    cycle = 0
    points = 9 -- should work on any value
    radius = 0.5
    love.window.setMode(90, 90)
end
function love.update()
    cycle = cycle + 0.05
    if cycle >= 360 then
        cycle = 0
        --prevent huge values
    end
end
function love.draw()
    i = 0
    while i < points do
        x = radius * math.deg(math.sin(cycle + (360 * (i / points )) )  )
        y = radius * math.deg(math.cos(cycle + (360 * (i / points )) )  )
        --cycle to move and i + 1 / points to auto arrange
        b = (i / points )
        b = round(b, 2)
        love.graphics.print( b , 33 + x, 33 + y)
        i = i + 1
    end
end
function round(num, idp) --rounding function for display
    local mult = 10^(idp or 0)
    return math.floor(num * mult + 0.5) / mult
end

当前发生的事情:

img

点赞
用户1190388
用户1190388

在你的循环中,你正在执行

x = radius * math.deg(math.sin(cycle + (360 * (i / points )) )  )
y = radius * math.deg(math.cos(cycle + (360 * (i / points )) )  )

然而,你想要的是:

b = i / points
local c = cycle + (360 * b)           // 为了减少计算成本
x = radius * math.sin( math.rad(c) )
y = radius * math.cos( math.rad(c) )
2014-06-10 20:51:06
用户4037321
用户4037321

你只需要使用lua的math.rad()函数将那个360度转换成弧度,因为lua的math.sin(O)和math.cos()函数是用弧度而不是角度的。感叹号与代码无关,只是为了引起你对问题的注意。

        x =  math.deg(radius*math.sin(cycle + (!!!math.rad(360)!!! * (i / points )) )  )
        y =  math.deg(radius*math.cos(cycle + (!!!math.rad(360)!!! * (i / points )) )  )
2014-09-13 09:07:00
用户1997085
用户1997085

你需要在 x 使用 cos,y使用 sin 来获得正确的顺序:

x = radius * math.deg(math.cos(cycle + (360 * (i / points )) )  )
y = radius * math.deg(math.sin(cycle + (360 * (i / points )) )  )
2014-09-14 21:18:45