Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 基于对象数计算对象位置_Math_Lua - Fatal编程技术网

Math 基于对象数计算对象位置

Math 基于对象数计算对象位置,math,lua,Math,Lua,我有一个简单的问题,但很难想出一个优雅的解决方案 假设我的应用程序显示了一副卡片。每次我画一张卡片,我都想把它显示在屏幕中央。当我画一张新卡片时,我想在上一张卡片旁边显示该卡片,并且两张卡片都居中 更具体地说,如果我的代码有以下变量和表 N=玩过的牌总数。假设N在1和10之间 W=以像素为单位分隔每张卡的宽度。例如30px C=屏幕宽度/2(屏幕中心x值) p={}——表示卡的位置及其新的X值。P[1]将是第一张牌的x值 我想要一个公式,这样我就可以运行一个循环并计算每张卡的新X值 这是我的预期

我有一个简单的问题,但很难想出一个优雅的解决方案

假设我的应用程序显示了一副卡片。每次我画一张卡片,我都想把它显示在屏幕中央。当我画一张新卡片时,我想在上一张卡片旁边显示该卡片,并且两张卡片都居中

更具体地说,如果我的代码有以下变量和表

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*W


所以我需要一个循环,通过编程为我计算。不知道怎么做。

在您描述的情况下,您可以很容易地发现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