2016-08-14 6 views
-1

私はN個の要素の配列を持っています。座標計算を簡素化

各グループは4x4の要素表であるグループのセットのように画面に配置する必要があります。テーブルの幅はTW = 320pxです。高さはTH = 480pxです。各テーブルのローカル座標で

  • 列間のギャップと等しくなければなりません。最初の列と左端の間のギャップは、4列目と右端の間のギャップと等しくなければならず、境界GapX = 60pxと等しくなければなりません。
  • 行間のギャップは、等しくなければなりませんrowsGapY = 60px;最初の行は最初から150ピクセルです。画面のグローバル座標で

  • テーブルはtablesGapX = 300 PXのギャップを有する別の近くに位置して配置されなければなりません。

    ... かの演算子や内側のループなし -

・ホープ関連の絵はpic.1

は、今、私たちはちょうど式でループ内の各要素のXとYの位置を設定する必要があります...助け

私は実際にどのように覚えていないが、私はこのようなものになってしまった、それが動作します:

for i=1,N do 
    element.x, element.y = 
    (((i%4)==0) and (TW-borderGapX) or ((i%4==1) and borderGapX or borderGapX+((TW-borderGapX*2)/3)*((i%4)-1)))+math.floor(i/16)*tablesGapX - ((((i%4==0) and (i%16==0))) and tablesGapX or 0), 
    firstRowY+math.floor((i-1)/4)*rowsGapY - (math.floor(i/16)*rowsGapY*4) + ((((i%4==0) and (i%16==0))) and rowsGapY*4 or 0) 
end 

誰かが私はそれを簡略化する助けてください!

+0

'(aとb)または(cとd)...'スタイルステートメントを置くよりも 'if-else'ブロックを使う方が簡単だと思います。 – hjpotter92

+0

' tablesGapX

+0

要素のサイズ(またはサイズ)は何ですか?すべての要素が同じ大きさであるか、いくつかの異なるサイズになるか、完全にランダムであるかによって、アルゴリズムは異なります。 –

答えて

0

読みやすさを簡略化するには、次のようにします。

element.tableid = math.floor(i/16) 
element.position = i - element.tableid 

そして、あなたは助け機能

for i=1,N do 
    element.tableid = math.floor(i/16) 
    element.position = i - element.tableid 
    element.x = compute_offsetxoftable(element.tableid) 
    element.y = compute_offsetyoftable(element.tableid) 
    element.x = element.x + compute_offsetxwithintable(element.position) 
    element.y = element.y + compute_offsetywithintable(element.position) 
end 

を使用し、私はちょうど暗黙的に定義する機能は、さらにマッピングテーブルのようになります。あなたはどのテーブル番号とその位置、数、各要素は持って定義することを開始します。 ..

+0

内部定義やヘルプ機能はありません。可能であれば、ちょっといいエレガントな方程式... – Aleksei

+1

'+ ='はルアで利用できません – hjpotter92

+0

私はあなたに一つの関数を与えます: 'function compute_offsetxwithintable(x)return(x -1)* tablesGapX end' –

関連する問題