Math 基于对象数计算对象位置
我有一个简单的问题,但很难想出一个优雅的解决方案 假设我的应用程序显示了一副卡片。每次我画一张卡片,我都想把它显示在屏幕中央。当我画一张新卡片时,我想在上一张卡片旁边显示该卡片,并且两张卡片都居中 更具体地说,如果我的代码有以下变量和表 N=玩过的牌总数。假设N在1和10之间 W=以像素为单位分隔每张卡的宽度。例如30px C=屏幕宽度/2(屏幕中心x值) p={}——表示卡的位置及其新的X值。P[1]将是第一张牌的x值 我想要一个公式,这样我就可以运行一个循环并计算每张卡的新X值 这是我的预期输出 N=1,p[1]=C。如果只有一张卡,则该卡的x值将为中心 N=2,p[1]=C-W/2,p[2]=C+W/2 N=3,p[1]=C-W,p[2]=C,p[3]=C+W N=4,p[1]=C-3/2*W,p[2]=C-1/2*W,p[3]=C+1/2*W,p[4]=C+3/2*WMath 基于对象数计算对象位置,math,lua,Math,Lua,我有一个简单的问题,但很难想出一个优雅的解决方案 假设我的应用程序显示了一副卡片。每次我画一张卡片,我都想把它显示在屏幕中央。当我画一张新卡片时,我想在上一张卡片旁边显示该卡片,并且两张卡片都居中 更具体地说,如果我的代码有以下变量和表 N=玩过的牌总数。假设N在1和10之间 W=以像素为单位分隔每张卡的宽度。例如30px C=屏幕宽度/2(屏幕中心x值) p={}——表示卡的位置及其新的X值。P[1]将是第一张牌的x值 我想要一个公式,这样我就可以运行一个循环并计算每张卡的新X值 这是我的预期
所以我需要一个循环,通过编程为我计算。不知道怎么做。在您描述的情况下,您可以很容易地发现p[1]=C-(N-1)/2*W。这通常是正确的,因为总宽度随卡数线性增加。
其他卡片的位置可以通过以下表达式来计算:P[x]=P[x-1]+W.
这个公式应该可以:
P[k] = C + W * (k - 1 - (N - 1) / 2)
其中k=1,2,…,N
是卡的编号
各种情况如下:
N = 1 => P[k] = C + W * (k - 1)
=> P[1] = C
N = 2 => P[k] = C + W * (k - 1 - 1/2)
=> P[1] = C - W/2, P[2] = C + W/2
N = 3 => P[k] = C + W * (k - 1 - 1)
=> P[1] = C - W, P[2] = C, P[3] = C + W
N = 4 => P[k] = C + W * (k - 1 - 3/2)
=> P[1] = C - 3W/2, P[2] = C - W/2, P[3] = C + W/2, P[4] = C + 3W/2
...
local C = 10
local W = 20
local function CardPosition( k, N )
return C + W * (k - 1 - (N - 1) / 2)
end
for N = 1, 5 do
io.write( "N = ", N, " => P[k] = ",
C, " + ", W, " * (k - 1 - ", N - 1, "/2) \n" )
io.write " => "
for k = 1, N do
io.write( "P[", k,"] = ", CardPosition(k, N), ", " )
end
io.write "\n\n"
end