سؤال

تخيل مساحة سداسية مع 3 أبعاد.

كل بلاط لديه تنسيق XYZ. أحتاج إلى اختيار جيران الخلايا المعطاة في نفس الطائرة. مع SQL يبدو:

$tbDir = $y % 2 == 0 ? -1 : 1;

$result =  db_query('SELECT x,y,z FROM {cells} WHERE
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d OR
                    x = %d AND y = %d AND z = %d ',
                    $x, $y, $z,
                    $x-1, $y, $z,
                    $x+1, $y, $z,
                    $x, $y-1, $z,
                    $x, $y+1, $z,
                    $x+$tbDir, $y-1, $z,
                    $x+$tbDir, $y+1, $z);

ولكن، أنا لا أحب بهذه الطريقة. ربما شخص يعرف المزيد من الخوارزميات الأمثل؟ شكرًا لك!

هل كانت مفيدة؟

المحلول

هذا يبدو وكأنه يمكنك استخدام بين

x BETWEEN $x-1 AND $x+1 AND y BETWEEN $y-1 AND $y+1 AND z = $z

قد لا يعمل هذا بالضبط لقسم TBDIR $. سألقي نظرة على هذه الحالة بمزيد من التفاصيل.

حسنا، حاول هذا

WHERE   x BETWEEN ($x-1 AND $x+1 AND y = $y AND z = $z)
OR      (y BETWEEN $y-1 AND $y+1 AND x = $x AND z = $z)
OR      (y BETWEEN $y-1 AND $y+1 AND x = $x + $tbDir AND z = $z)

او حتى

WHERE   (   (x BETWEEN $x-1 AND $x+1 AND y = $y )
            OR      (y BETWEEN $y-1 AND $y+1 AND x = $x)
            OR      (y BETWEEN $y-1 AND $y+1 AND x = $x + $tbDir)
        )
AND     z = $z

نصائح أخرى

هناك رسم خرائط سهلة إذا كانت الخوارزميات الخاصة بك يمكن أن تعمل مع نظام تنسيق غير متعامد. في حالتك، يبدو أن جزء من بلاط عرافة الموازية مع محور عمودي:

 / \ / \ / \
| a | b | c |
 \ / \ / \ / \
  | d | e | f |
 / \ / \ / \ /
| x | g | h | i

إذا كنت تستطيع قبول محور Skew Y، فيمكنك إعطاء a, d, g تنسيق x 0 (أي محور Y يمر عبر مراكز هذه البلاط). فيbeh سيكون لديك x == 1، cfi لديه x == 2 وما إلى ذلك). x لديه تنسيق (-1،2). الآن يمكنك التحرك مثل هذا:

e -> f: x+1,y
e -> d: x-1,y
e -> b: x,  y-1
e -> c: x+1,y-1
e -> g: x-1,y+1
e -> h: x,  y+1

كما ترون، فإن الحركات مستقلة تماما عن موضع y.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top