在Lua中均匀地安排圆形点

时间:2014-06-10 20:26:01

标签: lua love2d

我设法通过打印功能使点显示为圆形,然后使用圆形变量对其进行动画处理。然而,我尝试将点自动排列成圆圈的1个/多个点的段以使它们均匀布局而不输入每个点的角度,而不是让它们围绕圆圈绕过360度以上,因为它自食其力。

例如,对于5个点,我希望每个圆圈在360度的1/5中,每边都有均匀的空间,如果你加入点,这应该是正五边形的形状

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

3 个答案:

答案 0 :(得分:3)

在你的循环中,你正在做

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)            -- to lessen the computation cost
x = radius * math.sin( math.rad(c) ) 
y = radius * math.cos( math.rad(c) )

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

你需要使用cos代表x和sin代表y来获得正确的顺序:

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