سؤال

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

الحل الحالي الخاص بي هو ببساطة تتبع "مركز" الجسيمات من خلال العثور على الحد الأدنى/الحد الأقصى لـ x وy وجعل منتصف إطار العرض يتبع ذلك.إنه يعمل بشكل جيد (لا حاجة للعثور على مركز الكتلة الحقيقي).وهنا البصرية:

Viewport

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

عندما أقوم بتحريك الماوس لأسفل على جسيم ما، أريد أن يكون له موقع ثابت في المحاكاة (يتجاهل كل القوى المؤثرة عليه).عندما أقوم بتحريك الماوس مع الضغط على الزر، أريد أن يتحرك الجسيم في المحاكاة.لقد حققت هذا.ومع ذلك، فإنه ينتج آثارًا جانبية غير سارة بسبب إطار العرض والجزيئات الأخرى التي لا تزال في حالة حركة.لا يتحرك الجسيم في المحاكاة عندما يكون الماوس مضغوطًا وثابتًا ولكنه يتحرك على الشاشة لأن مركز جميع الجسيمات يتغير ويتم ضبط إطار العرض وفقًا لذلك.يكون المؤشر ثابتًا لذا "يتحرك" الجسيم للخارج من تحته.عندما يتم تحريك الماوس بشكل طفيف، ينتقل الجسيم مرة أخرى تحت المؤشر لأن الموضع الجديد للمؤشر يمثل إحداثيات محاكاة مختلفة جذريًا.

هل هناك أي اقتراحات لتجربة مستخدم لطيفة ومتماسكة دون الآثار الجانبية المذكورة أعلاه؟


لقد فكرت بالفعل في:

  • إيقاف المحاكاة مؤقتًا أثناء انخفاض الماوس
  • يتغير تعليق إطار العرض أثناء انخفاض الماوس
  • تحريك مؤشر الماوس مع تغير إطار العرض (سيء جدًا)

لكن جميعها لها آثار جانبية سيئة أخرى أو تسلب قيمة من المحاكاة.

أيضًا، أعتقد أن هذا السؤال لا يعرف اللغة والنظام الأساسي، لذا لا تقم بإرفاق معاني حرفية ومعاني خاصة بالتنفيذ بـ "منفذ العرض" أو "إحداثيات منفذ العرض" أو "إحداثيات المحاكاة".تعامل معها كمفاهيم رسومية عامة.

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

المحلول

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

إنه يعقد العمليات الحسابية إلى حد ما، لكن لا يبدو أنه لم يتبق لديك الكثير من الخيارات.

نصائح أخرى

لا أعتقد أن هناك حاجة لإيقاف المحاكاة مؤقتًا.كما تصفه، يبدو أن إدخال الماوس (إدخال العرض) يغير بيانات النموذج مباشرة ويتم تحديث العرض وفقًا لذلك عند إصدار التحديث/المسح/أي شيء آخر.

ربما يمكنك إدراج جسيم واحد جديد يتم استخدامه فقط أثناء "الرسوم المتحركة"، ولا يقترن بأي من الجسيمات الأخرى.أثناء إدخال هذا الجسيم، يمكنك إخفاء الجسيم الحقيقي (وحوافه).لذا، أثناء تحريك الماوس، فإنك تقوم فقط بتحديث بيانات هذا الجسيم المتحرك.عندما تنتهي الرسوم المتحركة (تترك الماوس)، يتم حذف الكائن المتحرك، ويتم تحديث الجسيم الحقيقي ببياناته ويظهر مرة أخرى.

يعد هذا شكلاً من أشكال التوقف المؤقت، نظرًا لأنك تغش في نظام التحديث.لا يتم تحديث بيانات نظام الجسيمات أثناء الرسوم المتحركة، بل يبدو الأمر كما لو كنت تقوم بتحريك جسيم النظام الحقيقي، في حين أنك في الواقع تخدع المستخدم بيانيًا.آمل أن يكون هذا منطقيًا، الساعة الثانية صباحًا هنا :)

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