سؤال

وأنا أكتب محرك الفيزياء يستخدم التكامل Verlet، وأنا لا يمكن الحصول على بعض القيود على الحق في العمل. بعض (مثل السندات / لحام القيد) هي اضافية "فطير" وليست قاسية بما فيه الكفاية، في حين أن آخرين (مثل عقبة المنطقة) ونطاط اضافية وإرسال ذرات الطيران. رمز لتحديث بلدي ethod في بلدي محاكاة الفيزياء هو من هذا القبيل:

    ProcessRemovedItems();
    ProcessAddedItems();
    _colliderManager.Update(timestepSize);
    foreach (Atom atom in _atomList)
    {
        atom.Update(timestepSize);
    }
    for (int i = 0; i < _iterations; i++)
    {
        foreach (IConstraint constraint in _constraintList)
        {
            constraint.Update();
        }
    }

ولقد حاولت كل المجموعات idfferent أوامر التحديث وليس مساعدة. لدي فكرة غامضة عن شيء حول استخدام التكرارات ولكن لدي أي فكرة ما من شأنه مساعدة آخر. أي اقتراحات؟

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

المحلول

وكنت على صواب في افتراضاتك التكرارات.

وعن طريق تشغيل تكامل جزء verlet عدة مرات في إطار وأعمال محاكاة صلابة وأفضل).

وهذا يرجع إلى ما يلي هذا: نقول لديك 5 ذرات بجانب بعضها البعض، وعندما يحصل على دمج ذرة الماضية، يتم نقله قليلا. للأسف يتم نقله لي لذرة القادمة إليها. فإنه يأخذ إطار كامل، قبل أن يتم دمج مرة أخرى، وهذا هو ثابت (بسبب القيود). كيف من أي وقت مضى، وهناك احتمالات، فإن الذرات يتم وضعها مرة أخرى داخل الآخرين.

وذلك لمواجهة هذا الواقع، والمزيد من التكرار لديك (لذلك أكثر من مرة في إطار استدعاء تكامل)، وأفضل محاكاة ستعمل وتتوافق مع القيود الخاصة بك،

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

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