我设法通过打印功能使点显示为圆形,然后使用圆形变量对其进行动画处理。然而,我尝试将点自动排列成圆圈的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
目前发生的事情:
答案 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 )) ) )