الكاميرا داخل وكيل - مشاكل محتملة
وضع كاميرا على وكيل
أهمية الرسوم المتحركة ثلاثية الأبعاد
نعلم جميعاً ما هي الرسوم المتحركة ثلاثية الأبعاد، لكن قليلاً ما يُقال عن مدى فائدتها للمصمم وأصحاب المصلحة. يمكن أن تعمل الرسوم المتحركة كأداة للمصمم لتصحيح الأخطاء أثناء مرحلة التطوير، مما يتيح الوصول إلى أشياء غير متاحة بمجرد استخدام منطق العملية. بنفس الطريقة، يستفيد الأطراف المعنية أيضاً من هذه الرسوم المتحركة، حيث يمكنهم التحقق من أن ما يتم إنجازه صحيح أو غير صحيح، مما يسمح لهم بتحسين مواصفات العملية في البرنامج أو حتى تحديد فرص التحسين.
في هذا المقال سنتحدث عن كيفية حل بعض الأخطاء الشائعة عند وضع الكاميرا في وكيل من أجل الحصول على تصور جيد لنموذجنا.
دور الكاميرا في الرسوم المتحركة ثلاثية الأبعاد
في AnyLogic، بمجرد دمج الكائنات ثلاثية الأبعاد في نموذجنا، يجب أن نكون قادرين على عرض الرسوم المتحركة التي أنشأناها. يمكن القيام بذلك باستخدام كائنات “3D Window”، حيث تسمح لنا بعرض مشاهد أو إطارات من رسومنا المتحركة. الآن، لعرض أقسام محددة من نموذجنا من منظور معين، من الضروري استخدام كائن “Camera”، الذي يسمح لنا بتحديد إطار محدد من نموذجنا نريد مراقبته من زاوية وإحداثيات معينة.
من المعروف جيداً، بفضل وثائق AnyLogic، كيف يمكن ربط كاميرا بكائن 3D Window. يمكن اختيار هذا بشكل ثابت في خصائص 3D Window حيث يقول “camera:” متصلاً باسم الكاميرا المنشأة أو يمكن أيضاً اختياره كـ “Not Specified” مما يسمح للمستخدم ببرمجة الكاميرا التي سيتم استخدامها لذلك الإطار ثلاثي الأبعاد بلغة JAVA وفقاً لأي معايير ضرورية.
تتبع هدف أثناء المحاكاة، كيفية القيام بذلك والعوائق المحتملة
من بين الاحتمالات، قد نرغب في تتبع كائن يتحرك أثناء المحاكاة، والذي يمكن أن يكون صندوقاً يتحرك عبر أحزمة ناقلة في مركز توزيع أو ربما شخصاً يمشي داخل مبنى مشيد أو ببساطة سيارة يتم قيادتها عبر شوارع منطقة مزدحمة، مهما كانت الحالة، يجب أن نكون قادرين على تحديد مثيل الوكيل المحدد الذي نريد تتبعه وبالتالي نوع الوكيل.
لنفكر في حالة السيارات التي تقود نحو طابق ركن سيارات ثم تعود إلى نقطة البداية. في هذه الحالة سيكون الوكيل من نوع “Car” ومثيلات هذا الوكيل يمكن أن تكون متعددة، والتي يمكن تحديدها في مجموعة “cars”. لوضع كاميرا تسجل أي سيارة ضمن مجموعة السيارات لدينا، نذهب ببساطة إلى نافذة نوع الوكيل “Car” ونقوم بإعداد كاميرا يمكنها تسجيل مركبتنا كما هو موضح في الشكل 1.
بشكل افتراضي، ستكون رسومنا المتحركة في الإحداثيات (0,0,0) في نافذة “Car” لدينا، لذا يمكننا وضع الكاميرا في (-60, 0, 15) بحيث تكون على بعد 6 أمتار خلف سيارتنا و1.5 متر فوق الارتفاع الذي تكون فيه السيارة (محسوبة بناءً على مقياس المسافة).
الآن نحتاج إلى استدعاء تلك الكاميرا في نافذة Main لدينا، ولذلك يمكننا إنشاء زر أو حدث في الوكيل الذي تعيش فيه مجموعة السيارات (مثل Main)، يثبت عرض الكاميرا في نافذة 3D Window. لذلك يجب كتابة الكود التالي:
window3d.setCamera(cars.random().camera, true);
بهذه الطريقة، ستكون “window3d” لدينا ترى “camera” سيارة عشوائية من مجموعة السيارات المنشأة وستتبع مسارها حيث أن خيار تتبع الكائن مضبوط على true.
عند هذه النقطة قد نرغب في رؤية نافذة 3D Window مع تشغيل النموذج، لكن هناك عائقان محتملان:
-
أنه لا توجد سيارة في محاكاتنا عندما ننفذ الإجراء، مما سيسبب خطأ
-
أن الكاميرا لا تعرض ما يجب أن تعرضه، وهذا الخطأ ليس بالضرورة بسبب موضع الكاميرا في نافذة Car (على الرغم من أنه يمكن أن يكون سبباً).
لحل الخطأ الأول، يمكنك استخدام try/catch كالتالي:
try{
window3d.setCamera(cars.random().camera, true);
}catch(Exception e){
//do something to tell the user that there is no car available
}
ولحل الخطأ الثاني، يجب التأكد من أن لدينا عرضاً تقديمياً في الوكيل الأب. ثم، يجب أن يكون عرض وكيلنا في إحداثيات الأصل (0,0,0) للوكيل الأب، وإلا ستكون للكاميرا إزاحة غير مرغوبة تعتمد على مدى بعد كائن الرسوم المتحركة للسيارة ومقياس الوكيل الأب. يجب وضع كائن السيارة في نقطة الأصل (0,0,0) كما هو موضح في الشكل 2:
الشكل 2 - موضع الوكيل في الوكيل الأب
كتبه خواكين غوزمان.
